将公式 ("string") 与 lfe 包中的 felm() 一起使用,同时还使用固定效果

Use the formula("string") with felm() from the lfe package while also using fixed effects

我正在尝试 运行 一个在其他地方创建的大型回归公式作为一个长字符串。我也想用"fixed effects"(个别具体拦截)。

没有固定效果,这在 lm()felm() 函数中都有效:

library("lfe")
MyData <- data.frame(country = c("US","US","DE","DE"),
             y = rnorm(4),
             x = rnorm(4))

testformula <- "y ~ x"

lm(formula(testformula),
   data = MyData)

felm(formula(testformula),
     data = MyData)

如果我使用国家固定效应,felm()中的这种回归也没有问题:

felm(y ~ x | country,
     data = MyData)

但是,当我尝试结合使用 formula() 函数和固定效果参数时,出现错误:

felm(formula(testformula) | country ,
     data = MyData)

"Error in terms(formula(as.Formula(formula), rhs = 1), specials = "G") : 
Object 'country' not found"

我觉得这很奇怪,分开来说,这两个论点都有效。如何在 felm() 中使用 formula() 函数并仍然使用该函数方便的固定效果语法?我不想将固定效应写入公式,因为我想依赖 lfe 包的内部转换。

p.s.: 顺便说一句,这在 plm() 中有效,所以我猜 felm() 函数中有一些奇怪的东西,或者我输入的很糟糕。

library("plm")

plm(formula(testformula),
    data =  MyData,
    index = c("country"),
    model = "within",
    effect = "individual")

由于固定效应是公式的一部分*,我们可以将它们包含在公式字符串中。

fit1 <- felm(y ~ x | country, data=MyData)

testformula <- "y ~ x | country"
fit2 <- felm(formula(testformula), data=MyData)
fit2
#      x 
# 0.3382 

all.equal(fit1$coefficients, fit2$coefficients)
# [1] TRUE

*你可以从 R 中的函数参数通常用逗号分隔这一事实看出这一点