我想知道是否有一种简单的方法来改变截距中的值,可能是数学上的方式,而不需要重新运行大模型。举个例子:
mtcars$cyl<-as.factor(mtcars$cyl)
summary(
lm(mpg~cyl+hp,data=mtcars)
)
输出:
Call:
lm(formula = mpg ~ cyl + hp, data = mtcars)
Residuals:
Min 1Q Median 3Q Max
-4.818 -1.959 0.080 1.627 6.812
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 28.65012 1.58779 18.044 < 2e-16 ***
cyl6 -5.96766 1.63928 -3.640 0.00109 **
cyl8 -8.52085 2.32607 -3.663 0.00103 **
hp -0.02404 0.01541 -1.560 0.12995
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.146 on 28 degrees of freedom
Multiple R-squared: 0.7539, Adjusted R-squared: 0.7275
F-statistic: 28.59 on 3 and 28 DF, p-value: 1.14e-08
现在我可以将参考电平更改为6缸,并且可以看到8缸现在与6缸的比较,而不是4缸。
mtcars$cyl<-relevel(mtcars$cyl,"6")
summary(
lm(mpg~cyl+hp,data=mtcars)
)
输出:
Call:
lm(formula = mpg ~ cyl + hp, data = mtcars)
Residuals:
Min 1Q Median 3Q Max
-4.818 -1.959 0.080 1.627 6.812
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 22.68246 2.22805 10.18 6.48e-11 ***
cyl4 5.96766 1.63928 3.64 0.00109 **
cyl8 -2.55320 1.97867 -1.29 0.20748
hp -0.02404 0.01541 -1.56 0.12995
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 3.146 on 28 degrees of freedom
Multiple R-squared: 0.7539, Adjusted R-squared: 0.7275
F-statistic: 28.59 on 3 and 28 DF, p-value: 1.14e-08
我想知道是否有一种方法能够在不重新运行模型的情况下获取这些值?您可以看到,在每个模型中,从4缸到6缸的比较是相同的(
-5.96
和5.96
),但是如何获得任一模型中“其他”系数的估计值(例如第一个模型中的-2.55
)。当然,在这种情况下,运行其他模型只需要几分之一秒钟的时间。但是对于非常大的模型,能够在不重新运行模型的情况下更改参考水平将是方便的。是否有相对简单的方法可以将所有估计值和标准误转换为基于不同参考水平的值,还是这样做过于复杂?对于lme4、glmmTMB或rstanarm模型的任何解决方案将不胜感激。
emmeans
包。 - Ben Bolkermultcomp::glht
,它可以让您手动构建查询。 - user20650