r——面板数据中的基尼系数



我有一个分组的数据结构(不同的家庭回答每周的民意调查(,我在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表示不参与。

这里有三种方法。它们都使用包DescTools中的函数Gini

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系数值,而不是聚合,请使用tapplymutateave整数,而不是summarise

带基本R

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

dplyr溶液

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

相关内容

  • 没有找到相关文章

最新更新