我正在寻找一种方法,用我自己的标准错误直接替换回归模型中的标准错误,以便在另一个R包中使用健壮的模型,该包没有自己的强大选项,只能被输入特定类型的模型而不是coeftest格式。
假设我有一个线性模型:
model <- lm(data=dat, Y ~ X1 + X2 + X3)
然后我想要强大的标准错误:
robust <- coeftest(model, vcov=sandwich)
接下来,我需要在特定的软件包中使用此模型,该软件包不能提供coeftest,并且没有自己的强大标准错误选项。我想在将其输入包装之前替换原始模型的标准误差(以及,就此而言,p值,t-统计等),以便将它们考虑在内。
要访问原始模型中的标准错误,我使用:
summary(model)$coefficients[,2]
要从 coeftest 中提取标准错误,我使用:
coeftest.se <- robust[, 2]
但是,在尝试替换模型的标准错误时,以下方法会返回错误,因为它将“summary”本身视为命令:
summary(model)$coefficients[,2] <- coeftest.se
Error in summary(M3)$coefficients[, 2] <- seM3 : could not find function "summary<-"
细节
我正在尝试使用Mediation R包进行调解分析。该软件包将使用“mediate”函数执行单向聚类标准错误,但我希望有两种方式聚类标准错误。
为了获得双向聚类标准错误,我正在使用Mahmood Arai的mclx函数(可以找到代码here(第4页)。
我的想法是使用已经报告正确标准错误的模型来提供软件包的中介功能。根据文档,中介包接受以下类型的模型:lm,polr,bayespolr,glm,bayesglm,gam,rq,survreg和merMod。
答案 0 :(得分:2)
对我有用的是:
model <- lm(data=dat, Y ~ X1 + X2 + X3)
library(sandwich)
SE_robust <- sqrt(diag(vcovHC(model, type="HC2")))
model2 <- summary(model)
model2$coefficients[,2] <- SE_robust
答案 1 :(得分:0)
@MySeppo 的回答很好,但我认为值得在这里给出一个函数,将所有内容(SE、t-stats、p-values)更改为更健壮(我也使用 HC1 与状态):
model <- lm(mpg~cyl,data=mtcars)
robustsummary <- function(model) {
library(sandwich)
library(lmtest)
coeftest <- coeftest(model, vcov = vcovHC(model, type="HC1"))
summ <- summary(model)
summ$coefficients[,2] <- coeftest[,2]
summ$coefficients[,3] <- coeftest[,3]
summ$coefficients[,4] <- coeftest[,4]
summ
}
summary(model)
robustsummary(model)
或者如果您不想使用 coeftest
robustsummary <- function(model) {
library(sandwich)
SE_robust <- sqrt(diag(vcovHC(model, type="HC1")))
summ <- summary(model)
summ$coefficients[,2] <- SE_robust
summ$coefficients[,3] <- summ$coefficients[,1]/SE_robust # get t-stats
summ$coefficients[,4] <- 2*(1-pt(abs(summ$coefficients[,3]),summ$df[2])) # apply t distribution with the right degrees of freedom to get p-values
summ
}