固定效应 plm 包 R - 每个 year/id 多次观察
Fixed Effects plm package R - multiple observations per year/id
我正在研究州和年份的固定效应回归,每个 state/year 组合有 3 个观察值,基于该行的种族(白色、黑色、其他)- 请参阅 link下面。
到目前为止,我一直在使用基本 lm 函数来估计一个固定效应回归,该回归解释了所有三个种族。我通过使用州、年份和种族作为因子变量来做到这一点。我还 运行 对每个种族进行单独的回归。问题是我更愿意使用 plm 包,这样我就可以得到所有种族模型的内部 r 平方,但是它给了我错误。
编辑:I included a picture of my data here
数据是一个平衡面板,有 34 个州,12 年(2003-2014)和每个 state/year 组合的 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")
我在 return 中遇到的错误:
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) `
有解决办法吗?还是我运气不好?
plm
函数只需要一对 id/time。对于您提供的每个 ID,您有超过一年的时间。
如果每个 st_name
和 race
对形成一个 "individual"(或者你给这个面板的这个维度起的任何名字),那么你可以这样做:
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")
然而,请注意,在这种情况下,您没有使用 @Helix123 建议的嵌套面板结构。您只是重新定义面板的第一个维度。
我正在研究州和年份的固定效应回归,每个 state/year 组合有 3 个观察值,基于该行的种族(白色、黑色、其他)- 请参阅 link下面。
到目前为止,我一直在使用基本 lm 函数来估计一个固定效应回归,该回归解释了所有三个种族。我通过使用州、年份和种族作为因子变量来做到这一点。我还 运行 对每个种族进行单独的回归。问题是我更愿意使用 plm 包,这样我就可以得到所有种族模型的内部 r 平方,但是它给了我错误。
编辑:I included a picture of my data here 数据是一个平衡面板,有 34 个州,12 年(2003-2014)和每个 state/year 组合的 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")
我在 return 中遇到的错误:
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) `
有解决办法吗?还是我运气不好?
plm
函数只需要一对 id/time。对于您提供的每个 ID,您有超过一年的时间。
如果每个 st_name
和 race
对形成一个 "individual"(或者你给这个面板的这个维度起的任何名字),那么你可以这样做:
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")
然而,请注意,在这种情况下,您没有使用 @Helix123 建议的嵌套面板结构。您只是重新定义面板的第一个维度。