1

数百から数千の列を含むデータのテーブルに対して、t 検定などの特定の統計を実行しようとしています。データは、比較している 2 つのグループの値が同じ列にあるようにフォーマットされています。

したがって、基本的に私の最初の試みは、次のようにカットアンドペーストすることでした。

NN <-read.delim("E:/output.txt")
View(NN)
attach(NN)

#output p-values of 100 t-tests 
sink(file="E:/ttest.txt", append=TRUE, split=FALSE)
t.test(Tree1[1:13],Tree1[14:34])$p.value
t.test(Tree2[1:13],Tree2[14:34])$p.value
t.test(Tree3[1:13],Tree3[14:34])$p.value

.... ... ... .

私のデータが増えるにつれて、これはますます非現実的になっています。これらの t 検定を各列を順番にループし、出力をファイルに保存する方法はありますか?

前もって感謝します。

4

3 に答える 3

6

lapply私は匿名関数であなたをそこに連れて行きます:

> test <- data.frame(a=1:100,b=101:200)
> lapply(test,function(x) t.test(x[1:50],x[51:100])$p.value)
$a
[1] 2.876776e-31

$b
[1] 2.876776e-31

私は良い練習のために自分の役割を果たさなければなりません。また、一度に 100 の t 検定を実行すると、タイプ 1 エラーやその他の悪い問題が発生する可能性があることに注意してください。p値を単独で抽出することも、おそらく非常に悪い動きです。

于 2013-01-11T05:39:52.583 に答える
2

これが賢明なアプローチなのか、それとも正しく機能するのかはわかりませんが、mapply次のようにインデックス付きの部分を試してください。

test <- data.frame(a=1:100,b=101:200)

testa <- test[1:50, ]
testb <- test[51:100, ]
t.test2 <- function(x, y) t.test(x, y)[["p.value"]]
mapply(t.test2, testa, testb)

編集: 比較できるように、thelatemail のデータを使用しました。彼の警告は当たっています。

于 2013-01-11T05:29:28.737 に答える
-3

すべての入力に感謝します。いくつかの説明があります。私は一度に何百もの t 検定を実行していますが、毎回独立したデータ セットを比較しています。したがって、たとえば、列 1 (Tree1) の行 1:50 の値は、同じ列の行 51:100 と 1 回だけ比較され、二度と使用されません。列 2 (Tree2) についても同様です。タイプ 1 エラーはまだ問題になるでしょうか? 私の見方では、基本的に、一度に 1 つずつ別々のデータ セットに対して t 検定を行っています。

そうは言っても、for ループでこれを行う方法を思いつきました。結果は、各列を個別に t 検定したときの結果に対応しています。

for (i in 1:100)

  print (t.test(mydata[1:50, i],mydata[51:100, i])$p.value)

end;

唯一の問題は、出力の前に常に [1] があることです。

于 2013-01-11T23:13:38.197 に答える