我正在尝试使用SO Data Explorer在SO信誉分布上计算基尼系数。我要实现的方程式是: 其中: =网站上的用户数; =用户序列号(1-225,000); =用户信誉。niyi我
这就是我的实现方式(从此处复制):
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,因为声誉如何拥有的越多,它就会增长。
我是否在不知不觉中忽略了有关声誉/用户分布的某些假设?
我做错了什么?
您是对的,但我不确定为什么会影响计算?
—
yossale 2012年
我猜您的问题是关于Gini索引的性质和计算,而不是关于如何在SQL中实现(如果我错了,请纠正我)。如果是后者,我们应该将此迁移到SO。继续我的假设,我已经从SE数据站点复制了您的代码,但是如果您还可以为那些不太懂SQL的人也可以用伪代码重写它,则可能会有所帮助。
—
gung-恢复莫妮卡
@gung谢谢-我问的是计算,而不是SQL实现。我将用伪代码重新编写它
—
yossale 2012年