问题 vcovHC和置信区间


在拟合模型后,是否可以使用vcovHC(来自夹层包装)获得的强大vcov?


11632
2017-09-28 21:29


起源

试试在stats.stackexchange.com上问这个 - Brandon Bertelsen


答案:


不,你不能直接使用强大的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
}

正如Brandon已经建议的那样,如果你在stats.stackexchange.com上提出这些问题,你会得到更快的答案


13
2017-09-29 08:58



一如既往 - 完美的作品。感谢@Joris。米莎 - Misha
特殊的答案 - Panos Kal.
很好的答案,你为什么选择qnorm而不是qt?对象$ df.residual需要df参数。 - Max Gordon
我已经潜入正常vs t分布问题,你似乎应该使用HC矩阵的正态分布,看看我的 关于CrossValidated的问题和答案 - Max Gordon