サンプルの大規模なデータセットを分析するために perl+R を使用しています。2 つのサンプルごとに、t 検定の p 値を計算します。現在、statistics::R モジュールを使用して perl から R に値をエクスポートし、t.test 関数を使用しています。ただし、このプロセスは非常に遅いです。同じ手順をより効率的な方法で実行する perl 関数を誰かが知っているかどうか疑問に思っていました。
ありがとう!
サンプルの大規模なデータセットを分析するために perl+R を使用しています。2 つのサンプルごとに、t 検定の p 値を計算します。現在、statistics::R モジュールを使用して perl から R に値をエクスポートし、t.test 関数を使用しています。ただし、このプロセスは非常に遅いです。同じ手順をより効率的な方法で実行する perl 関数を誰かが知っているかどうか疑問に思っていました。
ありがとう!
データの量、データセットのペアの数、そしておそらくあなたが書いたコードでさえ、あなたのコードが遅い理由を特定するのに役立つでしょう. たとえば、多数の小さなデータセットを R に送信すると時間がかかりますが、すべてのデータを一度に送信するだけで速度を上げることができます。
純粋な Perl ソリューションの場合、最初にテスト統計を計算する必要があります (これは簡単で、
Statistics::TTest
たとえば . qt
Perlですぐに利用できることを確認してください-T値をRに1つのブロックで最後に送信して、それらをp値に変換できます)。
モジュールはStatistics::TTest
p値を提供します。
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値が必要な場合は、注意が必要です。
PDL、特にPDL::Statsを試すこともできます。