1️⃣ 适用场景
- 单因素(单自变量)比较 两个以上独立样本
- 数据不满足 正态性 或 方差齐性
- 可以看作是非参数版本的 单因素方差分析(ANOVA)
Kruskal-Wallis 检验是基于 秩(rank) 的比较,而不是原始数值。步骤如下:
- 合并所有观测值,对整体数据进行排序,得到秩(rank)
- 计算各组的秩和
- 根据各组样本量 和总样本量 ,计算 Kruskal-Wallis 统计量 :
- :组数
- :第 i 组样本量
- :第 i 组秩和
- 当样本量较大时,H 服从近似 分布,自由度 =
3️⃣ 原理解释
- 通过秩消除了 分布形态 的影响
- 如果各组来自相同分布 → H 值较小(各组秩和差异不显著)
- 如果至少有一组与其他组不同 → H 值较大,显著性检验拒绝原假设
原假设 :所有组的分布相同(中位数相等)
备择假设 :至少有一组分布不同
kruskal.test(Sepal.Length ~ Species, data = iris)- Kruskal-Wallis 不要求正态
- 基于秩进行比较
- 可以看作是 非参数 ANOVA
- 如果显著,需要进一步做 两两比较(如 Dunn 检验 + 多重校正)
假设数据为非正态分布或采取偏态分布,当数据遵循正态分布时,应使用单因素方差分析;
- 所关注的变量应该有两个或多个独立组。该检验最常用于分析三个或更多的组:对于分析两个组,应使用Mann-Whitney U检验来代替;-
- 假设数据在各组之间有类似的分布;
- 数据应该是随机选择的独立样本,即各组之间应该没有关系;
- 每组样本应至少有5个观测值,以达到足够的样本量。
- 这些假设与Mann-Whitney U检验相似,因为Kruskal-Wallis检验本质上是该检验的延伸,有两个以上的独立样本。而且,与Mann-Whitney U检验相似,Kruskal-Wallis检验是基于对数据进行排序并计算出一个检验统计量。
这个问题非常关键 👍。我们来拆开讲。
1️⃣ options(contrasts = c("contr.helmert", "contr.poly")) 是做什么的?
在 R 里,因子型变量在进入模型时需要转换成虚拟变量(dummy variables),这就涉及到 对比编码(contrasts)。
options(contrasts = c("X", "Y")) 规定了:
- 第 1 个参数 → 普通因子(unordered factor)的默认对比方式
- 第 2 个参数 → 有序因子(ordered factor)的默认对比方式
contr.helmert 和 contr.poly 都是正交对比(orthogonal contrasts),常见于实验设计/方差分析里。
2️⃣ 如果你 不设置这个选项 会发生什么?
R 默认是:
options("contrasts")
$contrasts
[1] "contr.treatment" "contr.poly"也就是说:
- 无序因子 → 默认
contr.treatment(处理组 vs 基准组,常见于回归分析) - 有序因子 → 默认
contr.poly(多项式对比)
3️⃣ 对 ANOVA 有什么影响?
-
F 检验(整体显著性)不会受影响
- 无论用什么 contrasts,ANOVA 表中的组间差异检验结果(F 值、p 值)是一样的
- 因为 ANOVA 关注的是整体均值差异,而不是具体对比方式
-
回归系数的解释不同
- 如果用默认的
contr.treatment,系数表示“某组 vs 基准组”的均值差异 - 如果用
contr.helmert,系数表示“某组 vs 之前组均值”的差异 - 如果用
contr.sum,系数表示“每组 vs 整体均值”的差异
- 如果用默认的
-
模型稳定性
- 在实验设计(尤其是平衡设计)中,正交对比(contr.helmert / contr.poly)更合理,因为它们不相关,方差分解更清晰
- 默认的
contr.treatment并不是正交的,结果仍然正确,但在解释和某些辅助分析(如 Type I / II / III 方差分解)时可能不如正交对比直观
4️⃣ 举个例子
data(iris)
# 默认 contrasts
fit1 <- aov(Sepal.Length ~ Species, data=iris)
summary(fit1)
# 修改 contrasts
op <- options(contrasts = c("contr.helmert", "contr.poly"))
fit2 <- aov(Sepal.Length ~ Species, data=iris)
summary(fit2)
# 恢复默认
options(op)对比结果:
- ANOVA 表中的 F 值和 p 值一样
fit1和fit2的系数不一样,解释方式不同
✅ 总结
- 不设置 → 默认
contr.treatment,ANOVA 结果完全没问题,整体检验不受影响 - 设置
contr.helmert/contr.poly→ 更适合实验设计,保证对比正交,解释性更清晰 - 区别主要体现在系数解释,而不是 F 检验结果
要不要我帮你画一个小表,把 常见 contrasts 的含义和适用场景(treatment / sum / helmert / poly)总结出来?