Что такое формула для расчета Джини с весом образца

Мне нужна ваша помощь, чтобы объяснить, как я могу получить тот же результат, что и эта функция: 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

Я знаю, как вычислить Джини без весов по моему собственному коду. Поэтому я хотел бы сохранить команду 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.3483615, пожалуйста, дайте мне свои советы.

Спасибо большое друзья.

2 ответа

Решение
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] пакет.

Другие вопросы по тегам