Estou tentando calcular o índice Gini na distribuição de reputação do SO usando o SO Data Explorer. A equação que estou tentando implementar é a seguinte: Onde: = número de usuários no site; = ID de série do usuário (1 - 1.225.000); = reputação do usuário .niyii
É assim que eu o implementei (copiado daqui ):
DECLARE @numUsers int
SELECT @numUsers = COUNT(*) FROM Users
DECLARE @totalRep float
SELECT @totalRep = SUM(Users.Reputation) FROM Users
DECLARE @giniNominator float
SELECT @giniNominator = SUM( (@numUsers + 1 - CAST(Users.Id as Float)) *
CAST(Users.Reputation as Float)) FROM Users
DECLARE @giniCalc float
SELECT @giniCalc = (@numUsers + 1 - 2*(@giniNominator / @totalRep)) / @numUsers
SELECT @giniCalc
Meu resultado é (atualmente) -0,53, mas não faz sentido: não sei ao certo como isso pode ter se tornado negativo, e mesmo com o valor abs, eu esperava que a desigualdade estivesse muito mais próxima de 1, considerando a reputação cresce quanto mais você tem.
Ignoro, sem saber, algumas suposições sobre a distribuição da reputação / usuários?
O que eu faço de errado?
Respostas:
Aqui está como você pode calculá-lo com SQL:
A explicação está aqui https://medium.com/@medvedev1088/calculating-gini-coefficient-in-bigquery-3bc162c82168
fonte
Não consigo ler o
SQL
código com muita facilidade, mas se ajudar, se eu fosse calcular o coeficiente de Gini, é isso que eu faria (em inglês).Eu tomei essas medidas do código notavelmente direto na
R
função (no pacote ineq ) para calcular o coeficiente de Gini. Para o registro, aqui está esse código:Parece um pouco parecido com o seu
SQL
código, mas como eu disse, não consigo ler muito facilmente!fonte
fonte
Adicionando à resposta @smillig, com base na equação fornecida:
Me deu no meu conjunto de testes:
0.45503253636587840
Que é o mesmo que as bibliotecas ineq de R Gini (x)
fonte