J'essaie de calculer l'index Gini sur la distribution de réputation SO à l'aide de SO Data Explorer. L'équation que j'essaie de mettre en œuvre est la suivante: Où:n= nombre d'utilisateurs sur le site; i= identifiant de série de l'utilisateur (1 - 1 225 000); yi= réputation de l'utilisateuri.
Voici comment je l'ai implémenté (copié d' ici ):
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
Mon résultat est (actuellement) -0,53, mais cela n'a aucun sens: je ne sais même pas comment il aurait pu devenir négatif, et même en valeur abs, je m'attendais à ce que l'inégalité soit beaucoup plus proche de 1, étant donné la réputation grandit plus vous en avez.
Suis-je inconsciemment en train d'ignorer certaines hypothèses sur la distribution de la réputation / des utilisateurs?
Qu'est-ce que je fais mal?
Réponses:
Voici comment vous pouvez le calculer avec SQL:
L'explication est ici https://medium.com/@medvedev1088/calculating-gini-coefficient-in-bigquery-3bc162c82168
la source
Je ne peux pas lire le
SQL
code très facilement, mais si cela aide, si je devais calculer le coefficient de Gini, c'est ce que je ferais (en anglais simple).J'ai pris ces mesures à partir du code remarquablement simple de la
R
fonction (dans le package ineq ) pour calculer le coefficient de Gini. Pour mémoire, voici ce code:Il ressemble un peu à votre
SQL
code, mais comme je l'ai dit, je ne peux pas vraiment le lire très facilement!la source
la source
Ajout à la réponse @smillig, basé sur l'équation fournie:
M'a donné sur mon set de test:
0,45503253636587840
Ce qui est le même que les bibliothèques ineq de R Gini (x)
la source