TukeyHSD调整后的P值为0.0000000

时间:2013-05-09 20:20:16

标签: r anova

我刚刚进行了因子方差分析,然后进行了TukeyHSD后测试。我TukeyHSD输出中的一些调整后的P值为0.0000000。这些P值真的可以为零吗?或者这是一个舍入情况,我的真实P值可能是1e-17,它舍入为0.0000000

R中的TukeyHSD()函数是否有任何选项可以提供包含指数的输出P值?

以下是我输出的片段:

TukeyHSD(fit)

  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = lum ~ cells * treatment)

$`cells:treatment`
                    diff         lwr          upr     p adj
NULL:a-KR:a     -266.5833333 -337.887800 -195.2788663 0.0000000
WT:a-KR:a       -196.3333333 -267.637800 -125.0288663 0.0000000
KR:ar-KR:a        83.4166667   12.112200  154.7211337 0.0053485
NULL:ar-KR:a    -283.5000000 -354.804467 -212.1955330 0.0000000
WT:ar-KR:a      -196.7500000 -268.054467 -125.4455330 0.0000000
KR:e-KR:a       -219.0833333 -290.387800 -147.7788663 0.0000000
NULL:e-KR:a     -185.0833333 -256.387800 -113.7788663 0.0000000
WT:e-KR:a        -96.1666667 -167.471134  -24.8621996 0.0003216

1 个答案:

答案 0 :(得分:8)

编辑:请参阅以下有关Tukey p值分辨率的警告!!

dd <- data.frame(y=c(1:10,1001:1010),f=rep(c("A","B"),each=10))
fit <- aov(y~f,data=dd)

打印的p值为零:

(tt <- TukeyHSD(fit))
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = y ~ f, data = dd)
## 
## $f
##     diff      lwr      upr p adj
## B-A 1000 997.1553 1002.845     0

但是查看str()的(缩写)输出显示有更多信息:

str(tt)

## List of 1
##  $ f: num [1, 1:4] 1.00e+03 9.97e+02 1.00e+03 2.62e-14
##   ..- attr(*, "dimnames")=List of 2
## 

您可以自己提取值:

tt$f[,"p adj"]
## [1] 2.620126e-14

或者如评论中所述,print(tt,digits=15)将有效......

警告

我决定深入挖掘并注意挖掘TukeyHSD.aov()的代码,它依赖于ptukey(),在其“示例”部分中警告“精度可能不会超过2.62e-14大约8位“。特别是,一旦t统计量大于30,p值最大值(在zval <- 10^seq(1,6,length=100) pval <- ptukey(zval,2,18,lower. par(las=1,bty="l") plot(zval,pval,log="xy",type="l") 处最多?)

{{1}}

enter image description here

最重要的是,你无法区分这个小的p值。您可能需要重新考虑您的策略......