单向方差分析的未校正成对 p 值?

机器算法验证 r 方差分析 自习 多重比较
2022-04-09 05:35:22

作为课堂练习的一部分,我正在执行一个相对简单的单向方差分析。我想从 R 中获得成对的未校正 p 值,因此我可以在另一个包中进行顺序 FDR 测试(我意识到 R 中也有 FDR 包)。我已经设置了我的方差分析,如下所示,它工作正常,产生结果,但我似乎无法弄清楚如何取回原始的、未校正的 p 值。最终,我想在 R 中对 FDR 和顺序 Bonferroni 进行成对测试,但这似乎是第一步。

它看起来pairwiseCImultcomp可能会让我到达我想要去的地方,但我很难弄清楚哪个会做我正在寻找的东西。

R> head(d10)
  time  breed
1 27.4 type.A
2 18.3 type.A
3 24.3 type.B
4 19.6 type.B
5 21.6 type.C
6 30.3 type.D

a10 <- aov(time~breed,data=d10)

# reports the overall significance, but nothing on the pairs  
summary(a10)

# reports corrected values only
TukeyHSD(a10)
3个回答

对于multcomp包,请参阅帮助页面glht您想使用该"Tukey"选项;这实际上并不使用 Tukey 校正,它只是设置所有成对比较。在示例部分中,有一个示例可以完全满足您的要求。

这会计算每次比较的估计值和 se,但不计算 p 值;为此,您需要summary.glht在帮助页面上,特别注意test参数,它允许您设置运行的实际测试。对于进行乘法调整的 p 值,您使用adjusted该参数的函数,而不是乘法调整,您使用test=adjusted("none")(在帮助页面中没有具体提及,尽管它确实说它采用p.adjust,这是您可以找到的地方none。)

您还可以使用矩阵乘法手动计算估计值和 se,然后获得所需的 p 值;这就是glht函数在幕后所做的。要获得您需要开始的矩阵,您将使用coefand vcov

我没有像你说的那样为一个班级项目提供完整的代码(顺便说一句,谢谢你的诚实!),这里的政策是提供有用的提示而不是解决方案。

您可以使用参数pairwise.t.test()中的多重比较校正的可用选项之一p.adjust.method=help(p.adjust)有关单步法和降压法(例如,BHFDR 或bonfBonferroni)的可用选项的更多信息,请参阅参考资料。值得注意的是,您可以直接给出p.adjust()原始 p 值的向量,它会为您提供更正的 p 值。

所以,我建议运行类似的东西

pairwise.t.test(time, breed, p.adjust.method ="none")  # uncorrected p-value
pairwise.t.test(time, breed, p.adjust.method ="bonf")  # Bonferroni p-value

第一个命令为您提供基于 t 检验的 p 值,而不控制 FWER 或 FDR。然后,您可以使用任何您喜欢的命令来获得更正的 p 值。

library(multcomp)
df = mtcars
df$am = as.factor(df$am)
m1 <- aov(mpg ~ am, data= df)
ht = glht(m1, linfct = mcp(am = "Tukey"))
summary(ht, test = adjusted("none"))
# Linear Hypotheses:
#            Estimate Std. Error t value Pr(>|t|)
# 1 - 0 == 0    7.245      1.764   4.106 0.000285 ***