2013-12-12 73 views
2

我需要你的幫助來解釋我如何可以獲得與此功能相同的結果: gini(x,weights = rep(1,length = length(x)) ) http://cran.r-project.org/web/packages/reldist/reldist.pdf - >第2頁。基尼什麼是公式計算基尼與樣品重量

比方說,我們需要測量人口N的接種量。爲此,我們可以將人口N分成K個子羣。在每個小組中,我們會拿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(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,請告訴我您的建議。

非常感謝朋友。

+0

你可以看看'gini'的代碼來看看它在做什麼 –

+0

嗨尼爾,是否有可能在包中查看代碼gini? –

回答

4
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到控制檯可以看出的源代碼。沒有括號或其他任何東西。

編輯: 這可以完成任何功能或對象。

+0

非常感謝朋友。現在我明白'gini'的工作原理了。 –

0

這有點遲,但可能對[SciencesPo][1]包中包含的濃度/多樣性措施感興趣。

+0

謝謝丹尼爾的回答。雖然我在2年前完成了這項工作,但我非常感謝你的共享信息。週末愉快! –