我正在尝试运行
plm
面板固定效果模型。面板指数以县年度水平运行。挑战?我想在(更高阶)state 级别运行固定效果。我可以轻松地使用 fixest
进行编程,但我不确定如何使用 plm
进行编程。
这是示例数据
df <- data.frame(year= rep(c(2000, 2001, 2003, 2000, 2002, 2004), each=10),
county= rep(c("c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "c10"), times=6),
state= rep(c("s1", "s2", "s3", "s4", "s5"), each=2, times=6),
temperature= runif(60, min=40, max=80),
trade= runif(60, min=10, max=20),
policy.outcome= runif(60, min=0, max=100))
这是我想用 plm 复制的最固定模型
m1.fixest <- feols(policy.outcome
~ temperature + trade|state+year,
panel.id= ~county+year,
data=df)
谢谢你,
首先请注意,您的数据集具有年份 = 2000 的重复索引。
feols
不会抱怨这一点,但 plm
会抱怨。假设这是一个错误,我稍微改变了您的数据生成,最终得到唯一的索引组合。
使用
plm
,如果您想要除索引维度的一次之外的固定效应,则需要将它们显式指定为回归量(LSDV 方法)。在这里,您可以通过 effect = "time"
估计时间固定效应模型以实现 year
固定效应,并明确指定 + factor(state)
来解释 state
固定效应,因为各个维度由 county
给出。
df <- data.frame(year= rep(c(2000, 2001, 2003, 2005, 2002, 2004), each=10),
county= rep(c("c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "c10"), times=6),
state= rep(c("s1", "s2", "s3", "s4", "s5"), each=2, times=6),
temperature= runif(60, min=40, max=80),
trade= runif(60, min=10, max=20),
policy.outcome= runif(60, min=0, max=100))
library(fixest)
m1.fixest <- feols(policy.outcome
~ temperature + trade|state+year,
panel.id= ~county+year,
data=df)
library(plm)
m1.plm <- plm(policy.outcome ~ temperature + trade + factor(state),
index = c("county", "year"), effect = "time",
data=df)