Próbuję obliczyć indeks Gini dla dystrybucji reputacji SO za pomocą SO Data Explorer. Równanie, które próbuję zaimplementować, jest następujące: Gdzie:n= liczba użytkowników w witrynie; i= identyfikator seryjny użytkownika (1 - 1 225 000); yi= reputacja użytkownikai.
Oto jak to zaimplementowałem (skopiowałem stąd ):
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
Mój wynik wynosi (obecnie) -0,53, ale nie ma sensu: nawet nie jestem pewien, jak mógłby stać się ujemny, a nawet w wartości abs, spodziewałbym się, że nierówność będzie znacznie bliższa 1, biorąc pod uwagę, jak reputacja rośnie, tym więcej masz.
Czy nieświadomie ignoruję pewne założenia dotyczące rozpowszechniania reputacji / użytkowników?
Co robię źle?