1

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

谢谢!

4

3 回答 3

2

数据量、数据集对的数量,甚至您编写的代码可能会帮助我们确定您的代码运行缓慢的原因。例如,将许多小型数据集发送到 R 会很慢,但可以通过一次发送所有数据来加快速度。

对于纯 Perl 解决方案,您首先需要计算测试统计量( Statistics::TTest例如,这很容易,并且已经在 中完成),然后将其转换为 p 值(您需要类似 R 的qt函数,但我不是确保它在 Perl 中很容易获得——您可以在一个块中将 T 值发送到 R,最后将它们转换为 p 值)。

于 2012-01-22T12:46:46.827 回答
0

您也可以尝试PDL,尤其是PDL::Stats

于 2012-01-22T20:04:33.823 回答
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 值,您需要小心。

于 2012-11-28T20:57:22.723 回答