package Statistics::DependantTTest;
use strict;
use Carp;
use vars qw($VERSION);
use Statistics::PointEstimation;
no strict 'refs';
$VERSION='0.03';
##############
sub new
{
my $proto = shift;
my $class = ref($proto) || $proto;
my $self= {};
$self->{sample_data} = undef;
$self->{s} = undef;
bless($self,$class);
return $self;
}
##############
##############
sub load_data {
my $self = shift;
my $sample_name = shift;
my (@sample_data)=@_;
my $s= new Statistics::PointEstimation;
$s->add_data(\@sample_data);
$self->{sample_data}->{$sample_name}=\@sample_data;
$self->{s}->{$sample_name}=$s;
return $self;
} # end sub load_data
##############
##############
sub perform_t_test {
my $self=shift;
my $first_sample_name = shift;
my $second_sample_name = shift;
my $s1=$self->{s}->{$first_sample_name};
my $s2=$self->{s}->{$second_sample_name};
if(@{$self->{sample_data}->{$first_sample_name}} != @{$self->{sample_data}->{$second_sample_name}})
{
croak "The two results sets are of different length.\n For the paired T-test, the two results must be from two identical sets of subjects tested in a reference and test condition.\n";
}
my $s = new Statistics::PointEstimation;
my @sample_difference;
my $count=0;
while ($count < @{$self->{sample_data}->{$first_sample_name}})
{
$sample_difference[$count] = ${$self->{sample_data}->{$first_sample_name}}[$count] - ${$self->{sample_data}->{$second_sample_name}}[$count];
$count++;
} # end while
$s->add_data(\@sample_difference);
my $t_value = $s->t_statistic();
my $deg_freedom = scalar @{$self->{sample_data}->{$first_sample_name}} - 1;
return ($t_value, $deg_freedom );
} # end sub perform_t_test
##############
1;
__END__
=head1 NAME
Statistics::DependantTTest - Perl module to perform Student's dependant or paired T-test on 2 paired samples.
=head1 SYNOPSIS
use Statistics::DependantTTest;
use Statistics::Distributions;
my @before_values=('5','5','6','7','7');
my @after_values=('5','6','6.5','6.5','7.5');
my $t_test = new DependantTTest;
$t_test->load_data('before',@before_values);
$t_test->load_data('after',@after_values);
my ($t_value,$deg_freedom) = $t_test->perform_t_test('before','after');
my ($p_value) = Statistics::Distributions::tprob ($deg_freedom,$t_value);
=head1 DESCRIPTION
This is the statistical T-Test module to compare 2 paired data sets. It takes 2 arrays of values and will return the t value and degrees of freedom in order to test the null hypothesis.
The t values and degrees of freedom may be correlated to a p value using the Statistics::Distributions module.
=head1 AUTHOR
Martin Lee, Star Technology Group (mlee@startechgroup.co.uk)
=head1 SEE ALSO
Statistics::Distributions Statistics::TTest
=cut