Ral*_*h M 3 regression r covariance linear-regression lm
我有兴趣计算 R 中线性回归后系数线性组合的估计值和标准误差。例如,假设我有回归和测试:
\n\ndata(mtcars)\nlibrary(multcomp)\nlm1 <- lm(mpg ~ cyl + hp, data = mtcars)\nsummary(glht(lm1, linfct = 'cyl + hp = 0'))\nRun Code Online (Sandbox Code Playgroud)\n\ncyl这将估计和上的系数之和的值hp,并根据 生成的协方差矩阵提供标准误差lm。
但是,假设我想将我的标准错误聚集在第三个变量上:
\n\ndata(mtcars)\nlibrary(multcomp)\nlibrary(lmtest)\nlibrary(multiwayvcov)\nlm1 <- lm(mpg ~ cyl + hp, data = mtcars)\nvcv <- cluster.vcov(lm1, cluster = mtcars$am)\nct1 <- coeftest(lm1,vcov. = vcv)\nRun Code Online (Sandbox Code Playgroud)\n\nct1包含我的聚类的 SE am。但是,如果我尝试使用ct1中的对象glht,则会收到错误消息
\n\n\nmodelparm.default(model, ...) 中的错误:\n 未找到 \xe2\x80\x98model\xe2\x80\x99 的 \xe2\x80\x98coef\xe2\x80\x99 方法!
\n
关于如何使用聚类方差协方差矩阵进行线性假设有什么建议吗?
\n\n谢谢!
\nglht(ct1, linfct = 'cyl + hp = 0')不起作用,因为ct1不是一个glht对象,不能被强制为这样的 via as.glht。我不知道是否有一个包或现有的函数可以做到这一点,但是我们自己解决这个问题并不困难。下面的小函数可以做到这一点:
LinearCombTest <- function (lmObject, vars, .vcov = NULL) {
## if `.vcov` missing, use the one returned by `lm`
if (is.null(.vcov)) .vcov <- vcov(lmObject)
## estimated coefficients
beta <- coef(lmObject)
## sum of `vars`
sumvars <- sum(beta[vars])
## get standard errors for sum of `vars`
se <- sum(.vcov[vars, vars]) ^ 0.5
## perform t-test on `sumvars`
tscore <- sumvars / se
pvalue <- 2 * pt(abs(tscore), lmObject$df.residual, lower.tail = FALSE)
## return a matrix
matrix(c(sumvars, se, tscore, pvalue), nrow = 1L,
dimnames = list(paste0(paste0(vars, collapse = " + "), " = 0"),
c("Estimate", "Std. Error", "t value", "Pr(>|t|)")))
}
Run Code Online (Sandbox Code Playgroud)
我们来测试一下:
data(mtcars)
lm1 <- lm(mpg ~ cyl + hp, data = mtcars)
library(multiwayvcov)
vcv <- cluster.vcov(lm1, cluster = mtcars$am)
Run Code Online (Sandbox Code Playgroud)
如果我们.vcov在 中未指定LinearCombTest,则与 相同multcomp::glht:
LinearCombTest(lm1, c("cyl","hp"))
# Estimate Std. Error t value Pr(>|t|)
#cyl + hp = 0 -2.283815 0.5634632 -4.053175 0.0003462092
library(multcomp)
summary(glht(lm1, linfct = 'cyl + hp = 0'))
#Linear Hypotheses:
# Estimate Std. Error t value Pr(>|t|)
#cyl + hp == 0 -2.2838 0.5635 -4.053 0.000346 ***
Run Code Online (Sandbox Code Playgroud)
如果我们提供协方差,它就会满足您的要求:
LinearCombTest(lm1, c("cyl","hp"), vcv)
# Estimate Std. Error t value Pr(>|t|)
#cyl + hp = 0 -2.283815 0.7594086 -3.00736 0.005399071
Run Code Online (Sandbox Code Playgroud)
评论
LinearCombTest在获取组均值差异的 p 值处升级,无需使用新的参考水平重新拟合线性模型,我们可以在其中测试具有组合系数的任何组合alpha:
alpha[1] * vars[1] + alpha[2] * vars[2] + ... + alpha[k] * vars[k]
Run Code Online (Sandbox Code Playgroud)
而不仅仅是总和
vars[1] + vars[2] + ... + vars[k]
Run Code Online (Sandbox Code Playgroud)