快速perl t测试功能

时间:2012-01-22 11:39:16

标签: r perl statistics hypothesis-test

我正在使用perl + R来分析大量样本数据集。对于每两个样本,我计算t检验p值。目前,我正在使用statistics :: R模块将值从perl导出到R,然后使用t.test函数。但是,这个过程非常缓慢。我想知道是否有人知道perl函数将以更有效的方式执行相同的过程。

谢谢!

3 个答案:

答案 0 :(得分:2)

数据量,数据集对的数量,甚至可能是您编写的代码,可能有助于我们确定代码缓慢的原因。例如,向R发送许多小数据集会很慢,但可以通过一次发送所有数据来加速。

对于纯Perl解决方案,首先需要计算测试统计量(这很简单,已经完成了 Statistics::TTest, 例如),然后将其转换为p值(你需要类似R的qt函数,但我不确定它在Perl中是否可用 - 你可以将T值发送给R,在一个块中,最后,将它们转换为p值)。

答案 1 :(得分:0)

您还可以尝试PDL,特别是PDL::Stats

答案 2 :(得分:0)

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%。如果使用320个浮点数而不是32个浮点数,则差值为50%甚至更多,但它是1e-12和1.5e-12之间的差异。)如果你需要精确的p值,你需要小心。