R中异方差校正后的协方差矩阵(hccm)的F分数和标准化Beta

时间:2016-09-02 18:08:46

标签: r lm anova r-car

我有多个回归模型,这些模型未通过Breusch-Pagan测试,因此我使用异方差校正的协方差矩阵重新计算方差,如下所示:coeftest(lm.model,vcov=hccm(lm.model))coeftest()来自lmtest个包,而hccm()来自car个包。

我想提供F分数和标准化的测试版,但我不知道如何做到这一点,因为输出看起来像这样...

t test of coefficients:

                Estimate Std. Error t value Pr(>|t|)  
(Intercept)     0.000261   0.038824    0.01    0.995  
age             0.004410   0.041614    0.11    0.916  
exercise       -0.044727   0.023621   -1.89    0.059 .
tR             -0.038375   0.037531   -1.02    0.307  
allele1_num     0.013671   0.038017    0.36    0.719  
tR:allele1_num -0.010077   0.038926   -0.26    0.796  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

有关如何报告这些内容的任何建议,以便它们与来自R和summary()的标准Anova()car输出以及来自std_beta()的函数sjmisc的输出尽可能一致{{1}}包裹?

1 个答案:

答案 0 :(得分:0)

如果其他人有这个问题,这是我的解决方案。它不是特别优雅,但它的工作原理。

我只是将std_beta函数用作模板,然后将标准错误的输入更改为从std_beta()函数派生的输入。

# This is taken from std_beta function from sj_misc package.
# =====================================


b <-coef(lm.model) # Same Estimate
b <-b[-1] # Same intercept
fit.data <- as.data.frame(stats::model.matrix(lm.model)) # Same model.

fit.data <- fit.data[, -1] # Keep intercept
fit.data <- as.data.frame(sapply(fit.data, function(x) if (is.factor(x)) 
                          to_value(x, keep.labels = F)
                          else x))

sx <- sapply(fit.data, sd, na.rm = T)
sy <- sapply(as.data.frame(lm.model$model)[1], sd, na.rm = T)

beta <- b * sx/sy
se <-coeftest(lm.model,vcov=hccm(lm.model))[,2] # ** USE HCCM covariance for SE **
se <- se[-1]
beta.se <- se * sx/sy

data.frame(beta = beta, ci.low = (beta - beta.se * 
            1.96), ci.hi = (beta + beta.se * 1.96))

对于F分数,我只是将t值平方。 我希望这能节省一些时间。