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