Обобщенный Джини с весами в R

#r #inequality #gini

#r #неравенство #джини

Вопрос:

Я хочу рассчитать взвешенные обобщенные коэффициенты Джини. CRAN распределяет пакет «acid» с подходящей функцией.

Чего мне здесь не хватает? Когда веса постоянны, оценки weighted.gini и sgini равны при заданном параметре nu = 2 (чтобы получить обычный джини). Когда веса непостоянны, они различаются. Происходит что-то подозрительное или я что-то упускаю? Они должны быть одинаковыми, верно?

Проверено с помощью функции STATA sgini ван Керма, которая цитируется в документации acid, и ее функция возвращает ожидаемые одинаковые оценки.

 set.seed(123)
install.packages("acid")
library(acid)
x <- rnorm(100,10,1)
w <- rep(1, length(x))
acid::weighted.gini(x,w)$Gini
acid::sgini(x,w,nu=2)$Gini
w <- rnorm(100,10,1)
acid::weighted.gini(x,w)$Gini
acid::sgini(x,w,nu=2)$Gini
 

Ответ №1:

В «sgini» есть ошибка. В формуле, которую имеет команда «sgini», в той же точке среднее значение (x) вычисляется без учета весов.

Если бы мы попытались вручную вычислить взвешенный Джини по формулам: https://core.ac.uk/download/pdf/41339501.pdf

 set.seed(123)

x <- rnorm(100,10,1)
w <- rep(1, length(x))
acid::weighted.gini(x,w)$Gini
acid::sgini(x,w,nu=2)$Gini
w <- rnorm(100,10,1)
acid::weighted.gini(x,w)
acid::sgini(x,w,nu=2)

#calc manually
ox<-order(x)
x<-x[ox]
w<-w[ox]
#cov(x,cumsum(x)/cumsum(x)[length(x)])*2/mean(x) #gini without weights
w<-w/sum(w)
f<-w/2 cumsum(c(0,w[-length(w)]))
2/sum(x*w)*sum(w*(x-sum(x*w))*(f-sum(f*w))) #==weighted.gini(x,w)$Gini