2010-09-28 61 views
11

在拟合模型后,是否有可能使用vcovHC(来自三明治包)获得的健壮vcov?vcovHC和置信区间

+2

尝试在stats.stackexchange.com上询问这个问题 – 2010-09-29 02:12:31

回答

13

不,你不能直接使用强大的vcov函数confint。但手动操作非常简单。

x <- sin(1:100) 
y <- 1 + x + rnorm(100) 
## model fit and HC3 covariance 
fm <- lm(y ~ x) 
Cov <- vcovHC(fm) 

tt <-qt(c(0.025,0.975),summary(fm)$df[2]) 
se <- sqrt(diag(Cov)) 
ci <-coef(fm) + se %o% tt 

否则,您可以在confint.default()功能适应自己的需要:

confint.robust <- function (object, parm, level = 0.95, ...) 
{ 
    cf <- coef(object) 
    pnames <- names(cf) 
    if (missing(parm)) 
     parm <- pnames 
    else if (is.numeric(parm)) 
     parm <- pnames[parm] 
    a <- (1 - level)/2 
    a <- c(a, 1 - a) 
    pct <- stats:::format.perc(a, 3) 
    fac <- qnorm(a) 
    ci <- array(NA, dim = c(length(parm), 2L), dimnames = list(parm, 
     pct)) 
    ses <- sqrt(diag(sandwich::vcovHC(object)))[parm] 
    ci[] <- cf[parm] + ses %o% fac 
    ci 
} 

至于布兰登已经建议,你会得到更快速的答案的机会,如果你问统计这些东西。 stackexchange.com

+0

一如既往 - 完美地工作。 Thx @Joris。 Misha – Misha 2010-09-29 11:57:10

+0

特殊的回答 – 2013-02-24 23:42:44

+0

很好的答案,你为什么选择qnorm而不是qt?对象$ df.residual具有所需的df参数。 – 2013-07-25 09:16:15