我正在研究州和年份固定效应回归,根据该行的种族(白色、黑色、其他),每个州/年组合有 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)
有没有解决方法,还是我运气不好?
该plm函数只需要一对 id/time。对于您提供的每个 ID,您有超过一年的时间。
如果每个st_name和race对形成一个“个体”(或任何你给面板的这个维度起的名字),那么你可以这样做:
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 建议的嵌套面板结构。您只是在重新定义面板的第一个维度。