将公式 ("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 中的函数参数通常用逗号分隔这一事实看出这一点
我正在尝试 运行 一个在其他地方创建的大型回归公式作为一个长字符串。我也想用"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 中的函数参数通常用逗号分隔这一事实看出这一点