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