быстрая Perl T-Test функция - PullRequest
       26

быстрая Perl T-Test функция

1 голос
/ 22 января 2012

Я использую perl + R для анализа большого набора данных образцов.Для каждых двух образцов я вычисляю p-значение t-критерия.В настоящее время я использую модуль statistics :: R для экспорта значений из perl в R, а затем использую функцию t.test.Однако этот процесс очень медленный.Мне было интересно, знает ли кто-нибудь Perl-функцию, которая будет выполнять ту же процедуру более эффективным способом.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 22 января 2012

Объем данных, количество пар наборов данных и, возможно, даже написанный вами код, вероятно, помогут нам определить, почему ваш код работает медленно.Например, отправка множества небольших наборов данных в R будет медленной, но, вероятно, ее можно ускорить, просто отправив все данные сразу.

Для чистого решения на Perl сначала необходимо вычислить статистику теста (котораялегко, и уже сделано в Statistics::TTest, например), а затем преобразовать его в p-значение (вам нужно что-то вроде функции R qt, но я не уверен, что это легкодоступно в Perl - вы можете отправить T-значения в R, в конце одного блока, чтобы преобразовать их в p-значения).

0 голосов
/ 29 ноября 2012

Модуль 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, вам нужно позаботиться.

0 голосов
/ 23 января 2012

Вы также можете попробовать PDL , в частности PDL :: Stats .

...