我读了很多关于将简单的稳健选项从STATA复制到R以使用稳健标准错误的痛苦。我复制了以下方法:StackExchange和经济理论博客。它们有效,但我面临的问题是,如果我想使用stargazer
函数打印结果(这将打印Latex文件的.tex
代码(。
以下是我的问题:
reg1 <-lm(rev~id + source + listed + country , data=data2_rev)
stargazer(reg1)
这将R输出打印为.tex代码(非鲁棒SE(。如果我想使用鲁棒SE,我可以使用三明治包,如下所示:
vcov <- vcovHC(reg1, "HC1")
如果我现在使用stargazer(vcov(,则只打印vcovHC函数的输出,而不打印回归输出本身。
使用包lmtest()
,可以至少打印估计器,但不打印观测值、R2、adj.R2、残差、残差和F-统计量。
lmtest::coeftest(reg1, vcov. = sandwich::vcovHC(reg1, type = 'HC1'))
这会产生以下输出:
t test of coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2.54923 6.85521 -0.3719 0.710611
id 0.39634 0.12376 3.2026 0.001722 **
source 1.48164 4.20183 0.3526 0.724960
country -4.00398 4.00256 -1.0004 0.319041
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
如何添加或获得具有以下参数的输出?
Residual standard error: 17.43 on 127 degrees of freedom
Multiple R-squared: 0.09676, Adjusted R-squared: 0.07543
F-statistic: 4.535 on 3 and 127 DF, p-value: 0.00469
有人面临同样的问题,可以帮助我吗?如何在lm
函数中使用稳健的标准误差并应用stargazer
函数?
您已经计算出了稳健的标准误差,有一种简单的方法可以将其包含在stargazer
输出中:
library("sandwich")
library("plm")
library("stargazer")
data("Produc", package = "plm")
# Regression
model <- plm(log(gsp) ~ log(pcap) + log(pc) + log(emp) + unemp,
data = Produc,
index = c("state","year"),
method="pooling")
# Adjust standard errors
cov1 <- vcovHC(model, type = "HC1")
robust_se <- sqrt(diag(cov1))
# Stargazer output (with and without RSE)
stargazer(model, model, type = "text",
se = list(NULL, robust_se))
在此处找到解决方案:https://www.jakeruss.com/cheatsheets/stargazer/#robust-标准错误复制statas鲁棒选项
更新我不太喜欢F-Tests。人们正在讨论这些问题,例如。https://stats.stackexchange.com/questions/93787/f-test-formula-under-robust-standard-error
当你跟随http://www3.grips.ac.jp/~yamanota/讲师_备注_9_赫特斯基基性
"异方差稳健t统计量可以通过将OSL估计器除以其稳健标准误差(对于零零假设(来获得。然而,通常的F统计量是无效的。相反,我们需要使用异方差稳健Wald统计量。">
并在这里使用Wald统计?
这是一个使用coefftest的相当简单的解决方案:
reg1 <-lm(rev~id + source + listed + country , data=data2_rev)
cl_robust <- coeftest(reg1, vcov = vcovCL, type = "HC1", cluster = ~
country)
se_robust <- cl_robust[, 2]
stargazer(reg1, reg1, cl_robust, se = list(NULL, se_robust, NULL))
请注意,我只是在输出中包含cl_robust,以验证结果是否相同。