30

我想找到最接近 Stata 输出的 R 实现,用于拟合具有 Heteroskedastic Corrected Standard Errors 的最小二乘回归函数。具体来说,我希望更正的标准错误出现在“摘要”中,并且不必为我的第一轮假设检验做额外的计算。我正在寻找与 Eviews 和 Stata 提供的一样“干净”的解决方案。

到目前为止,我能想到的最好的使用“lmtest”包是:

model <- lm(...)
coeftest(model, vcov = hccm) 

这给了我想要的输出,但它似乎并没有将“coeftest”用于其既定目的。我还必须使用具有不正确标准错误的摘要来读取 R^2 和 F stat 等。鉴于 R 的动态性,我认为应该存在一个“单行”解决方案来解决这个问题。

谢谢

4

3 回答 3

39

我认为您coeftest在 lmtest 包中走在正确的轨道上。查看包含此功能的三明治包,它旨在与您已经找到的 lmtest 包协同工作。

> # generate linear regression relationship
> # with Homoskedastic variances
> x <- sin(1:100)
> y <- 1 + x + rnorm(100)
> ## model fit and HC3 covariance
> fm <- lm(y ~ x)
> vcovHC(fm)
            (Intercept)           x
(Intercept) 0.010809366 0.001209603
x           0.001209603 0.018353076
> coeftest(fm, vcov. = vcovHC)

t test of coefficients:

            Estimate Std. Error t value  Pr(>|t|)    
(Intercept)  1.01973    0.10397  9.8081 3.159e-16 ***
x            0.93992    0.13547  6.9381 4.313e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

要获得 F 测试,请查看函数waldtest()

> waldtest(fm, vcov = vcovHC)
Wald test

Model 1: y ~ x
Model 2: y ~ 1
  Res.Df Df      F    Pr(>F)    
1     98                        
2     99 -1 48.137 4.313e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

如果您想要单线,您总是可以为您设计一个简单的功能来将这两者结合起来......

使用 HC 和 HAC 协方差矩阵估计器的计量经济计算中有很多示例,其中包含链接 lmtest 和三明治的三明治包来做你想做的事。

编辑:单线可以很简单:

mySummary <- function(model, VCOV) {
    print(coeftest(model, vcov. = VCOV))
    print(waldtest(model, vcov = VCOV))
}

我们可以像这样使用它(在上面的例子中):

> mySummary(fm, vcovHC)

t test of coefficients:

            Estimate Std. Error t value  Pr(>|t|)    
(Intercept)  1.01973    0.10397  9.8081 3.159e-16 ***
x            0.93992    0.13547  6.9381 4.313e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Wald test

Model 1: y ~ x
Model 2: y ~ 1
  Res.Df Df      F    Pr(>F)    
1     98                        
2     99 -1 48.137 4.313e-10 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
于 2010-12-08T09:27:10.627 回答
10

我找到了一个 R 函数,它完全符合您的要求。它为您提供可靠的标准误差,而无需进行额外的计算。您summary()在 lm.object 上运行,如果您设置参数robust=T,它会给您返回类似 Stata 的异方差一致的标准错误。

summary(lm.object, robust=T)

您可以在https://economictheoryblog.com/2016/08/08/robust-standard-errors-in-r/上找到该功能

于 2016-08-23T18:01:39.967 回答
2

lm_robust现在有一个使用from estimatrpackage的单行解决方案,您可以从 CRAN 安装它install.packages(estimatr)

> library(estimatr)
> lmro <- lm_robust(mpg ~ hp, data = mtcars, se_type = "stata")
> summary(lmro)

Call:
lm_robust(formula = mpg ~ hp, data = mtcars, se_type = "stata")

Standard error type:  HC1 

Coefficients:
            Estimate Std. Error  Pr(>|t|) CI Lower CI Upper DF
(Intercept) 30.09886    2.07661 4.348e-15 25.85785 34.33987 30
hp          -0.06823    0.01356 2.132e-05 -0.09592 -0.04053 30

Multiple R-squared:  0.6024 ,   Adjusted R-squared:  0.5892 
F-statistic: 45.46 on 1 and 30 DF,  p-value: 1.788e-07

您还可以获得整洁的输出:

> tidy(lmro)
         term    estimate std.error      p.value    ci.lower
1 (Intercept) 30.09886054 2.0766149 4.347723e-15 25.85784704
2          hp -0.06822828 0.0135604 2.131785e-05 -0.09592231
     ci.upper df outcome
1 34.33987404 30     mpg
2 -0.04053425 30     mpg

"stata"标准错误默认为“HC1”标准错误,这是Stata中的默认标准rob错误。您还可以获得"classical", "HC0", "HC1", "HC2", "HC3"各种聚类标准错误(包括那些与 Stata 匹配的错误)。

于 2018-04-18T17:37:56.373 回答