Fiddle with Eigen+FFT tests and add nonsymmetric eigenvalue example
[Math-GSL.git] / t / Statistics.t
blobdbbbc13fe069117103b44c220019c791f9130ad1
1 package Math::GSL::Statistics::Test;
2 use Math::GSL::Test qw/:all/;
3 use base q{Test::Class};
4 use Test::More;
5 use Math::GSL::Statistics qw/:all/;
6 use Math::GSL::Sort qw/:all/;
7 use Math::GSL qw/:all/;
8 use strict;
10 sub make_fixture : Test(setup) {
11     my $self = shift;
12     $self->{data} =   [
13         17, 18, 16, 18, 12,
14         20, 18, 20, 20, 22,
15         20, 10, 8, 12, 16,
16         16, 18, 20, 18, 21
17     ];
18     $self->{datab} = [
19         19, 20, 22, 24, 10,
20         25, 20, 22, 21, 23,
21         20, 10, 12, 14, 12,
22         20, 22, 24, 23, 17
23     ];
26 sub teardown : Test(teardown) {
29 sub GSL_STATS_MEAN : Tests {
30     ok_similar( gsl_stats_mean([2 .. 5], 1, 4), 3.5 );
33 sub GSL_STATS_VARIANCE : Tests {
34     ok_similar( gsl_stats_variance([2 .. 5], 1, 4), 5/3);
37 sub GSL_STATS_SD : Tests {
38     my $self = shift;
39     ok_similar( gsl_stats_sd($self->{data}, 1, 20)  , 3.79750610685209);
42 sub GSL_STATS_ABSDEV : Tests {
43     my $self = shift;
44     my $x = gsl_stats_absdev($self->{data},1, 20);
45     ok_similar($x, 2.9); 
48 sub GSL_STATS_SKEW : Tests {
49     my $self = shift;
50     my $x = gsl_stats_skew($self->{data}, 1, 20);
51     ok_similar($x, -0.909355923168064);
54 sub GSL_STATS_KURTOSIS : Tests {
55     my $self = shift;
56     my $x = gsl_stats_kurtosis($self->{data}, 1, 20);
57     ok_similar_relative($x, -0.233692524908094);
60 sub GSL_STATS_COVARIANCE : Tests {
61     my $self = shift;
62     my $x = gsl_stats_covariance($self->{data}, 1, $self->{datab}, 1, 20); 
63     ok_similar_relative($x, 14.5263157894737);
66 sub GSL_STATS_CORRELATION : Tests {
67     my $self = shift;
68     my $x = gsl_stats_correlation($self->{data}, 1, $self->{datab}, 1, 20);
69     ok_similar_relative($x, 0.793090350710101); 
72 sub GSL_STATS_PVARIANCE : Tests {
73     my $self = shift;
74     my $x = gsl_stats_pvariance($self->{data}, 1, 20, $self->{datab}, 1, 20); 
75     ok_similar_relative($x, 18.8421052631579);
78 sub GSL_STATS_TTEST : Tests {
79     my $self = shift;
80     my $x = gsl_stats_ttest($self->{data}, 1, 20, $self->{datab}, 1, 20); 
81     ok_similar_relative($x, -1.45701922702927);
84 sub GSL_STATS_MAX : Tests { 
85     my $self = shift;
86     my $x = gsl_stats_max($self->{data}, 1, 20); 
87     ok_similar_relative($x, 22);
90 sub GSL_STATS_MIN : Tests {
91     my $self = shift;
92     my $x = gsl_stats_min($self->{data}, 1, 20); 
93     ok_similar_relative($x, 8);
96 sub GSL_STATS_MINMAX : Tests {
97     my $self = shift;
98     my ($min, $max) = gsl_stats_minmax($self->{data}, 1, 20); 
99     ok_similar_relative($max, 22);
100     ok_similar_relative($min, 8);
103 sub GSL_STATS_MAX_INDEX : Tests {
104     my $self = shift;
105     my $x = gsl_stats_max_index($self->{data}, 1, 20); 
106     ok_similar_relative($x, 9);
109 sub GSL_STATS_MIN_INDEX : Tests {
110     my $self = shift;
111     my $x = gsl_stats_min_index($self->{data}, 1, 20); 
112     ok_similar_relative($x, 12);
115 sub GSL_STATS_MINMAX_INDEX : Tests {
116     my $self = shift;
117     my ($min, $max) = gsl_stats_minmax_index($self->{data}, 1, 20); 
118     ok_similar_relative($min, 12);
119     ok_similar_relative($max, 9);
122 sub GSL_STATS_MEDIAN_FROM_SORTED_DATA_EVEN : Tests {
123     my $self = shift;
124     my $sorted = gsl_sort($self->{data}, 1, 20);
125     my $x = gsl_stats_median_from_sorted_data($sorted, 1, 20);
126     ok_similar_relative($x, 18);
129 sub GSL_STATS_MEDIAN_FROM_SORTED_DATA_ODD : Tests {
130     my $self = shift;
131     my $sorted = gsl_sort($self->{data}, 1, 20);
132     my $x = gsl_stats_median_from_sorted_data($sorted, 1, 19);
133     ok_similar_relative($x, 18);
136 sub GSL_STATS_QUANTILE_FROM_SORTED_DATA_0 : Tests {
137     my $self = shift;
138     my $sorted = gsl_sort($self->{data}, 1, 20);
139     my $x = gsl_stats_quantile_from_sorted_data($sorted, 1, 20, 0);
140     ok_similar_relative($x, 8);
143 sub GSL_STATS_QUANTILE_FROM_SORTED_DATA_100 : Tests {
144     my $self = shift;
145     my $sorted = gsl_sort($self->{data}, 1, 20);
146     my $x = gsl_stats_quantile_from_sorted_data($sorted, 1, 20, 1);
147     ok_similar_relative($x, 22);
150 sub GSL_STATS_QUANTILE_FROM_SORTED_DATA_50_EVEN : Tests {
151     my $self = shift;
152     my $sorted = gsl_sort($self->{data}, 1, 20);
153     my $x = gsl_stats_quantile_from_sorted_data($sorted, 1, 20, 0.5);
154     ok_similar_relative($x, 18);
157 sub GSL_STATS_QUANTILE_FROM_SORTED_DATA_50_ODD : Tests {
158     my $self = shift;
159     my $sorted = gsl_sort($self->{data}, 1, 20);
160     my $x = gsl_stats_quantile_from_sorted_data($sorted, 1, 20, 0.5);
161     ok_similar_relative($x, 18);
164 sub GSL_STATS_LAG1_AUTOCORRELATION : Tests {
165     my $nacc3 = 1001 ;
166     my $i;
167     my $numacc3;
168     $numacc3->[0] = 1000000.2 ;
169     for ($i = 1 ; $i < 1000  ; $i += 2) {
170         $numacc3->[$i] = 1000000.1 ;
171         $numacc3->[$i+1] = 1000000.3 ; 
172     }
173     my $mean = gsl_stats_mean ($numacc3, 1, $nacc3);
174     my $sd = gsl_stats_sd ($numacc3, 1, $nacc3);
175     my $lag1 = gsl_stats_lag1_autocorrelation ($numacc3, 1, $nacc3);
177     my $expected_mean = 1000000.2;
178     my $expected_sd = 0.1;
179     my $expected_lag1 = -0.999;
181     ok_similar_relative($mean, $expected_mean);
182     ok_similar_relative($sd, $expected_sd);
183     ok_similar_relative($lag1, $expected_lag1);
186 sub GSL_STATS_WMEAN : Tests {
187     my $w = [4, 4, 2, 2];
188     my $data = [2, 3, 4, 5];
189     my $mean = gsl_stats_wmean($w, 1, $data, 1, 4);
190     ok_similar ($mean, 19/6);    
193 Test::Class->runtests;