R 如何使用聚集协方差矩阵对回归系数进行线性假设检验?
我对计算R中线性回归后系数线性组合的估计值和标准误差感兴趣。例如,假设我有回归和测试:R 如何使用聚集协方差矩阵对回归系数进行线性假设检验?,r,regression,linear-regression,covariance,lm,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')) ct1包含通过am进行聚类的SEs。但是,如果我尝试使用glht中的ct1对象,您会得到一个错误 modelparm.default(模型,…)中出错: 找不到“model
data(mtcars)
library(multcomp)
lm1 <- lm(mpg ~ cyl + hp, data = mtcars)
summary(glht(lm1, linfct = 'cyl + hp = 0'))
ct1
包含通过am
进行聚类的SEs。但是,如果我尝试使用glht
中的ct1
对象,您会得到一个错误
modelparm.default(模型,…)中出错:
找不到“model”的“coef”方法
关于如何使用聚集方差-协方差矩阵进行线性假设,有什么建议吗
谢谢 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|)")))
}
如果我们提供协方差,它会满足您的要求:
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
测试任何组合:
alpha[1] * vars[1] + alpha[2] * vars[2] + ... + alpha[k] * vars[k]
而不仅仅是总数
vars[1] + vars[2] + ... + vars[k]
退房关于如何将集群SEs纳入线性假设检验的大量信息。看起来与@Zheyuan提供的基本相同。
summary(glht(ct1,linfct='cyl+hp=0'))
R中的这个方法和glht函数似乎只对分类变量有效,对吗?如果我有一个连续变量呢?例如,我正在测试交互术语year:agegroup在逻辑回归模型中,year是一个连续变量(编码为1、2、3、…、14),而agegroup是分类的。在使用这种方法控制一年后,如何测试比较不同年龄组的优势比的显著性?谢谢,谢谢!这对于系数和的特殊情况非常有效。
LinearCombTest(lm1, c("cyl","hp"), vcv)
# Estimate Std. Error t value Pr(>|t|)
#cyl + hp = 0 -2.283815 0.7594086 -3.00736 0.005399071
alpha[1] * vars[1] + alpha[2] * vars[2] + ... + alpha[k] * vars[k]
vars[1] + vars[2] + ... + vars[k]