假设我们有三种治疗方法,并希望获得所有成对差异。 R中的默认值是使用对比度并且仅显示2. IE 2对1和3对1.为了得到3对2,我们需要减去β系数(3vs 1 - 2 vs 1)。
所以我们现在有了估计,但有没有办法得到估计的方差?或者我们是否必须使用不同的参考组再次运行回归才能得到它?
答案 0 :(得分:2)
我们可以使用glht
包中的multcomp
函数进行事后测试,并可以选择调整多个测试。 (有关更多示例,请参阅http://www.ats.ucla.edu/stat/r/faq/testing_contrasts.htm)
一个小例子
library(multcomp)
data(mtcars)
mtcars$cyl <- factor(mtcars$cyl, levels=c(4, 6, 8))
# run model
m <- lm(mpg ~ cyl, data=mtcars)
coef(summary(m))
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 26.663636 0.9718008 27.437347 2.688358e-22
# cyl6 -6.920779 1.5583482 -4.441099 1.194696e-04
# cyl8 -11.563636 1.2986235 -8.904534 8.568209e-10
coef(m)[2] - coef(m)[3]
# cyl6
# 4.642857
# use glht function to estimate other contrasts
# define the linfct matrix to test specific contrast
mf <- glht(m, linfct = matrix(c(0, 1, -1), 1))
summary(mf)
# Simultaneous Tests for General Linear Hypotheses
#
# Fit: lm(formula = mpg ~ cyl, data = mtcars)
#
# Linear Hypotheses:
# Estimate Std. Error t value Pr(>|t|)
# 1 == 0 4.643 1.492 3.112 0.00415 **
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# (Adjusted p values reported -- single-step method)
# look at estimate by changing the reference level manually
mtcars$cyl2 <- factor(mtcars$cyl, levels=c(6, 4, 8))
m2 <- lm(mpg ~ cyl2, data=mtcars)
coef(summary(m2))
# Estimate Std. Error t value Pr(>|t|)
# (Intercept) 19.742857 1.218217 16.206357 4.493289e-16
# cyl24 6.920779 1.558348 4.441099 1.194696e-04
# cyl28 -4.642857 1.492005 -3.111825 4.152209e-03
我们也可以通过了解其背后的理论来得到答案。也许这个答案更适合简历,但我想我会在这里发布。
答案归结为了解其背后的统计数据。我们有两个随机变量的差异,我们希望得到方差。
在数学术语中,我们希望var(beta_{2vs1} -beta_{3vs1})
。了解我们的基本统计数据后,我们知道这等于var(beta_{2vs1}) +var(beta_{3vs1})-2*cov(beta_{2vs1},beta_{3vs1})
v <- vcov(m)
sqrt(v[2,2] + v[3,3] - 2*v[2,3])
# [1] 1.492005