2013-12-12 3 views
2

Мне нужно ваше объяснение, как я могу получить тот же результат, что и эта функция: gini (x, weights = rep (1, length = length (x))) http://cran.r-project.org/web/packages/reldist/reldist.pdf -> стр. 2. GiniЧто такое формула для вычисления гинии с весом образца

Скажем, нам нужно измерить inocme популяции 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 

Я знаю, как вычислить Джини без ВЕС по моему собственному коду. Поэтому я бы хотел оставить команду gini (y) в своем коде без каких-либо сомнений. Единственное, что мне нужно, это то, как работает gini (y, w), чтобы получить результат 0.3483615. Я попытался сделать еще один расчет, как показано ниже, чтобы узнать, могу ли я получить тот же результат, что и gini_yw. Вот еще один код, который я на основе КОР, раздел 9.5, из этой книги: «» Относительные Методы распределения в социальных науках «» Марк С. 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

Hi Neal, возможно ли мне заглянуть внутрь кода 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 в консоль. Никаких скобок или чего-либо еще.

EDIT: Это может быть сделано для любой функции или объекта.

+0

Спасибо, много друзей. Теперь я понимаю, как работает 'gini'. –

0

Это немного поздно, но вас могут заинтересовать меры концентрации/разнесения, содержащиеся в пакете [SciencesPo][1].

+0

Спасибо, Дэниэл, за ваш ответ. Хотя я закончил эту работу 2 года назад, я действительно ценю вашу общую информацию. Хороших выходных! –