Stata和R中Logit回归的不同稳健标准误差

Posted

技术标签:

【中文标题】Stata和R中Logit回归的不同稳健标准误差【英文标题】:Different Robust Standard Errors of Logit Regression in Stata and R 【发布时间】:2015-02-06 16:44:35 【问题描述】:

我正在尝试将 Logit 回归从 Stata 复制到 R。在 Stata 中,我使用“稳健”选项来获得稳健的标准误差(异方差一致的标准误差)。我能够从 Stata 复制完全相同的系数,但我无法与包“三明治”具有相同的稳健标准误差。

我尝试了一些 OLS 线性回归示例;似乎 R 和 Stata 的三明治估计器给了我同样强大的 OLS 标准误差。有谁知道Stata如何计算非线性回归的三明治估计量,在我的例子中是logit回归?

谢谢!

附加代码: 在 R 中:

library(sandwich)
library(lmtest)    
mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")    
mydata$rank<-factor(mydata$rank)    
myfit<-glm(admit~gre+gpa+rank,data=mydata,family=binomial(link="logit"))    
summary(myfit)    
coeftest(myfit, vcov = sandwich)    
coeftest(myfit, vcov = vcovHC(myfit, "HC0"))    
coeftest(myfit, vcov = vcovHC(myfit))    
coeftest(myfit, vcov = vcovHC(myfit, "HC3"))    
coeftest(myfit, vcov = vcovHC(myfit, "HC1"))    
coeftest(myfit, vcov = vcovHC(myfit, "HC2"))    
coeftest(myfit, vcov = vcovHC(myfit, "HC"))    
coeftest(myfit, vcov = vcovHC(myfit, "const"))    
coeftest(myfit, vcov = vcovHC(myfit, "HC4"))    
coeftest(myfit, vcov = vcovHC(myfit, "HC4m"))    
coeftest(myfit, vcov = vcovHC(myfit, "HC5"))    

状态:

use http://www.ats.ucla.edu/stat/stata/dae/binary.dta, clear    
logit admit gre gpa i.rank, robust    

【问题讨论】:

stata.com/manuals13/p_robust.pdf的文档 您能否包含统计结果?...无权访问。但看起来“HC1”应该对应于stata“robust”选项。 【参考方案1】:

Stata 中默认的所谓“稳健”标准错误对应于同名包中的sandwich() 计算的内容。唯一的区别是有限样本调整是如何完成的。在sandwich(...) 函数中,默认情况下根本不进行有限样本调整,即三明治除以 1/n,其中 n 是观察数。或者,可以使用sandwich(..., adjust = TRUE) 除以 1/(n - k),其中 k 是回归器的数量。 Stata 除以 1/(n - 1)。

当然,渐近地说,它们根本没有区别。除了少数特殊情况(例如,OLS 线性回归)外,没有任何论据表明 1/(n - k) 或 1/(n - 1) 在有限样本中“正确”工作(例如,无偏性)。至少据我所知不是。

因此,要获得与在 Stata 中相同的结果,您可以这样做:

sandwich1 <- function(object, ...) sandwich(object) * nobs(object) / (nobs(object) - 1)
coeftest(myfit, vcov = sandwich1)

这会产生

z test of coefficients:

              Estimate Std. Error z value  Pr(>|z|)    
(Intercept) -3.9899791  1.1380890 -3.5059 0.0004551 ***
gre          0.0022644  0.0011027  2.0536 0.0400192 *  
gpa          0.8040375  0.3451359  2.3296 0.0198259 *  
rank2       -0.6754429  0.3144686 -2.1479 0.0317228 *  
rank3       -1.3402039  0.3445257 -3.8900 0.0001002 ***
rank4       -1.5514637  0.4160544 -3.7290 0.0001922 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

仅作记录:在二进制响应的情况下,这些“稳健”的标准错误对任何事情都不是稳健的。如果模型指定正确,它们是一致的,可以使用它们,但它们不能防止模型中的任何错误指定。因为三明治标准误差起作用的基本假设是模型方程(或更准确地说是相应的得分函数)被正确指定,而模型的其余部分可能被错误指定。但是,在二元回归中,没有错误指定的余地,因为模型方程仅由均值(= 概率)组成,而可能性分别是均值和 1 - 均值。这与可能存在异方差、过度离散等的线性或计数数据回归形成对比。

【讨论】:

@AchimZeileis 在二元响应的情况下,这些“稳健”的标准误差对任何事物都不稳健。 这些“稳健”的 SE 对线性概率模型案例中的任何事物是否稳健? ?我的直觉是,由于错误不能独立于 LPM 中的任何回归量(它们是 $X$ 的函数,因为 $\epsilon$ 是 $1-X\beta$ 或 $-X\beta$),所以异方差稳健性如果有的话,SE 不会提供太多保护...... 在 LPM 中,您几乎可以肯定地错误指定了均值/期望函数,因为没有任何东西可以保证 [0, 1] 中的期望。因此,参数估计值不一致,没有标准误差可以增加任何稳健性。

以上是关于Stata和R中Logit回归的不同稳健标准误差的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Statsmodels 中获得稳健回归 (RLM) 的 R 平方?

R计算具有奇点的lm模型的稳健标准误差(vcovHC)

回归系数的标准误(S.E)就是它的标准差吗?另外,回归的标准误(S.E of regression)又是啥意思?

使用插入符号的岭逻辑回归系数的标准误差

standard error怎么算

先进行probit回归分析后进行内生性检验吗