我正在使用perl+R分析一个大型样本数据集。对于每两个样本,我计算t-test p值。目前,我使用statistics::R模块将值从perl导出到R,然后使用t.test函数。然而,这个过程非常慢。我想知道是否有人知道perl函数将以更有效的方式执行相同的过程。
谢谢!
发布于 2012-01-22 20:46:47
数据量,数据集对的数量,甚至你写的代码可能会帮助我们找出为什么你的代码很慢。例如,将许多小数据集发送到R会很慢,但只需一次发送所有数据,就可以加快速度。
对于纯Perl语言解决方案,首先需要计算测试统计量(这很容易,例如,在Statistics::TTest中已经完成),然后将其转换为p值(您需要类似于R的qt函数,但我不确定它在Perl语言中是否可用--您可以在最后将T值发送到R,以将它们转换为p值)。
发布于 2012-01-23 04:04:34
您还可以尝试PDL,特别是PDL::Stats。
发布于 2012-11-29 04:57:23
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值,你需要小心。
https://stackoverflow.com/questions/8960767
复制相似问题