计算样品重量的gini的公式是什么

时间:2013-12-12 23:05:11

标签: r gini

我需要你的帮助来解释我如何获得与此函数相同的结果: gini(x,weights = rep(1,length = length(x))) http://cran.r-project.org/web/packages/reldist/reldist.pdf - >第2页。基尼

让我们说,我们需要测量人口N的数量。为此,我们可以将人口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相同的结果。这是我基于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,权重)不同。如果有人知道如何构建正确的计算以获得确切的 gini_yw = 0.3483615,请给我你的意见。

非常感谢朋友们。

2 个答案:

答案 0 :(得分: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输入控制台来查看。没有括号或其他任何内容。

编辑: 这可以真正为任何功能或对象完成。

答案 1 :(得分:0)

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