我需要您的帮助来解释我如何获得与此函数相同的结果:
gini(x, weights=rep(1,length=length(x)))
http://cran.r-project.org/web/packages/reldist/reldist.pdf --> 第 2 页。
比方说,我们需要测量总体 N 的 inocme。为此,我们可以将总体 N 划分为 K 个子组。在每个子组 kth 中,我们将取 nk 个个体并询问他们的收入。结果,我们将得到“个人的收入”,每个人都有特定的“样本权重”来表示他们对总体 N 的贡献。这是我从上一个链接中获取的示例,数据集来自 NLS
rm(list=ls())
cat("\014")
library(reldist)
data(nls);data
help(nls)
# Convert the wage growth from (log. dollar) to (dollar)
y <- exp(recent$chpermwage);y
# Compute the unweighted estimate
gini_y <- gini(y)
# Compute the weighted estimate
gini_yw <- gini(y,w=recent$wgt)
> --- Here is the result----
> gini_y = 0.3418394
> gini_yw = 0.3483615
我知道如何通过我自己的代码计算没有权重的基尼系数。因此,我想毫无疑问地将命令 gini(y) 保留在我的代码中。我唯一关心的是 gini(y,w) 获得结果 0.3483615 的操作方式。我尝试进行如下另一次计算,看看是否能得出与gini_yw 相同的结果。这是我基于 CDF 第 9.5 节这本书的另一个代码:
《社会科学中的分配方法》,Mark S. Handcock,
#-------------------------
# test how gini computes with the sample weights
z <- exp(recent$chpermwage) * recent$wgt
gini_z <- gini(z)
# Result gini_z = 0.3924161
如您所见,我的计算 gini_z 与命令 gini(y, weights) 不同。如果你们中有人知道如何建立正确的计算来准确地获得
gini_yw = 0.3483615,请给我您的建议。
非常感谢 friend 。
最佳答案
function (x, weights = rep(1, length = length(x)))
{
ox <- order(x)
x <- x[ox]
weights <- weights[ox]/sum(weights)
p <- cumsum(weights)
nu <- cumsum(weights * x)
n <- length(nu)
nu <- nu/nu[n]
sum(nu[-1] * p[-n]) - sum(nu[-n] * p[-1])
}
这是函数
gini
的源代码,可以通过在控制台中输入 gini
来查看。没有括号或其他任何东西。编辑:
这实际上可以对任何函数或对象完成。
关于r - 用 sample 重量计算基尼系数的公式是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20556095/