固定效应 plm 包 R - 每年多次观察/id

dmu*_*low 4 r economics plm

我正在研究州和年份固定效应回归,根据该行的种族(白色、黑色、其他),每个州/年组合有 3 个观察值 - 请参阅下面的链接。
到目前为止,我一直在使用基础 lm 函数来估计一个固定效应回归,该回归解释了所有三个种族。我通过使用状态、年份和种族都作为因子变量来做到这一点。我还为每个单独的种族运行单独的回归。问题是我更喜欢使用 plm 包,这样我就可以获得所有种族的模型的 r 平方内,但是它给了我错误。

编辑:我在这里包含了我的数据图片, 数据是一个平衡面板,有 34 个州,12 年(2003-2014 年)和每个州/年组合的 3 场比赛,因此总共有 1244 次观察。

这是我用来运行 plm 回归的代码:

#plm regression
plm.reg <- plm(drugcrime_ar ~ decrim_dummy + median_income + factor(race),
               data = my.data, index=c("st_name","year"), model = "within",
               effect = "twoways")
Run Code Online (Sandbox Code Playgroud)

我得到的错误回报:

Error in pdim.default(index[[1]], index[[2]]): 
   duplicate couples (id-time) 
In addition: Warning messages: 
1: In pdata.frame(data, index) :
   duplicate couples (id-time) in resulting pdata.frame
   to find out which, use e.g. table(index(your_pdataframe), useNA = "ifany"
2: In is.pbalanced.default(index[[1]], index[[2]]) :
   duplicate couples (id-time)
 3: In is.pbalanced.default(index[[1]], index[[2]]) :
   duplicate couples (id-time)  ` 
Run Code Online (Sandbox Code Playgroud)

有没有解决方法,还是我运气不好?

Rod*_*dio 5

plm函数只需要一对 id/time。对于您提供的每个 ID,您有超过一年的时间。

如果每个st_namerace对形成一个“个体”(或任何你给面板的这个维度起的名字),那么你可以这样做:

library(dplyr)

my.data$id <- group_indices(my.data, st_name, race)    
#which would be the same as my.data <- my.data %>% mutate(id = group_indices(st_name, race)), if this function supported mutate. 

plm.reg <- plm(drugcrime_ar ~ decrim_dummy + median_income + factor(race),
           data = my.data, index=c("id","year"), model = "within",
           effect = "twoways")
Run Code Online (Sandbox Code Playgroud)

但是,请注意,在这种情况下,您没有使用 @Helix123 建议的嵌套面板结构。您只是在重新定义面板的第一个维度。