R中car::Anova平衡设计下Type II与Type III ANOVA p值差异原因
差异原因说明
你关于平衡设计下三类平方和结果一致的认知存在一个遗漏的前提:该结论仅在模型使用正交对比编码时成立,本次结果差异的核心原因是Rlm()函数的默认对比编码为非正交的处理对照。
具体原理
- Type II平方和计算主效应时,仅调整另一因子的主效应,不调整交互项
- Type III平方和计算主效应时,会同时调整另一因子的主效应和交互项
当使用非正交的处理对照编码时,哪怕实验是平衡设计,主效应和交互项的变异也存在重叠,因此Type III对交互项的调整会显著改变主效应的平方和计算结果,和Type II产生差异。你给出的输出中,交互项的检验结果在两类平方和中完全一致,也刚好符合这个规律(两类平方和对交互项的检验逻辑一致,均会调整两个主效应)。
你提到Python的bioinfokit包计算两类平方和结果一致,是因为该包默认会自动将分类变量转换为正交对比编码,各效应的变异完全独立,因此不管是否调整交互项,平方和计算结果都不会发生变化。
解决方案
如果需要在R中得到一致的Type II、III平方和结果,只需要在拟合模型前将分类变量的对比方式修改为正交编码即可,示例代码如下:
# 将两个分类因子设置为正交求和对比 df$Genotype <- factor(df$Genotype, contrasts = contr.sum) df$Diet <- factor(df$Diet, contrasts = contr.sum) # 重新拟合线性模型 mod_orth <- lm(X2HG ~ Genotype * Diet, data = df) # 再次计算两类平方和,结果将完全一致 car::Anova(mod_orth, type = 2) car::Anova(mod_orth, type = 3)
补充说明
- 若你的研究场景关注不考虑交互的主效应,优先使用Type II平方和即可
- 若交互项显著,你需要评估某因子在另一因子各水平下的效应,可使用Type III平方和,但需确保使用正交对比编码
内容的提问来源于stack exchange,提问作者jmorrr
相关产品推荐
相关产品推荐

