我试图弄清楚如何通过 multcomp::glht() 函数实现广义线性模型的同时推理。具体来说,我想从这里对 2-way ANOVA 示例进行完整的 Tukey 分析。他们对具有交互作用的模型进行了 Tukey 的事后分析。
mod <- lm(breaks ~ wool * tension, data = warpbreaks)
- 羊毛是一个2级因子(A,B)
- 张力是一个 3 级因子(L、M、H)
在小插图的示例中,他们检查了每个羊毛级别内张力级别的平均值差异。但是我有兴趣学习如何寻找每个可能的级别组合之间的差异。按照示例,使用如下代码:
tmp <- expand.grid(tension = unique(warpbreaks$tension),
wool = unique(warpbreaks$wool))
X <- model.matrix(~ wool * tension, data = tmp)
glht(mod, linfct = X)
Tukey <- contrMat(table(warpbreaks$tension), "Tukey")
K1 <- cbind(Tukey, matrix(0, nrow = nrow(Tukey), ncol = ncol(Tukey)))
rownames(K1) <- paste(levels(warpbreaks$wool)[1], rownames(K1), sep = ":")
K2 <- cbind(matrix(0, nrow = nrow(Tukey), ncol = ncol(Tukey)), Tukey)
rownames(K2) <- paste(levels(warpbreaks$wool)[2], rownames(K2), sep = ":")
K <- rbind(K1, K2)
colnames(K) <- c(colnames(Tukey), colnames(Tukey))
summary(glht(mod, linfct = K %*% X))
他们得到如下信息:
Simultaneous Tests for General Linear Hypotheses
Fit: lm(formula = breaks ~ wool * tension, data = warpbreaks)
Linear Hypotheses:
Estimate Std. Error t value Pr(>|t|)
A:M - L == 0 -20.5556 5.1573 -3.986 0.00131 **
A:H - L == 0 -20.0000 5.1573 -3.878 0.00187 **
A:H - M == 0 0.5556 5.1573 0.108 0.99996
B:M - L == 0 0.5556 5.1573 0.108 0.99996
B:H - L == 0 -9.4444 5.1573 -1.831 0.30795
B:H - M == 0 -10.0000 5.1573 -1.939 0.25535
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Adjusted p values reported -- single-step method)
那么,我怎样才能获得正确的对比度矩阵,以便进行如下比较:
- A:M - B:M == 0
- A:M - B:H == 0
我知道对比度矩阵 K 应该如何,所以我可以手动计算出来。然而,这只是一个熟悉这个包的例子。我真正的 ANOVA 有一个 5 级因子和另一个 10 级因子,所以手动操作会很痛苦。谢谢