Коэффициент Джини в данных панели - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть сгруппированная структура данных (разные домохозяйства отвечают на еженедельный опрос общественного мнения), и я наблюдаю их в течение 52 недель (в примере ниже четырех недель). Теперь я хочу указать стоимость домохозяйства в данный момент времени, используя коэффициент Джини. В этом случае стоимость домохозяйства, участвующего в опросе, должна быть выше, если домохозяйство не участвовало в последние недели. Таким образом, домохозяйство, всегда отвечающее на опрос, должно иметь более низкий коэффициент Джини на данной неделе, чем домохозяйство, отвечающее каждые 4 недели.

Структура данных следующая:


    da_poll <- data.frame(household = c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4), week = c(1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4), participation = c(1,1,1,1,0,0,0,1,0,1,0,1,1,1,1,0))
    da_poll
       household week participation
    1          1    1             1
    2          1    2             1
    3          1    3             1
    4          1    4             1
    5          2    1             0
    6          2    2             0
    7          2    3             0
    8          2    4             1
    9          3    1             0
    10         3    2             1
    11         3    3             0
    12         3    4             1
    13         4    1             1
    14         4    2             1
    15         4    3             1
    16         4    4             0

1 указывает на участие , 0 без участия.

1 Ответ

1 голос
/ 25 февраля 2020

Вот три способа. Все они используют функцию Gini в пакете DescTools.

library(DescTools)

База R

tapply(da_poll$participation, da_poll$household, Gini)
#        1         2         3         4 
#0.0000000 1.0000000 0.6666667 0.3333333 

Или еще один базовый путь R.

aggregate(participation ~ household, da_poll, Gini)
#  household participation
#1         1     0.0000000
#2         2     1.0000000
#3         3     0.6666667
#4         4     0.3333333

dplyr

library(dplyr)

da_poll %>% 
  group_by(household) %>%
  summarise(gini = Gini(participation))
## A tibble: 4 x 2
#  household  gini
#      <dbl> <dbl>
#1         1 0    
#2         2 1    
#3         3 0.667
#4         4 0.333

Редактировать.

Чтобы иметь одно Gini значение коэффициента на строку исходного набора данных, а не агрегат, используйте ave intead of tapply и mutate вместо summarise.

С основанием R

da_poll$gini <- ave(da_poll$participation, da_poll$household, FUN = Gini)

dplyr решение

da_poll %>% 
  group_by(household) %>%
  mutate(gini = Gini(participation))
...