R中的Multtest包返回时没有正确调整p值
问题描述:
我正在尝试使用R包multtest来调整多个测试的p值列表。但是,multtest将仅返回一列与分析的p值列表等长的“1”字符列表。R中的Multtest包返回时没有正确调整p值
输入文件是一个文本文件,其中的pvalues被换行符分隔。该文件的段被转载如下:
0.182942602
0.333002877
0.282000206
0.161501682
0.161501682
我从Bioconductor的下载的multtest包(multtest_2.14.0),和上午中的R 64版本2.15.2运行它。有谁知道multtest和R 2.15.2之间是否存在兼容性问题?
我的代码:
library(multtest, verbose = FALSE)
table1 <- read.table("p-values.txt", header = FALSE, colClasses = "double")
table2 <-as.vector(as.double(table1[,1]))
results<-p.adjust(table2, method = c("holm", "hochberg", "hommel", "bonferroni", "BH", "BY", "fdr", "none"))
write.table(results, file = "output.txt")
答
这不是一个无错误这是正确的调整时,有可被认为p值的该载体内显著没有p值。
您的代码执行霍尔姆纠正(method
只接受一个参数,在这种情况下将使用"holm"
方法,即向量中的第一项)。霍尔姆方法将正确地返回所有的人在的情况下
min(p) * length(p) > 1
在这种情况下(使用本多假设测试框架),也有可以考虑显著的载体没有p值。
如果想看到山的详细信息,对于holm
方法的代码(直接从multtest包采取)是
i <- seq_len(lp)
o <- order(p)
ro <- order(o)
pmin(1, cummax((n - i + 1L) * p[o]))[ro]
其中p
是输入向量,并lp
和n
是矢量的长度。该表达式(n - i + 1L) * p[o]
表示“对于排序列表中的每个项目,取n+1
减去其索引,然后将其乘以值”。对于最小项目,即(n + 1 - 1) * min(p)
- >n * min(p)
。 cummax
表示累积最大值 - 这意味着后续项目都不会小于第一个值。并且pmin(1, ...)
意味着对于向量中的每个项目,如果项目大于1,则将该值设置为1(因为大约为1的p值无意义)。
这意味着,如果n * min(p)
大于一,则最小项的调整p值是1,这意味着每一个项目的调整p值必须是1
你肯定矢量1秒是不是正确的调整? p值的输入向量有多长,最小的是多少? (如果最小值大于'1/n',其中'n'是p值的数量,那么Bonferroni校正确实会导致1s的向量) – 2013-03-14 14:46:07
(此外,为什么要传递多个方法?它只需要一个方法的一个参数,所以在这种情况下它将使用第一个参数Holm)。 – 2013-03-14 14:56:10