我需要您的帮助来解释如何获得与此函数相同的结果:gini(x,重量=rep(1,长度=长度(x))http://cran.r-project.org/web/packages/reldist/reldist.pdf-->第2页。Gini
比方说,我们需要测量种群N的inocme。为此,我们可以将种群N划分为K个子组。在每一个子组kth中,我们将取nk个人并询问他们的收入。因此,我们将得到"个人收入",每个人都将有特定的"样本权重"来表示他们对人口N的贡献。以下是我从上一个链接中得到的例子,数据集来自NLS
rm(list=ls())
cat(" 14")
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节,来自本书:"相对社会科学中的分配方法
#-------------------------
# 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.34833615,请给我你的建议。
非常感谢朋友们。
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
来查看。没有括号或其他任何东西。
编辑:这真的可以用于任何函数或对象。
这有点晚了,但人们可能对[SciencesPo][1]
包中包含的浓度/多样性测量感兴趣。