car::Anova 在 R 中给出了类型 II 和类型 III 的不同 p 值,即使我有一个平衡的设计?

car::Anova in R gives different p-values for TypeII vs TypeIII even though I have a balanced design?

我已经尝试在我找到的其他两种方差分析讨论中找到这个问题的答案,但没有成功,所以我希望这不是重复。

我有一个平衡设计(4 组中每组 5 个观察值)。据我了解,这意味着使用 I、II 或 III 型平方和执行双向方差分析应该对主效应 and/or 交互作用给出相同的结果。

我的线性模型是这样的:

mod <- lm(X2HG ~ Genotype * Diet, data = df)  

当我 运行 在 R 中使用 typeII 时:

Anova(mod, type=2)
Anova Table (Type II tests)
Response: X2HG
                  Sum Sq Df F value   Pr(>F)   
Genotype      2.9033e+11  1  4.5914 0.047854 * 
Diet          8.4475e+11  1 13.3594 0.002136 **
Genotype:Diet 5.5728e+11  1  8.8132 0.009051 **
Residuals     1.0117e+12 16                    

F 值和 p 值与类型 III 非常不同:

Anova(mod, type=3)
Anova Table (Type III tests)

Response: X2HG
                  Sum Sq Df F value    Pr(>F)    
(Intercept)   1.5182e+12  1 24.0103 0.0001602 ***
Genotype      2.1568e+10  1  0.3411 0.5673422    
Diet          1.4894e+10  1  0.2355 0.6340278    
Genotype:Diet 5.5728e+11  1  8.8132 0.0090510 ** 
Residuals     1.0117e+12 16                      

任何人都可以解释为什么不同吗?我认为它们应该相同是不是错了?

编辑:为了进一步清楚起见,我使用 python 中 bioinfokit 包中的类型 2 和类型 3 方差分析获得了相同的输出,因此这并非特定于 R 中的汽车包。

没有。 III 型效应针对模型中的所有其他项进行了调整。除了那些 包含 的项之外,II 型效应针对所有项进行了调整。如果另一个效应可以表示为第一个效应项的线性组合,则一个效应包含另一个效应。因此,相互作用可以包含构成项的主要影响。

这就是为什么您会看到除交互项以外的所有统计数据都在变化的原因。 I、II 和 III 类效应对于平衡数据 仅在没有交互项.

时相等

您可以使用 I 型 SS 重建 III 型 SS,方法是更改​​向模型添加项的顺序:每个效应的 III 型 SS 等于最后将效果添加到模型时键入 I SS。这意味着您需要拟合多个模型才能以这种方式获得 Type II 效果。

您可以做类似的事情,通过确保在任何交互作用项之前都拟合主效应项,从 I 类效应中恢复 II 类效应。

根据此参考资料:https://mcfromnz.wordpress.com/2011/03/02/anova-type-iiiiii-ss-explained/

First, it is necessary to set the contrasts option in R. Because the multi-way ANOVA model is over-parameterised, it is necessary to choose a contrasts setting that sums to zero, otherwise the ANOVA analysis will give incorrect results with respect to the expected hypothesis. (The default contrasts type does not satisfy this requirement.)"

Anova(lm(X2HG ~ Genotype * Diet, data = df, contrasts=list(Genotype=contr.sum, Diet=contr.sum)), type=3)

这样做得到了以下输出:

Anova Table(III 类测试)

Response: X2HG
                  Sum Sq Df  F value    Pr(>F)    
(Intercept)   1.0085e+13  1 159.4960 9.779e-10 ***
Genotype      2.9033e+11  1   4.5914  0.047854 *  
Diet          8.4475e+11  1  13.3594  0.002136 ** 
Genotype:Diet 5.5728e+11  1   8.8132  0.009051 ** 
Residuals     1.0117e+12 16  

它给出与类型 II 和 aov() 函数(默认为类型 I)相同的函数。