Расчет энтропии в сгруппированных данных панели - PullRequest
0 голосов
/ 26 февраля 2020

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

Каков наилучший способ сделать это? Если это энтропия, как мне применить ее к структуре данных панели, используя R?

Структура данных выглядит следующим образом:

da_poll <- data.frame(household = c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4), participation = c(1,1,1,1,0,0,0,1,0,1,0,1,1,1,1,0))

da_poll
   household participation
1          1             1
2          1             1
3          1             1
4          1             1
5          2             0
6          2             0
7          2             0
8          2             1
9          3             0
10         3             1
11         3             0
12         3             1
13         4             1
14         4             1
15         4             1
16         4             0

# 1 indicates participation, 0 no participation.

Я пытался сгруппировать ее по домашним хозяйствам, но затем Я получаю только одно значение для каждого домохозяйства:

da_poll %>% 
  group_by(household) %>%
  mutate(entropy = entropy(participation))

A tibble: 16 x 4
# Groups:   household [4]
   household  week participation entropy
       <dbl> <dbl>         <dbl>   <dbl>
 1         1     1             1   1.39 
 2         1     2             1   1.39 
 3         1     3             1   1.39 
 4         1     4             1   1.39 
 5         2     1             0   0    
 6         2     2             0   0    
 7         2     3             0   0    
 8         2     4             1   0    
 9         3     1             0   0.693
10         3     2             1   0.693
11         3     3             0   0.693
12         3     4             1   0.693
13         4     1             1   1.10 
14         4     2             1   1.10 
15         4     3             1   1.10 
16         4     4             0   1.10 

Если я группирую по домохозяйству и неделе, я также получаю нечто странное:

da_poll %>% 
  group_by(household, week) %>%
  mutate(entropy = entropy(participation))
# A tibble: 16 x 4
# Groups:   household, week [16]
   household  week participation entropy
       <dbl> <dbl>         <dbl>   <dbl>
 1         1     1             1       0
 2         1     2             1       0
 3         1     3             1       0
 4         1     4             1       0
 5         2     1             0      NA
 6         2     2             0      NA
 7         2     3             0      NA
 8         2     4             1       0
 9         3     1             0      NA
10         3     2             1       0
11         3     3             0      NA
12         3     4             1       0
13         4     1             1       0
14         4     2             1       0
15         4     3             1       0
16         4     4             0      NA

1 Ответ

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

Для вычисления кумулятивной энтропии вам нужно написать собственную кумулятивную функцию. Вероятно, есть более тидиверс-идомати c способ сделать это, но это то, что я придумал. Исходя из вашего поста и ваших комментариев, энтропия может не соответствовать метрике c, которую вы ищете.

cummulEntropy <- function(x){
   unlist(lapply(seq_along(x), function(i) entropy::entropy(x[1:i]))) 
 }

 da_poll %>% 
    group_by(household) %>% 
    mutate(entropy=cummulEntropy(participation))
# A tibble: 16 x 3
# Groups:   household [4]
#   household participation entropy
#       <dbl>         <dbl>   <dbl>
# 1         1             1   0    
# 2         1             1   0.693
# 3         1             1   1.10 
# 4         1             1   1.39 
# 5         2             0  NA    
# 6         2             0  NA    
# 7         2             0  NA    
# 8         2             1   0    
# 9         3             0  NA    
#10         3             1   0    
#11         3             0   0    
#12         3             1   0.693
#13         4             1   0    
#14         4             1   0.693
#15         4             1   1.10 
#16         4             0   1.10 
...