由于实施了集群标准错误方法,我想用felm()
来估计工具变量模型。使用AER::ivreg()
和plm::plm()
可以生成相同的结果。但是,在felm()
中指定函数对我来说似乎并不那么简单,而且我失败了。
我使用的是ivreg()
帮助的示例,其中tdiff
和I(tax/cpi)
都是log(rprice)
的工具:
library(AER)
aer.hat <- ivreg(log(packs) ~ log(rprice) + log(rincome) | log(rincome) + tdiff + I(tax/cpi),
data=CigarettesSW, subset=year == "1995")
> coef(aer.hat)
(Intercept) log(rprice) log(rincome)
9.8949555 -1.2774241 0.2804048
使用plm()
,我可以轻松生成相同的结果:
library(plm)
plm.hat <- plm(log(packs) ~ log(rprice) + log(rincome) | log(rincome) + tdiff + I(tax/cpi),
data=CigarettesSW[CigarettesSW$year == 1995, ], model="pooling")
> coef(plm.hat)
(Intercept) log(rprice) log(rincome)
9.8949555 -1.2774241 0.2804048
但是我失败了,lfe::felm()
:
library(lfe)
felm.hat <- felm(log(packs) ~ log(rprice) + log(rincome) | 0 | log(rprice) ~ tdiff + I(tax/cpi) | 0 ,
data=CigarettesSW[CigarettesSW$year == 1995, ])
> coef(felm.hat)
(Intercept) tdiff I(tax/cpi)
1.000000e+00 -8.187404e-17 -3.294448e-17
我们如何在felm()
中做到这一点?
data("CigarettesSW", package="AER")
CigarettesSW$rprice <- with(CigarettesSW, price/cpi)
CigarettesSW$rincome <- with(CigarettesSW, income/population/cpi)
CigarettesSW$tdiff <- with(CigarettesSW, (taxs - tax)/cpi)
答案 0 :(得分:1)
我们有
felm.hat <- felm(log(packs) ~ log(rincome) | 0 | (log(rprice) ~ tdiff + I(tax/cpi)),
data = CigarettesSW[CigarettesSW$year == 1995, ])
coef(felm.hat)
# (Intercept) log(rincome) `log(rprice)(fit)`
# 9.8949555 0.2804048 -1.2774241
第1点:检测变量log(rprice)
仅需要在第三部分,而无需将其添加到第一部分。
第2点:在第三部分中添加了括号; ?felm
说了~
和|
之间的干扰,但是我不确定在这种情况下为什么需要括号。
我也最后删除了| 0
,这是没有必要的。