3

我需要您的帮助来解释如何获得与此函数相同的结果:gini(x, weights=rep(1,length=length(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("\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

我知道如何通过我自己的代码计算没有 WEIGHTS 的 Gini。因此,毫无疑问,我想在我的代码中保留命令 gini(y)。我唯一关心的是 gini(y,w) 的操作方式以获得结果 0.3483615。我尝试进行如下计算,看看是否能得出与 gini_yw 相同的结果。这是我基于本书第 9.5 节 CDF 的另一个代码: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,请给我您的建议。

非常感谢朋友。

4

2 回答 2

5
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控制台看到。没有括号或其他任何东西。

编辑:这可以为任何函数或对象完成。

于 2013-12-13T00:36:10.083 回答
0

这有点晚了,但人们可能会对[SciencesPo][1]包中包含的集中度/多样性措施感兴趣。

于 2015-11-21T01:12:11.023 回答