Я намагаюся обчислити індекс Джині для розподілу репутації SO за допомогою SO Data Explorer. Рівняння, яке я намагаюся реалізувати, таке: Де: = кількість користувачів на сайті; = серійний ідентифікатор користувача (1 - 1,225,000); = репутація користувача .niyii
Ось як я його реалізував (скопіював звідси ):
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
Мій результат (наразі) -0,53, але це не має сенсу: я навіть не впевнений, як це могло б стати негативним, і навіть в абс-значеннях, я б очікував, що нерівність буде набагато ближче до 1, враховуючи, наскільки репутація росте, тим більше у вас є.
Я несвідомо ігнорую якесь припущення щодо розподілу репутації / користувачів?
Що я роблю неправильно?