在实际研究中,影响结果的因素往往不止一个。比如研究某种药物的疗效时,除了药物本身,患者的性别、年龄、用药剂量等都可能同时影响结果。如果我们对每个因素单独做方差分析,不仅效率低,还会遗漏一个重要信息——因素之间的交互作用。
多因素方差分析(Multi-way ANOVA)正是用来同时分析多个因素对结果变量影响的统计方法。它可以回答以下问题:
举个例子:A药和B药单独使用时效果一般,但联合使用时镇痛时间大幅延长——这就是典型的正交互作用。反之,两药合用反而效果下降,则为负交互作用。如果不考虑交互作用,单看主效应可能会得出错误的结论。
根据实验设计的不同,多因素方差分析有多种常见形式:
前面已经介绍了析因设计的方差分析和正交设计的方差分析,本篇继续介绍嵌套设计的方差分析。
嵌套设计(也称系统分组设计)用于描述因素之间存在层级包含关系的情形——二级因素的水平并不是在所有一级因素水平下都相同,而是每个一级水平下各自拥有一套独立的二级水平。换言之,两个因素之间只有"包含"关系,没有"交叉"关系,因此不能估计交互作用,只能分别估计各层级因素的主效应。
本篇以催化剂(3种)与温度(各催化剂对应不同温度范围)对化合物转化率的影响为例,展示了嵌套结构数据的可视化方式,以及如何在aov()中用/运算符(factor1/factor2)正确指定嵌套关系来进行方差分析。这与析因设计中常见的*写法有本质区别,混淆二者会导致模型设定错误。
嵌套设计的方差分析也是要注意指定主效应和交互效应。
使用孙振球《医学统计学》第4版例11-6的数据。
试验甲、乙、丙3种催化剂在不同温度下对某化合物的转化作用。由于各催化剂所要求的温度范围不同,将催化剂作为一级实验因素(I=3),温度作为二级实验因素(J=3),采用嵌套设计,每个处理重复2次(n=2)。试做方差分析。
data11_6 <- data.frame(
factor1 = factor(rep(c("A","B","C"),each=6)),
factor2 = factor(rep(c(70,80,90,55,65,75,90,95,100),each=2)),
y = c(82,84,91,88,85,83,65,61,62,59,56,60,71,67,75,78,85,89)
)
str(data11_6)
## 'data.frame': 18 obs. of 3 variables:
## $ factor1: Factor w/ 3 levels "A","B","C": 1 1 1 1 1 1 2 2 2 2 ...
## $ factor2: Factor w/ 8 levels "55","65","70",..: 3 3 5 5 6 6 1 1 2 2 ...
## $ y : num 82 84 91 88 85 83 65 61 62 59 ...
head(data11_6)
## factor1 factor2 y
## 1 A 70 82
## 2 A 70 84
## 3 A 80 91
## 4 A 80 88
## 5 A 90 85
## 6 A 90 83
factor1是一级实验因素(不同的催化剂),factor2是二级实验因素(不同的温度),y是因变量。
对这个数据做个简单的可视化,方便查看研究设计结构:
library(ggplot2)
ggplot(data11_6, aes(x = factor2, y = y)) +
# 绘制原始数据点(轻微抖动避免重叠),按催化剂分色
geom_jitter(aes(color = factor1), width = 0.1, size = 3) +
facet_wrap(~factor1, labeller = label_both) +
labs(title = "嵌套设计数据可视化 (催化剂与温度)",
x = "温度",
y = "转化率 (%)",
color = "催化剂") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 0, hjust = 0.5),
strip.background = element_rect(fill = "lightblue"))

进行嵌套实验设计的方差分析:
# “/”表示factor2嵌套在factor1里
f <- aov(y ~ factor1 / factor2, data = data11_6)
# 等价于以下写法:
#f <- aov(y ~ factor1 + factor1:factor2, data = data11_6)
summary(f)
## Df Sum Sq Mean Sq F value Pr(>F)
## factor1 2 1956.0 978.0 177.82 5.83e-08 ***
## factor1:factor2 6 401.0 66.8 12.15 0.000716 ***
## Residuals 9 49.5 5.5
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
结果和表11-26相同。
结论:催化剂(factor1)影响该化合物的转化率。对于同一催化剂,不同温度(factor2)对转化率亦有影响。
参考资料:
医学和生信笔记,专注R语言在医学中的使用!