Ich versuche, den Gini-Index für die SO-Reputationsverteilung mit SO Data Explorer zu berechnen. Die Gleichung, die ich zu implementieren versuche, lautet: Wobei:n= Anzahl der Benutzer auf der Site; i= Benutzer-Seriennummer (1 - 1.225.000); yi= Ruf des Benutzersi.
So habe ich es implementiert (von hier kopiert ):
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
Mein Ergebnis ist (derzeit) -0,53, aber es macht keinen Sinn: Ich bin mir nicht sicher, wie es negativ geworden sein könnte, und selbst im abs-Wert hätte ich erwartet, dass die Ungleichung angesichts des guten Rufs viel näher bei 1 liegt wächst, je mehr du es hast.
Ignoriere ich unwissentlich eine Annahme über die Verteilung des Rufs / der Benutzer?
Was mache ich falsch?
Antworten:
So können Sie es mit SQL berechnen:
Erläuterungen finden Sie hier https://medium.com/@medvedev1088/calculating-gini-coefficient-in-bigquery-3bc162c82168
quelle
Ich kann den
SQL
Code nicht leicht lesen , aber wenn es hilft, wenn ich den Gini-Koeffizienten berechnen würde, würde ich dies tun (in einfachem Englisch).Ich habe diese Schritte aus dem bemerkenswert einfachen Code in der
R
Funktion (im ineq- Paket) zur Berechnung des Gini-Koeffizienten gemacht. Für die Aufzeichnung ist hier dieser Code:Es sieht Ihrem
SQL
Code etwas ähnlich , aber wie gesagt, ich kann das nicht so einfach lesen!quelle
quelle
Hinzufügen zu @smillig Antwort, basierend auf der angegebenen Gleichung:
Gab mir auf meinem Test-Set:
0,45503253636587840
Welches ist das gleiche wie Rs ineq Bibliotheken Gini (x)
quelle