如何利用聚类协方差矩阵对回归系数进行线性假设检验?

时间:2016-10-19 00:20:43

标签: r regression linear-regression covariance lm

我感兴趣的是计算R中线性回归后系数线性组合的估计值和标准误差。例如,假设我有回归和测试:

data(mtcars)
library(multcomp)
lm1 <- lm(mpg ~ cyl + hp, data = mtcars)
summary(glht(lm1, linfct = 'cyl + hp = 0'))

这将估算cylhp上系数之和的值,并根据lm生成的协方差矩阵提供标准误差。

但是,假设我想将标准错误聚类在第三个变量上:

data(mtcars)
library(multcomp)
library(lmtest)
library(multiwayvcov)
lm1 <- lm(mpg ~ cyl + hp, data = mtcars)
vcv <- cluster.vcov(lm1, cluster = mtcars$am)
ct1 <- coeftest(lm1,vcov. = vcv)

ct1包含am群集的SE。但是,如果我尝试使用ct1中的glht对象,则会收到错误消息

  

modelparm.default(model,...)中的错误:     找不到'模型'的'coef'方法!

关于如何使用聚类方差协方差矩阵进行线性假设的任何建议?

谢谢!

1 个答案:

答案 0 :(得分:3)

glht(ct1, linfct = 'cyl + hp = 0')无效,因为ct1不是glht对象,无法通过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|)"))) } 。我不知道是否有一个包或现有的功能来做这个,但这不是一个困难的工作自己。以下小功能可以做到:

data(mtcars)
lm1 <- lm(mpg ~ cyl + hp, data = mtcars)
library(multiwayvcov)
vcv <- cluster.vcov(lm1, cluster = mtcars$am)

我们来测试一下:

.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 *** 相同:

LinearCombTest(lm1, c("cyl","hp"), vcv)

#              Estimate Std. Error  t value    Pr(>|t|)
#cyl + hp = 0 -2.283815  0.7594086 -3.00736 0.005399071

如果我们提供协方差,它会做你想要的:

LinearCombTest

<强>备注

alpha已在Get p-value for group mean difference without refitting linear model with a new reference level升级,我们可以使用组合系数alpha[1] * vars[1] + alpha[2] * vars[2] + ... + alpha[k] * vars[k] 测试任意组合:

vars[1] + vars[2] + ... + vars[k]

而不仅仅是总和

Country Year   Cause  Gender    Deaths
2090    2011    A000    1       70340
2090    2010    A001    2       53449
2090    2009    A002    1       1731
2090    2008    A003    2       1270
2090    2007    A004    1       148
2310    2011    A000    2       172
2310    2010    A001    1       24
2310    2009    A002    2       20
2310    2008    A003    1       27
2660    2013    A004    2       21
2660    2012    A005    1       88
2660    2011    A006    2       82