1

サンプルの大規模なデータセットを分析するために perl+R を使用しています。2 つのサンプルごとに、t 検定の p 値を計算します。現在、statistics::R モジュールを使用して perl から R に値をエクスポートし、t.test 関数を使用しています。ただし、このプロセスは非常に遅いです。同じ手順をより効率的な方法で実行する perl 関数を誰かが知っているかどうか疑問に思っていました。

ありがとう!

4

3 に答える 3

2

データの量、データセットのペアの数、そしておそらくあなたが書いたコードでさえ、あなたのコードが遅い理由を特定するのに役立つでしょう. たとえば、多数の小さなデータセットを R に送信すると時間がかかりますが、すべてのデータを一度に送信するだけで速度を上げることができます。

純粋な Perl ソリューションの場合、最初にテスト統計を計算する必要があります (これは簡単で、 Statistics::TTestたとえば . qtPerlですぐに利用できることを確認してください-T値をRに1つのブロックで最後に送信して、それらをp値に変換できます)。

于 2012-01-22T12:46:46.827 に答える
0

モジュールはStatistics::TTestp値を提供します。

use Statistics::TTest;

my @r1 = map { rand(10)   } 1..32;
my @r2 = map { rand(10)-2 } 1..32;

my $ttest = new Statistics::TTest;  
$ttest->load_data(\@r1,\@r2);  
say "p-value = prob > |T| = ", $ttest->{t_prob};

少し遊んでみると、これによって得られるp値はRから得られる値よりもわずかに低いことがわかります。Rは明らかに自由度を低下させることを行っていますが、統計に関する私の知識は、それが何をしているのかを説明するには不十分です。またはその理由。(上記の例では、差は約1%です。32ではなく320のフロートのサンプルを使用すると、差は50%以上になりますが、1e-12と1.5e-12の差になります。)正確なp値が必要な場合は、注意が必要です。

于 2012-11-28T20:57:22.723 に答える
0

PDL、特にPDL::Statsを試すこともできます。

于 2012-01-22T20:04:33.823 に答える