统计学与数据科学 Statistics and Data Science
一、什么是 ANOVA?
基本定义
ANOVA (Analysis of Variance,方差分析) 是一种统计方法,用于检验多个组的均值 (means) 是否存在显著差异 (significant difference)。
为什么叫”方差分析”?
这是个很有意思的问题:我们明明想比较均值 (mean),为什么要分析方差 (variance)?
核心思想:
- 如果各组均值真的不同,那么组间变异 (between-group variation) 应该比组内变异 (within-group variation) 更大
- ANOVA 通过比较”组间方差”和”组内方差”来判断均值差异是否显著
类比: 想象你在比较三个班级的平均成绩:
- Between-group variance 大:A班平均90分,B班平均70分,C班平均50分 → 班级之间差异明显
- Within-group variance 大:每个班内部学生成绩差异很大(有人90分有人50分)→ 随机波动 (random fluctuation) 大
如果组间方差 >> 组内方差,说明班级之间的差异是真实的 (genuine),不是偶然 (by chance)。
二、ANOVA 的类型
按因子数量分类:
| 类型 | 自变量数量 | 英文术语 | 例子 |
|---|---|---|---|
| 单因素方差分析 | 1个因子 (factor) | One-way ANOVA | 比较3种药物的疗效 |
| 双因素方差分析 | 2个因子 | Two-way ANOVA | 比较药物类型×性别对疗效的影响 |
| 多因素方差分析 | 3个或更多因子 | Multi-way ANOVA / Factorial ANOVA | 药物×性别×年龄组 |
按样本类型分类:
| 类型 | 样本关系 | 英文术语 | 例子 |
|---|---|---|---|
| 独立样本方差分析 | 独立样本 (independent samples) | Between-subjects ANOVA | 不同的人接受不同治疗 |
| 重复测量方差分析 | 重复测量 (repeated measures) | Within-subjects ANOVA / Repeated Measures ANOVA | 同一批人在不同时间点测量 |
本文重点:One-way ANOVA(单因素独立样本方差分析)
三、One-way ANOVA 的使用场景
必须满足的条件:
- 因变量 (dependent variable / outcome variable) 是连续变量 (continuous variable)(如:分数、体重、时间、血压)
- 自变量 (independent variable / predictor / factor) 是分类变量 (categorical variable),有3个或更多水平 (levels / groups)
- 独立样本 (independent observations):各组观测值互不影响
- 每组样本来自正态分布 (normal distribution)(或样本量足够大)
- 各组方差齐性 (homogeneity of variance / homoscedasticity)
典型应用场景:
| 研究领域 | 研究问题 | 自变量 (Factor) | 因变量 (Outcome) | 组数 |
|---|---|---|---|---|
| 医学 | 3种降压药哪种最有效? | 药物类型 (Drug type) | 收缩压下降值 (Systolic BP reduction, mmHg) | 3 |
| 教育 | 4种教学法对学习效果的影响 | 教学方法 (Teaching method) | 期末考试成绩 (Final exam score) | 4 |
| 农业 | 不同施肥量对产量的影响 | 施肥量 (Fertilizer level) | 作物产量 (Crop yield, kg) | 4 |
| 心理学 | 不同音乐类型对焦虑的影响 | 音乐类型 (Music genre) | 焦虑量表得分 (Anxiety score) | 3 |
| 市场营销 | 3种广告策略的效果比较 | 广告类型 (Ad type) | 购买意愿评分 (Purchase intention) | 3 |
四、ANOVA 的数学原理
核心概念:变异分解 (Partitioning Variance / Variance Decomposition)
ANOVA 把总变异 (total variation) 分解成两部分:
总变异 = 组间变异 + 组内变异
Total Variation = Between-group Variation + Within-group Variation
SST = SSB + SSW
1. 总变异 (Total Sum of Squares, SST / SS_total)
衡量所有数据点相对于总均值 (grand mean) 的离散程度 (dispersion)。
公式:
SST = Σ(xᵢⱼ - x̄)²
- xᵢⱼ:第 i 组第 j 个观测值 (observation)
- x̄:所有数据的总均值 (grand mean / overall mean)
含义:如果把所有数据看成一个整体,它们的总波动 (total variability) 有多大?
2. 组间变异 (Between-group Sum of Squares, SSB / SS_between / SS_treatment)
衡量各组均值 (group means) 相对于总均值的差异。
公式:
SSB = Σ nᵢ × (x̄ᵢ - x̄)²
- nᵢ:第 i 组的样本量 (sample size)
- x̄ᵢ:第 i 组的均值 (group mean)
- x̄:总均值 (grand mean)
含义:各组的平均水平差异有多大?这是我们关心的”真实效应 (treatment effect)”。
直觉理解:
- 如果各组均值都接近总均值 → SSB 小 → 组间差异不明显
- 如果各组均值差异很大 → SSB 大 → 组间差异明显
3. 组内变异 (Within-group Sum of Squares, SSW / SS_within / SS_error / SS_residual)
衡量每组内部数据的波动(随机误差 / random error)。
公式:
SSW = Σ Σ (xᵢⱼ - x̄ᵢ)²
含义:即使在同一组内,数据也会有自然波动(个体差异 / individual differences、测量误差 / measurement error 等)。这是”随机误差 (random error / noise)”。
直觉理解:
- 如果每组内部数据很集中 → SSW 小 → 组内一致性 (consistency) 高
- 如果每组内部数据很分散 → SSW 大 → 随机波动大
变异分解的意义
SST = SSB + SSW
Total Variation = Systematic Variation + Random Variation
总波动 = 系统性差异 + 随机误差
ANOVA 的判断逻辑:
- 如果 SSB >> SSW:组间差异 (systematic difference) 远大于随机误差 → 差异是真实的
- 如果 SSB ≈ SSW:组间差异和随机误差差不多 → 差异可能只是偶然
五、F 统计量 (F-statistic / F-ratio)
为什么不能直接比较 SSB 和 SSW?
因为它们的自由度 (degrees of freedom, df) 不同,需要标准化 (standardization)。
均方 (Mean Square, MS)
组间均方 (Mean Square Between, MSB / MS_treatment):
MSB = SSB / df_between
df_between = k - 1 (k 是组数 / number of groups)
组内均方 (Mean Square Within, MSW / MS_error):
MSW = SSW / df_within
df_within = N - k (N 是总样本量 / total sample size)
F 统计量 (F-statistic)
F = MSB / MSW
F = Between-group variance / Within-group variance
含义:
- F 值衡量”组间变异”相对于”组内变异”的大小
- F ≈ 1:组间差异和随机误差差不多 → 可能没有真实差异
- F >> 1:组间差异远大于随机误差 → 很可能有真实差异 (likely a real effect)
F 分布 (F-distribution)
F 统计量服从 F 分布,参数为 (df_between, df_within)。
通过查 F 分布表 (F-table) 或用软件计算,可以得到 p-value:
- p < 0.05:拒绝原假设 (reject null hypothesis),认为组间有显著差异 (statistically significant difference)
- p ≥ 0.05:不能拒绝原假设 (fail to reject null hypothesis),认为组间无显著差异
六、假设检验步骤 (Hypothesis Testing)
Step 1: 建立假设 (State Hypotheses)
原假设 (Null Hypothesis, H₀):
μ₁ = μ₂ = μ₃ = ... = μₖ
所有组的总体均值 (population means) 相等。
备择假设 (Alternative Hypothesis, H₁ / Hₐ):
至少存在一对 i ≠ j,使得 μᵢ ≠ μⱼ
At least one group mean differs from the others
至少有一个组的均值与其他组不同。
注意:H₁ 不是说”所有组都不同”,而是”至少有一对不同”。
Step 2: 设定显著性水平 (Set Significance Level)
通常选择 α = 0.05(也可以是 0.01 或 0.10)。
Step 3: 计算检验统计量 (Calculate Test Statistic)
- 计算各组均值、总均值
- 计算 SSB、SSW、SST
- 计算 MSB、MSW
- 计算 F = MSB / MSW
Step 4: 确定 p-value (Determine p-value)
根据 F 值和自由度,查 F 分布表或用软件计算 p-value。
Step 5: 做出决策 (Make Decision)
- 如果 p < α:拒绝 H₀ (reject H₀),认为组间存在显著差异
- 如果 p ≥ α:不能拒绝 H₀ (fail to reject H₀),认为组间无显著差异
七、完整计算示例
研究问题
比较 3 种肥料(A、B、C)对小麦产量的影响。
数据
| 肥料 A (Fertilizer A) | 肥料 B (Fertilizer B) | 肥料 C (Fertilizer C) |
|---|---|---|
| 20 | 28 | 32 |
| 22 | 30 | 35 |
| 19 | 27 | 33 |
| 24 | 31 | 36 |
| 21 | 29 | 34 |
Step 1: 计算基本统计量 (Descriptive Statistics)
各组均值 (Group means):
- x̄₁ = (20+22+19+24+21)/5 = 21.2
- x̄₂ = (28+30+27+31+29)/5 = 29.0
- x̄₃ = (32+35+33+36+34)/5 = 34.0
总均值 (Grand mean):
x̄ = (21.2×5 + 29.0×5 + 34.0×5) / 15 = 28.07
Step 2: 计算 SSB(组间变异 / Between-group Sum of Squares)
SSB = n₁(x̄₁ - x̄)² + n₂(x̄₂ - x̄)² + n₃(x̄₃ - x̄)²
= 5×(21.2-28.07)² + 5×(29.0-28.07)² + 5×(34.0-28.07)²
= 5×47.20 + 5×0.86 + 5×35.16
= 236.0 + 4.3 + 175.8
= 416.1
Step 3: 计算 SSW(组内变异 / Within-group Sum of Squares)
肥料 A 组内:
(20-21.2)² + (22-21.2)² + (19-21.2)² + (24-21.2)² + (21-21.2)²
= 1.44 + 0.64 + 4.84 + 7.84 + 0.04
= 14.8
肥料 B 组内:
(28-29)² + (30-29)² + (27-29)² + (31-29)² + (29-29)²
= 1 + 1 + 4 + 4 + 0
= 10.0
肥料 C 组内:
(32-34)² + (35-34)² + (33-34)² + (36-34)² + (34-34)²
= 4 + 1 + 1 + 4 + 0
= 10.0
总组内变异 (Total within-group variation):
SSW = 14.8 + 10.0 + 10.0 = 34.8
Step 4: 计算自由度 (Degrees of Freedom)
df_between = k - 1 = 3 - 1 = 2
df_within = N - k = 15 - 3 = 12
Step 5: 计算均方 (Mean Squares)
MSB = SSB / df_between = 416.1 / 2 = 208.05
MSW = SSW / df_within = 34.8 / 12 = 2.9
Step 6: 计算 F 统计量 (F-statistic)
F = MSB / MSW = 208.05 / 2.9 = 71.74
Step 7: 查 p-value
用 F(2, 12) 分布,F = 71.74 对应 p < 0.001(远小于 0.05)。
Step 8: 结论 (Conclusion)
拒绝原假设 (Reject H₀),3 种肥料对小麦产量的影响存在显著差异(F = 71.74, p < 0.001)。
但注意:我们只知道”有差异”,不知道:
- 哪种肥料最好?
- A 和 B 有差异吗?
- B 和 C 有差异吗?
需要进一步做 post-hoc test / multiple comparisons(如 Tukey HSD)。
八、ANOVA 表 (ANOVA Table)
统计软件通常输出标准的 ANOVA 表:
| Source of Variation | SS | df | MS | F | p-value |
|---|---|---|---|---|---|
| Between Groups | 416.1 | 2 | 208.05 | 71.74 | < 0.001 |
| Within Groups (Error) | 34.8 | 12 | 2.9 | ||
| Total | 450.9 | 14 |
解读:
- SS (Sum of Squares):平方和
- df (degrees of freedom):自由度
- MS (Mean Square):均方 = SS / df
- F (F-statistic / F-ratio):F 统计量
- p-value (significance level):显著性概率
九、ANOVA 的前提假设 (Assumptions)
ANOVA 的结果可靠性依赖于以下假设:
1. 独立性 (Independence of Observations)
要求:各组的观测值互相独立,一个观测值不影响另一个。
违反例子:
- 同一个人在不同时间点的测量(应该用 repeated measures ANOVA)
- 同一家庭的多个成员(存在聚类效应 / clustering effect)
检验方法:通过研究设计 (study design) 保证,无统计检验。
2. 正态性 (Normality)
要求:每组数据应该服从正态分布 (normally distributed)。
检验方法:
- Shapiro-Wilk test:p > 0.05 说明符合正态分布
- Q-Q plot (Quantile-Quantile plot):点应该大致在直线上
- 直方图 (Histogram):应该呈钟形 (bell-shaped)
稳健性 (Robustness):
- 样本量较大时(n > 30),ANOVA 对正态性违反比较稳健
- 如果严重违反,可以用非参数方法 (non-parametric alternative)(Kruskal-Wallis test)
3. 方差齐性 (Homogeneity of Variance / Homoscedasticity)
要求:各组的方差 (variance) 应该大致相等。
检验方法:
- Levene’s test:p > 0.05 说明方差齐性
- Bartlett’s test:对正态性敏感,不推荐
如果违反 (heteroscedasticity):
- 可以用 Welch’s ANOVA(不假设方差齐性)
- 或用非参数方法(Kruskal-Wallis test)
十、效应量 (Effect Size)
为什么需要效应量?
p-value 只告诉我们”是否有差异 (statistical significance)“,但不告诉我们”差异有多大 (practical significance)”。
样本量很大时,即使差异很小也可能显著(p < 0.05)。
Eta-squared (η² / Eta squared)
衡量组间变异占总变异的比例 (proportion of variance explained):
η² = SSB / SST
解释标准(Cohen’s guideline):
- η² = 0.01:小效应 (small effect)
- η² = 0.06:中等效应 (medium effect)
- η² = 0.14:大效应 (large effect)
Omega-squared (ω² / Omega squared)
比 η² 更保守的估计(less biased estimator):
ω² = (SSB - (k-1)×MSW) / (SST + MSW)
示例计算
前面的肥料例子:
η² = SSB / SST = 416.1 / 450.9 = 0.923
解释:92.3% 的产量变异可以由肥料类型解释,这是非常大的效应 (very large effect)。
十一、ANOVA 的局限性 (Limitations)
1. 只能判断”有差异”,不能判断”哪里有差异” (Omnibus Test)
ANOVA 显著只说明至少有一对组不同,但不告诉你:
- 是哪些组不同?(Which groups differ?)
- 差异的方向 (Direction of difference)(谁高谁低)?
- 差异的大小 (Magnitude of difference)?
解决方案:用 post-hoc tests / multiple comparisons(Tukey HSD、Bonferroni、Scheffé 等)。
2. 对异常值敏感 (Sensitive to Outliers)
极端值 (extreme values / outliers) 会严重影响均值和方差,导致结果不准确。
解决方案:
- 检查并处理异常值(删除或转换 / transformation)
- 使用稳健方法 (robust methods)(如 Kruskal-Wallis test)
3. 只能处理一个因子 (Single Factor)
如果有多个自变量(如肥料类型 + 灌溉方式),需要用:
- Two-way ANOVA(双因素方差分析)
- Factorial ANOVA(多因素方差分析)# Two-way ANOVA 和 Multi-way ANOVA 详解
十二、Two-way ANOVA(双因素方差分析)
什么是 Two-way ANOVA?
Two-way ANOVA 用于同时检验**两个分类自变量(因子)**对一个连续因变量的影响。
核心概念
Two-way ANOVA 不仅可以检验:
- 主效应 (Main Effect):每个因子单独的影响
- 交互效应 (Interaction Effect):两个因子共同作用的影响
适用场景
| 研究问题 | 因子 A (Factor A) | 因子 B (Factor B) | 因变量 (Outcome) |
|---|---|---|---|
| 药物和性别对血压的影响 | 药物类型(A/B/C) | 性别(男/女) | 血压下降值 |
| 教学方法和学习时间对成绩的影响 | 教学方法(传统/在线) | 学习时间(短/中/长) | 考试成绩 |
| 肥料和灌溉对产量的影响 | 肥料类型(A/B/C) | 灌溉方式(滴灌/喷灌) | 作物产量 |
| 广告类型和投放时段对点击率的影响 | 广告类型(图片/视频) | 时段(早/午/晚) | 点击率 |
Two-way ANOVA 的优势
相比做两次 One-way ANOVA:
- 更高效:一次分析同时检验两个因子
- 控制混淆 (Confounding):考虑了另一个因子的影响
- 发现交互效应:这是最重要的优势
交互效应 (Interaction Effect) 详解
交互效应:一个因子的效应取决于另一个因子的水平。
例子 1:药物 × 性别
假设研究药物 A 和 B 对男女血压的影响:
| 男性 | 女性 | |
|---|---|---|
| 药物 A | 降低 10 mmHg | 降低 10 mmHg |
| 药物 B | 降低 5 mmHg | 降低 15 mmHg |
分析:
- 药物 A:对男女效果一样(都是 10)
- 药物 B:对女性效果更好(15 > 5)
- 存在交互效应:药物效果取决于性别
图示:
血压下降值
|
15 | ● 药物B-女性
| /
10 | ●--------● 药物A
| \
5 | ● 药物B-男性
|________________
男性 女性
如果两条线不平行,说明存在交互效应。
例子 2:教学方法 × 学习时间
| 短时间 | 长时间 | |
|---|---|---|
| 传统教学 | 60 分 | 70 分 |
| 在线教学 | 55 分 | 85 分 |
分析:
- 传统教学:学习时间增加,成绩提高 10 分
- 在线教学:学习时间增加,成绩提高 30 分
- 存在交互效应:在线教学更依赖学习时间
Two-way ANOVA 的数学模型
模型公式
yᵢⱼₖ = μ + αᵢ + βⱼ + (αβ)ᵢⱼ + εᵢⱼₖ
符号说明:
- yᵢⱼₖ:第 i 个 A 水平、第 j 个 B 水平、第 k 个观测值
- μ:总均值 (grand mean)
- αᵢ:因子 A 第 i 个水平的主效应 (main effect of Factor A)
- βⱼ:因子 B 第 j 个水平的主效应 (main effect of Factor B)
- (αβ)ᵢⱼ:交互效应 (interaction effect)
- εᵢⱼₖ:随机误差 (random error)
变异分解 (Variance Decomposition)
Two-way ANOVA 把总变异分解成四部分:
SST = SS_A + SS_B + SS_A×B + SS_error
总变异 = A的主效应 + B的主效应 + 交互效应 + 随机误差
各部分含义:
-
SS_A (Sum of Squares for Factor A):因子 A 的主效应
- 衡量因子 A 各水平均值的差异
-
SS_B (Sum of Squares for Factor B):因子 B 的主效应
- 衡量因子 B 各水平均值的差异
-
SS_A×B (Sum of Squares for Interaction):交互效应
- 衡量 A 和 B 共同作用产生的额外效应
-
SS_error (Sum of Squares for Error):随机误差
- 组内变异,无法被因子解释的部分
Two-way ANOVA 表
| Source | SS | df | MS | F | p-value |
|---|---|---|---|---|---|
| Factor A | SS_A | a-1 | MS_A | F_A | p_A |
| Factor B | SS_B | b-1 | MS_B | F_B | p_B |
| A × B (Interaction) | SS_A×B | (a-1)(b-1) | MS_A×B | F_A×B | p_A×B |
| Error | SS_error | N-ab | MS_error | ||
| Total | SST | N-1 |
符号说明:
- a:因子 A 的水平数 (number of levels of Factor A)
- b:因子 B 的水平数 (number of levels of Factor B)
- N:总样本量 (total sample size)
三个 F 检验
Two-way ANOVA 需要进行三个独立的假设检验:
1. 因子 A 的主效应检验
原假设 (H₀):因子 A 各水平的总体均值相等
H₀: μ_A1 = μ_A2 = ... = μ_Aa
检验统计量:
F_A = MS_A / MS_error
2. 因子 B 的主效应检验
原假设 (H₀):因子 B 各水平的总体均值相等
H₀: μ_B1 = μ_B2 = ... = μ_Bb
检验统计量:
F_B = MS_B / MS_error
3. 交互效应检验
原假设 (H₀):因子 A 和 B 之间无交互效应
H₀: (αβ)ᵢⱼ = 0 for all i, j
检验统计量:
F_A×B = MS_A×B / MS_error
重要:如果交互效应显著,主效应的解释需要谨慎,因为一个因子的效应取决于另一个因子的水平。
完整计算示例:药物 × 性别
研究问题
比较两种降压药(A、B)对男女患者的效果。
数据(血压下降值,mmHg)
| 男性 | 女性 | |
|---|---|---|
| 药物 A | 8, 10, 9 | 12, 14, 13 |
| 药物 B | 15, 17, 16 | 10, 12, 11 |
Step 1: 计算各单元格均值 (Cell Means)
| 男性 | 女性 | 行均值 (Row Mean) | |
|---|---|---|---|
| 药物 A | 9.0 | 13.0 | 11.0 |
| 药物 B | 16.0 | 11.0 | 13.5 |
| 列均值 (Column Mean) | 12.5 | 12.0 |
总均值 (Grand Mean):x̄ = 12.25
Step 2: 计算 SS_A(药物主效应)
SS_A = nb × Σ(x̄ᵢ. - x̄)²
= 2×3 × [(11.0-12.25)² + (13.5-12.25)²]
= 6 × [1.5625 + 1.5625]
= 6 × 3.125
= 18.75
Step 3: 计算 SS_B(性别主效应)
SS_B = na × Σ(x̄.ⱼ - x̄)²
= 2×3 × [(12.5-12.25)² + (12.0-12.25)²]
= 6 × [0.0625 + 0.0625]
= 6 × 0.125
= 0.75
Step 4: 计算 SS_A×B(交互效应)
SS_A×B = n × ΣΣ(x̄ᵢⱼ - x̄ᵢ. - x̄.ⱼ + x̄)²
单元格 (A, 男):(9.0 - 11.0 - 12.5 + 12.25)² = (-2.25)² = 5.0625
单元格 (A, 女):(13.0 - 11.0 - 12.0 + 12.25)² = (2.25)² = 5.0625
单元格 (B, 男):(16.0 - 13.5 - 12.5 + 12.25)² = (2.25)² = 5.0625
单元格 (B, 女):(11.0 - 13.5 - 12.0 + 12.25)² = (-2.25)² = 5.0625
SS_A×B = 3 × (5.0625 + 5.0625 + 5.0625 + 5.0625)
= 3 × 20.25
= 60.75
Step 5: 计算 SS_error(组内误差)
药物A-男性:(8-9)² + (10-9)² + (9-9)² = 1 + 1 + 0 = 2
药物A-女性:(12-13)² + (14-13)² + (13-13)² = 1 + 1 + 0 = 2
药物B-男性:(15-16)² + (17-16)² + (16-16)² = 1 + 1 + 0 = 2
药物B-女性:(10-11)² + (12-11)² + (11-11)² = 1 + 1 + 0 = 2
SS_error = 2 + 2 + 2 + 2 = 8
Step 6: 计算自由度
df_A = a - 1 = 2 - 1 = 1
df_B = b - 1 = 2 - 1 = 1
df_A×B = (a-1)(b-1) = 1×1 = 1
df_error = N - ab = 12 - 4 = 8
Step 7: 计算均方和 F 值
MS_A = SS_A / df_A = 18.75 / 1 = 18.75
MS_B = SS_B / df_B = 0.75 / 1 = 0.75
MS_A×B = SS_A×B / df_A×B = 60.75 / 1 = 60.75
MS_error = SS_error / df_error = 8 / 8 = 1.0
F_A = MS_A / MS_error = 18.75 / 1.0 = 18.75
F_B = MS_B / MS_error = 0.75 / 1.0 = 0.75
F_A×B = MS_A×B / MS_error = 60.75 / 1.0 = 60.75
Step 8: ANOVA 表
| Source | SS | df | MS | F | p-value |
|---|---|---|---|---|---|
| 药物 (Drug) | 18.75 | 1 | 18.75 | 18.75 | 0.003** |
| 性别 (Gender) | 0.75 | 1 | 0.75 | 0.75 | 0.411 |
| 药物×性别 (Interaction) | 60.75 | 1 | 60.75 | 60.75 | < 0.001*** |
| Error | 8.0 | 8 | 1.0 | ||
| Total | 88.25 | 11 |
Step 9: 结果解释
-
药物主效应显著 (F = 18.75, p = 0.003)
- 两种药物的平均效果不同
- 药物 B (13.5) > 药物 A (11.0)
-
性别主效应不显著 (F = 0.75, p = 0.411)
- 男女患者的平均血压下降值相似
- 男性 (12.5) ≈ 女性 (12.0)
-
交互效应显著 (F = 60.75, p < 0.001) ⭐
- 这是最重要的发现
- 药物效果取决于性别:
- 药物 A:女性 (13) > 男性 (9)
- 药物 B:男性 (16) > 女性 (11)
临床意义:
- 不能简单说”药物 B 更好”
- 应该根据患者性别选择药物:
- 男性患者:推荐药物 B
- 女性患者:推荐药物 A
交互效应的可视化
交互图 (Interaction Plot)
血压下降值 (mmHg)
|
16 | ● 药物B-男性
| /
14 | / ● 药物A-女性
| / /
12 | / /
| / /
10 | / ● 药物B-女性
| / /
8 | ● 药物A-男性
|________________
男性 女性
关键特征:
- 两条线交叉 (cross):强交互效应
- 如果线平行 (parallel):无交互效应
- 如果线不平行但不交叉:可能有弱交互效应
Two-way ANOVA 的前提假设
与 One-way ANOVA 相同,但更严格:
- 独立性 (Independence):所有观测值互相独立
- 正态性 (Normality):每个单元格 (cell) 的数据服从正态分布
- 方差齐性 (Homogeneity of Variance):所有单元格的方差相等
检验方法:
- Levene’s test:检验方差齐性
- Shapiro-Wilk test:检验每个单元格的正态性
Two-way ANOVA 的类型
1. 平衡设计 (Balanced Design)
每个单元格的样本量相等:n₁₁ = n₁₂ = … = nₐᵦ
优点:
- 计算简单
- 统计功效 (statistical power) 最大
- 对假设违反更稳健
2. 非平衡设计 (Unbalanced Design)
各单元格样本量不等。
问题:
- SS_A 和 SS_B 不再独立
- 需要选择 SS 的计算方法(Type I, II, III)
Type I, II, III SS 的区别:
| Type | 名称 | 特点 | 适用场景 |
|---|---|---|---|
| Type I | Sequential SS | 顺序依赖 | 很少使用 |
| Type II | Hierarchical SS | 不考虑交互效应 | 无交互效应时 |
| Type III | Marginal SS | 考虑所有效应 | 最常用,尤其是非平衡设计 |
建议:使用 Type III SS(R 中的 car::Anova(),SPSS 默认)。
Post-hoc Tests for Two-way ANOVA
如果主效应或交互效应显著,需要进一步分析:
1. 主效应显著 + 无交互效应
- 对该因子进行 post-hoc test(如 Tukey HSD)
2. 交互效应显著
-
Simple Effects Analysis(简单效应分析):
- 固定一个因子的某个水平,比较另一个因子的效应
- 例如:在男性中比较药物 A vs B;在女性中比较药物 A vs B
-
Simple Comparisons(简单比较):
- 比较特定单元格之间的差异
- 例如:药物A-男性 vs 药物B-男性
Two-way ANOVA 的效应量
1. Partial Eta-squared (η²_p)
衡量某个因子解释的变异占该因子+误差的比例:
η²_p(A) = SS_A / (SS_A + SS_error)
η²_p(B) = SS_B / (SS_B + SS_error)
η²_p(A×B) = SS_A×B / (SS_A×B + SS_error)
解释标准:
- 0.01:小效应
- 0.06:中等效应
- 0.14:大效应
前面例子的效应量:
η²_p(药物) = 18.75 / (18.75 + 8) = 0.70 (大效应)
η²_p(性别) = 0.75 / (0.75 + 8) = 0.09 (中等效应)
η²_p(交互) = 60.75 / (60.75 + 8) = 0.88 (非常大效应)
Two-way ANOVA vs 两次 One-way ANOVA
| 比较项 | Two-way ANOVA | 两次 One-way ANOVA |
|---|---|---|
| 效率 | 一次分析 | 需要两次分析 |
| 交互效应 | ✅ 可以检测 | ❌ 无法检测 |
| 控制混淆 | ✅ 控制另一因子 | ❌ 未控制 |
| 统计功效 | 更高 | 更低 |
| 结论准确性 | 更准确 | 可能误导 |
重要:如果存在交互效应,两次 One-way ANOVA 会得出错误结论!
十三、Multi-way ANOVA(多因素方差分析)
什么是 Multi-way ANOVA?
Multi-way ANOVA(也叫 Factorial ANOVA)用于同时检验三个或更多分类自变量对一个连续因变量的影响。
适用场景
| 研究问题 | 因子 A | 因子 B | 因子 C | 因变量 |
|---|---|---|---|---|
| 药物、性别、年龄对血压的影响 | 药物类型 | 性别 | 年龄组 | 血压 |
| 教学方法、学习时间、学生类型对成绩的影响 | 教学方法 | 学习时间 | 学生类型 | 成绩 |
| 肥料、灌溉、土壤对产量的影响 | 肥料类型 | 灌溉方式 | 土壤类型 | 产量 |
| 广告、时段、平台对点击率的影响 | 广告类型 | 投放时段 | 平台类型 | 点击率 |
Three-way ANOVA 的数学模型
以三因素为例:
yᵢⱼₖₗ = μ + αᵢ + βⱼ + γₖ + (αβ)ᵢⱼ + (αγ)ᵢₖ + (βγ)ⱼₖ + (αβγ)ᵢⱼₖ + εᵢⱼₖₗ
符号说明:
- μ:总均值
- αᵢ, βⱼ, γₖ:三个因子的主效应
- (αβ)ᵢⱼ, (αγ)ᵢₖ, (βγ)ⱼₖ:二阶交互效应 (two-way interactions)
- (αβγ)ᵢⱼₖ:三阶交互效应 (three-way interaction)
- εᵢⱼₖₗ:随机误差
变异分解
Three-way ANOVA 把总变异分解成八部分:
SST = SS_A + SS_B + SS_C
+ SS_A×B + SS_A×C + SS_B×C
+ SS_A×B×C
+ SS_error
包括:
- 3 个主效应 (main effects)
- 3 个二阶交互效应 (two-way interactions)
- 1 个三阶交互效应 (three-way interaction)
- 1 个误差项 (error term)
Three-way ANOVA 表
| Source | SS | df | MS | F | p-value |
|---|---|---|---|---|---|
| Factor A | SS_A | a-1 | MS_A | F_A | p_A |
| Factor B | SS_B | b-1 | MS_B | F_B | p_B |
| Factor C | SS_C | c-1 | MS_C | F_C | p_C |
| A × B | SS_A×B | (a-1)(b-1) | MS_A×B | F_A×B | p_A×B |
| A × C | SS_A×C | (a-1)(c-1) | MS_A×C | F_A×C | p_A×C |
| B × C | SS_B×C | (b-1)(c-1) | MS_B×C | F_B×C | p_B×C |
| A × B × C | SS_A×B×C | (a-1)(b-1)(c-1) | MS_A×B×C | F_A×B×C | p_A×B×C |
| Error | SS_error | N-abc | MS_error | ||
| Total | SST | N-1 |
三阶交互效应 (Three-way Interaction)
含义:A 和 B 的交互效应取决于 C 的水平。
例子:药物 × 性别 × 年龄
假设研究发现:
-
年轻患者:
- 药物 A 对男性更好
- 药物 B 对女性更好
-
老年患者:
- 药物 A 对女性更好
- 药物 B 对男性更好
解释:药物和性别的交互效应在不同年龄组中**方向
#相反**,这就是三阶交互效应。
可视化:
年轻患者组:
血压下降值
|
16 | ● 药物B-女性
| /
12 | / ● 药物A-男性
| / /
8 |/ /
| ● 药物A-女性
4 | ● 药物B-男性
|________________
男性 女性
老年患者组:
血压下降值
|
16 | ● 药物A-女性
| /
12 | / ● 药物B-男性
| / /
8 |/ /
| ● 药物B-女性
4 | ● 药物A-男性
|________________
男性 女性
关键特征:两个年龄组中,药物×性别的交互模式完全不同。
解释 Multi-way ANOVA 结果的层级原则
原则 1:从高阶交互效应开始检验
检验顺序:
- 先看三阶交互效应 (A×B×C)
- 再看二阶交互效应 (A×B, A×C, B×C)
- 最后看主效应 (A, B, C)
原因:高阶交互效应显著时,低阶效应的解释会变得复杂或无意义。
原则 2:交互效应显著时的解释策略
| 显著效应 | 解释策略 |
|---|---|
| 三阶交互显著 | 需要分层分析:固定一个因子,分析另外两个因子的二阶交互 |
| 二阶交互显著 | 进行简单效应分析 (simple effects analysis) |
| 仅主效应显著 | 直接比较该因子各水平的边际均值 (marginal means) |
完整示例:药物 × 性别 × 年龄(Three-way ANOVA)
研究设计
- 因子 A(药物):2 水平(药物 A, 药物 B)
- 因子 B(性别):2 水平(男性, 女性)
- 因子 C(年龄):2 水平(年轻 <50岁, 老年 ≥50岁)
- 因变量:血压下降值 (mmHg)
- 设计:2×2×2 完全析因设计 (full factorial design)
- 每个单元格:n = 5 名患者
数据结构
| 药物 | 性别 | 年龄 | 血压下降值 (n=5 的均值) |
|---|---|---|---|
| A | 男 | 年轻 | 12 |
| A | 男 | 老年 | 8 |
| A | 女 | 年轻 | 10 |
| A | 女 | 老年 | 14 |
| B | 男 | 年轻 | 6 |
| B | 男 | 老年 | 15 |
| B | 女 | 年轻 | 16 |
| B | 女 | 老年 | 9 |
ANOVA 表(假设结果)
| Source | SS | df | MS | F | p-value | η²_p |
|---|---|---|---|---|---|---|
| 药物 (A) | 2.5 | 1 | 2.5 | 0.83 | 0.368 | 0.03 |
| 性别 (B) | 0.5 | 1 | 0.5 | 0.17 | 0.685 | 0.01 |
| 年龄 (C) | 1.0 | 1 | 1.0 | 0.33 | 0.568 | 0.01 |
| A × B | 8.0 | 1 | 8.0 | 2.67 | 0.111 | 0.08 |
| A × C | 12.0 | 1 | 12.0 | 4.00 | 0.053 | 0.11 |
| B × C | 4.0 | 1 | 4.0 | 1.33 | 0.256 | 0.04 |
| A × B × C | 240.0 | 1 | 240.0 | 80.0 | <0.001* | 0.71 |
| Error | 96.0 | 32 | 3.0 | |||
| Total | 364.0 | 39 |
结果解释
1. 三阶交互效应显著 ⭐⭐⭐
F(1, 32) = 80.0, p < 0.001, η²_p = 0.71
含义:
- 药物和性别的交互效应取决于年龄组
- 不能简单说”哪种药物更好”或”哪种性别反应更好”
- 需要分层分析
2. 分层分析:固定年龄,分析药物×性别
年轻患者组 (<50岁):
| 男性 | 女性 | 行均值 | |
|---|---|---|---|
| 药物 A | 12 | 10 | 11 |
| 药物 B | 6 | 16 | 11 |
| 列均值 | 9 | 13 |
简单交互效应分析:
- 药物 A:男性 (12) > 女性 (10)
- 药物 B:女性 (16) >> 男性 (6)
- 存在显著交互效应
临床建议(年轻患者):
- 男性 → 药物 A
- 女性 → 药物 B
老年患者组 (≥50岁):
| 男性 | 女性 | 行均值 | |
|---|---|---|---|
| 药物 A | 8 | 14 | 11 |
| 药物 B | 15 | 9 | 12 |
| 列均值 | 11.5 | 11.5 |
简单交互效应分析:
- 药物 A:女性 (14) >> 男性 (8)
- 药物 B:男性 (15) >> 女性 (9)
- 存在显著交互效应(但模式与年轻组相反!)
临床建议(老年患者):
- 男性 → 药物 B
- 女性 → 药物 A
3. 总结
个性化治疗方案:
| 患者特征 | 推荐药物 | 预期效果 |
|---|---|---|
| 年轻男性 | 药物 A | 12 mmHg |
| 年轻女性 | 药物 B | 16 mmHg |
| 老年男性 | 药物 B | 15 mmHg |
| 老年女性 | 药物 A | 14 mmHg |
关键发现:
- 三个因子的主效应都不显著
- 但三阶交互效应非常显著
- 说明个体化治疗至关重要
Multi-way ANOVA 的复杂性
1. 单元格数量爆炸
| 因子数 | 每个因子水平数 | 单元格数 | 所需样本量 (每格n=5) |
|---|---|---|---|
| 2 | 3 | 3×3 = 9 | 45 |
| 3 | 3 | 3×3×3 = 27 | 135 |
| 4 | 3 | 3×3×3×3 = 81 | 405 |
| 5 | 3 | 3⁵ = 243 | 1,215 |
问题:
- 样本量需求急剧增加
- 数据收集成本高
- 某些单元格可能缺失数据
2. 交互效应数量增加
| 因子数 | 主效应 | 二阶交互 | 三阶交互 | 四阶交互 | 总效应数 |
|---|---|---|---|---|---|
| 2 | 2 | 1 | 0 | 0 | 3 |
| 3 | 3 | 3 | 1 | 0 | 7 |
| 4 | 4 | 6 | 4 | 1 | 15 |
| 5 | 5 | 10 | 10 | 5 | 31 |
公式:总效应数 = 2^k - 1(k 是因子数)
问题:
- 需要进行大量假设检验
- 多重比较问题 (multiple comparison problem) 严重
- 高阶交互效应难以解释
3. 高阶交互效应的解释困难
四阶交互效应 (A×B×C×D):
- A、B、C 的三阶交互效应取决于 D 的水平
- 几乎无法可视化
- 实际意义难以理解
建议:
- 通常只考虑到三阶交互
- 四阶及以上交互效应很少有实际意义
- 如果出现显著的四阶交互,考虑简化模型
Multi-way ANOVA 的实际应用策略
策略 1:限制因子数量
建议:
- 尽量不超过 3-4 个因子
- 优先选择最重要的因子
- 其他因子可以作为协变量 (covariates) 处理(使用 ANCOVA)
策略 2:使用部分析因设计 (Fractional Factorial Design)
完全析因设计 (Full Factorial):测试所有可能的组合
部分析因设计:只测试部分组合
例子:5 因子,每个 2 水平
- 完全设计:2⁵ = 32 个单元格
- 半分设计 (half-fraction):2⁵⁻¹ = 16 个单元格
- 四分之一设计:2⁵⁻² = 8 个单元格
代价:无法估计某些高阶交互效应
策略 3:分层分析 (Stratified Analysis)
如果某个因子特别重要(如年龄、疾病严重程度):
- 按该因子分层
- 在每层内进行低维度 ANOVA
- 比较各层的结果模式
优点:
- 结果更容易解释
- 避免高阶交互的复杂性
策略 4:使用混合效应模型 (Mixed Effects Models)
当有随机因子 (random factors) 时(如:医院、批次、时间):
固定因子 (Fixed Factors):
- 研究者关心的特定水平
- 例如:特定的 3 种药物
随机因子 (Random Factors):
- 从更大总体中随机抽取的水平
- 例如:从 100 家医院中随机选 10 家
模型:
yᵢⱼₖ = μ + αᵢ + bⱼ + (αb)ᵢⱼ + εᵢⱼₖ
- αᵢ:固定效应
- bⱼ:随机效应 ~ N(0, σ²_b)
优点:
- 可以推广到未测试的水平
- 更准确地估计标准误
Multi-way ANOVA 的前提假设
与 Two-way ANOVA 相同,但更严格:
- 独立性:所有观测值互相独立
- 正态性:每个单元格的数据服从正态分布
- 方差齐性:所有单元格的方差相等
检验方法:
- Levene’s test:检验方差齐性
- Shapiro-Wilk test:检验正态性(但单元格太多时不实用)
稳健性:
- 平衡设计 + 样本量足够大时,ANOVA 对假设违反较稳健
- 非平衡设计对假设违反更敏感
Multi-way ANOVA 的替代方法
1. 非参数方法
Aligned Rank Transform (ART):
- 对数据进行特殊的秩转换
- 然后进行标准 ANOVA
- 可以处理多因子和交互效应
优点:不假设正态分布 缺点:统计功效较低
2. 广义线性模型 (Generalized Linear Models, GLM)
当因变量不是正态分布时:
| 因变量类型 | 分布 | 链接函数 | 例子 |
|---|---|---|---|
| 计数数据 | Poisson | log | 住院次数 |
| 二分类 | Binomial | logit | 治愈/未治愈 |
| 比例数据 | Beta | logit | 改善比例 |
3. 多元方差分析 (MANOVA)
当有多个因变量时:
例子:
- 因子:药物类型(A, B, C)
- 因变量:收缩压、舒张压、心率(3 个)
MANOVA 同时检验多个因变量,控制 Type I error。
报告 Multi-way ANOVA 结果的标准格式
1. 描述性统计
表1:各组描述性统计(均值 ± 标准差)
药物 | 性别 | 年龄 | n | 血压下降值 (mmHg)
-----|------|------|---|------------------
A | 男 | 年轻 | 5 | 12.0 ± 1.2
A | 男 | 老年 | 5 | 8.0 ± 1.5
...
2. ANOVA 表
表2:Three-way ANOVA 结果
效应 | F | df | p | η²_p
-------------|--------|-------|--------|------
药物 (A) | 0.83 | 1,32 | 0.368 | 0.03
性别 (B) | 0.17 | 1,32 | 0.685 | 0.01
年龄 (C) | 0.33 | 1,32 | 0.568 | 0.01
A × B | 2.67 | 1,32 | 0.111 | 0.08
A × C | 4.00 | 1,32 | 0.053 | 0.11
B × C | 1.33 | 1,32 | 0.256 | 0.04
A × B × C | 80.0 | 1,32 | <0.001 | 0.71
3. 文字描述
"Three-way ANOVA 显示,药物、性别、年龄的三阶交互效应显著,
F(1, 32) = 80.0, p < 0.001, η²_p = 0.71。
分层分析显示,在年轻患者中,药物 B 对女性更有效(16 mmHg),
而药物 A 对男性更有效(12 mmHg)。
相反,在老年患者中,药物 A 对女性更有效(14 mmHg),
而药物 B 对男性更有效(15 mmHg)。
这些结果表明,药物选择应根据患者的性别和年龄进行个性化调整。"
4. 可视化
推荐图表:
- 交互图 (Interaction plots):展示二阶交互
- 分面图 (Faceted plots):按一个因子分层,展示其他因子的交互
- 热图 (Heatmap):展示所有单元格的均值
示例代码(R):
# 交互图
library(ggplot2)
ggplot(data, aes(x = Gender, y = BP_reduction,
color = Drug, linetype = Age)) +
geom_line(aes(group = interaction(Drug, Age))) +
geom_point() +
facet_wrap(~ Age) +
theme_minimal()
Multi-way ANOVA 的优缺点总结
优点
- 全面分析:同时考虑多个因子及其交互
- 控制混淆:考虑了其他因子的影响
- 发现复杂模式:揭示高阶交互效应
- 提高效率:一次分析代替多次单因素分析
- 个性化洞察:为精准医疗、个性化教育等提供依据
缺点
- 样本量需求大:单元格数量指数增长
- 解释复杂:高阶交互难以理解和可视化
- 多重比较问题:增加 Type I error 风险
- 假设更严格:对假设违反更敏感
- 数据收集困难:某些组合可能难以实现
- 过度拟合风险:因子太多可能导致模型过于复杂
实际应用的最佳实践
1. 研究设计阶段
先验功效分析 (A priori power analysis):
- 确定所需样本量
- 考虑预期效应量和统计功效 (通常 0.80)
平衡设计:
- 尽量让各单元格样本量相等
- 提高统计功效和稳健性
预注册 (Pre-registration):
- 事先声明主要假设和分析计划
- 避免 p-hacking 和 HARKing
2. 数据分析阶段
探索性数据分析 (EDA):
- 检查数据分布、异常值
- 画箱线图、散点图
假设检验:
- 检验正态性、方差齐性
- 如果违反,考虑转换或稳健方法
层级检验:
- 从高阶交互开始
- 根据结果决定是否检验低阶效应
效应量报告:
- 不仅报告 p-value
- 必须报告效应量(η²_p, Cohen’s d 等)
多重比较校正:
- 使用 Bonferroni、Holm、FDR 等方法
- 控制 family-wise error rate
3. 结果报告阶段
完整报告:
- 描述性统计
- ANOVA 表
- 效应量
- Post-hoc 检验结果
可视化:
- 交互图
- 误差棒图 (error bar plots)
- 置信区间
实际意义:
- 不仅说”统计显著”
- 解释实际意义和应用价值
十四、ANOVA 家族方法对比总结
完整对比表
| 方法 | 因子数 | 因变量数 | 样本类型 | 主要用途 |
|---|---|---|---|---|
| One-way ANOVA | 1 | 1 | 独立 | 比较 3+ 组均值 |
| Two-way ANOVA | 2 | 1 | 独立 | 检验 2 因子及交互 |
| Multi-way ANOVA | 3+ | 1 | 独立 | 检验多因子及交互 |
| Repeated Measures ANOVA | 1+ | 1 | 重复测量 | 同一对象多次测量 |
| MANOVA | 1+ | 2+ | 独立 | 多个因变量 |
| ANCOVA | 1+ | 1 | 独立 + 协变量 | 控制连续变量 |
| Mixed ANOVA | 2+ | 1 | 混合 | 组间 + 组内因子 |
选择决策树
开始
|
├─ 因变量是连续的?
| ├─ 是 → 继续
| └─ 否 → 考虑 GLM, 逻辑回归等
|
├─ 有几个因变量?
| ├─ 1 个 → 继续
| └─ 2+ 个 → 考虑 MANOVA
|
├─ 有几个分类自变量?
| ├─ 1 个 → One-way ANOVA
| ├─ 2 个 → Two-way ANOVA
| └─ 3+ 个 → Multi-way ANOVA
|
├─ 样本是独立的吗?
| ├─ 是 → Between-subjects ANOVA
| └─ 否 → Repeated Measures ANOVA
|
└─ 需要控制连续变量吗?
├─ 是 → ANCOVA
└─ 否 → 标准 ANOVA
十五、总结与展望
ANOVA 的核心价值
- 多组比较的基石:避免多次 t 检验的问题
- 揭示交互效应:发现复杂的因子关系
- 实验设计的基础:指导科学研究设计
- 广泛应用:医学、心理学、农业、工程等领域
从 ANOVA 到现代统计方法
ANOVA 是通向更高级方法的桥梁:
ANOVA
↓
线性混合模型 (Linear Mixed Models)
↓
广义线性混合模型 (Generalized Linear Mixed Models)
↓
贝叶斯层级模型 (Bayesian Hierarchical Models)
学习建议
- 掌握基础:从 One-way ANOVA 开始,理解 F 检验的逻辑
- 理解交互:Two-way ANOVA 的交互效应是关键
- 实践应用:用真实数据练习,学会用 R/Python/SPSS
- 批判思维:理解 ANOVA 的局限性和假设
- 持续学习:探索混合模型、贝叶斯方法等现代技术
最后更新 · 2026-05-19 23:52