1

R パッケージ multtest を使用して、複数のテスト用に p 値のリストを調整しようとしています。ただし、multtest は、分析された p 値のリストと同じ長さの「1」文字のリストのみを返します。

入力ファイルは、pvalues が改行文字で区切られたテキスト ファイルです。ファイルの一部を以下に示します。

0.182942602
0.333002877
0.282000206
0.161501682
0.161501682  

Bioconductor から multtest パッケージ (multtest_2.14.0) をダウンロードし、R バージョン x64 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")
4

1 に答える 1

1

これはエラーではありません。これは、p値のベクトル内に有意であると見なすことができるp値がない場合の正しい調整です。

コードはホルム補正を実行します(method引数は1つだけで、この場合は"holm"、ベクトルの最初の項目であるメソッドを使用します)。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で、は入力ベクトル、およびlpnベクトルの長さです。その式(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)が1より大きい場合、最小のアイテムの調整されたp値が1であることを意味します。つまり、すべてのアイテムの調整されたp値は1でなければなりません。

于 2013-03-14T15:04:40.643 に答える