File Coverage

blib/lib/Statistics/Basic.pm
Criterion Covered Total %
statement 248 248 100.0
branch 40 58 68.9
condition n/a
subroutine 71 71 100.0
pod 11 11 100.0
total 370 388 95.3


line stmt bran cond sub pod time code
1              
2             package Statistics::Basic;
3              
4 65     65   162326 use strict;
  65         112  
  65         2088  
5 65     65   347 use warnings;
  65         98  
  65         1879  
6 65     65   310 use Carp;
  65         92  
  65         2875  
7              
8 65     65   23794 use Number::Format;
  65         486385  
  65         7820  
9              
10             our $VERSION = '1.6609';
11             our $fmt = new Number::Format;
12              
13             our( $NOFILL, $DEBUG, $IPRES, $TOLER, $UNBIAS );
14              
15             BEGIN {
16 65 50   65   350 $NOFILL = exists($ENV{NOFILL}) ? $ENV{NOFILL} : 0;
17 65 50       140 $DEBUG = exists($ENV{DEBUG_STATS_B}) ? $ENV{DEBUG_STATS_B} : 0;
18 65 50       752 $IPRES = exists($ENV{IPRES}) ? $ENV{IPRES} : 2;
19 65 100       986 $TOLER = $ENV{TOLER} if exists $ENV{TOLER};
20             }
21              
22 65     65   383 use base 'Exporter';
  65         724  
  65         16652  
23              
24             our @EXPORT_OK = (qw(
25             vector computed
26             mean average avg
27             median
28             mode
29             variance var
30             stddev
31             covariance cov
32             correlation cor corr
33             leastsquarefit LSF lsf
34             handle_missing_values handle_missing
35             ));
36             our %EXPORT_TAGS = ( all => \@EXPORT_OK );
37              
38             sub import {
39 197     197   552 my @special = ();
40              
41 197         466 @_ = grep { m/^(ignore_env|nofill|debug|ipres|toler|unbias)(?:=([\d\.\-_]+))?\z/i
  20         204  
42 244 100       2272 ? do {push @special, [lc($1), $2]; 0} : 1 }
  20         78  
43             @_;
44              
45 197 100       668 if( grep {$_->[0] =~ m/ignore_env/} @special ) {
  20         112  
46 5         46 delete $ENV{TOLER};
47 5         10 $NOFILL = 0;
48 5         8 $DEBUG = 0;
49 5         7 $IPRES = 2;
50 5         8 $TOLER = undef;
51 5         11 $UNBIAS = 0;
52             }
53              
54 197         527 for( grep {$_->[0] !~ m/ignore_env/} @special ) {
  20         80  
55 15         25 my ($k, $v) = @$_;
56 15 100       841 $v = eval $v if defined $v; ## no critic
57              
58 15 100       85 if( lc($k) eq "ipres" ) {
    100          
59 3 100       12 $v = 2 unless defined($v);
60 3 50       9 croak "bad ipres value ($v)" unless $v >= 0;
61 3         11 $IPRES = $v;
62              
63             } elsif( lc($k) eq "toler" ) {
64 5 100       11 if( defined $v ) {
65 4 50       19 croak "bad toler value($v)" unless $v >= 0;
66 4         11 $TOLER = $v;
67              
68             } else {
69 1         2 $TOLER = undef;
70             }
71              
72             } else {
73 65     65   265 no strict 'refs'; ## no critic
  65         671  
  65         32531  
74 7 100       21 ${uc($k)} = defined($v) ? $v : 1; ## no critic
  7         29  
75             }
76             }
77              
78 197         346 my $pull = q {
79              
80             use Statistics::Basic::Covariance;
81             use Statistics::Basic::Correlation;
82             use Statistics::Basic::LeastSquareFit;
83             use Statistics::Basic::Mean;
84             use Statistics::Basic::Median;
85             use Statistics::Basic::Mode;
86             use Statistics::Basic::StdDev;
87             use Statistics::Basic::Variance;
88             use Statistics::Basic::Vector;
89             use Statistics::Basic::ComputedVector;
90              
91             1;
92              
93             };
94              
95 65 50   65   20172 eval $pull or die "problem loading base modules: $@"; ## no critic
  65     65   691  
  65     65   1263  
  65     33   226  
  65     33   597  
  65     33   1154  
  65     33   14107  
  65     33   389  
  33     33   2227  
  33     33   15135  
  33     33   95  
  33     33   1193  
  33     33   14640  
  33     33   95  
  33     33   1011  
  33     33   465  
  33     33   45  
  33     33   921  
  33     33   477  
  33     33   44  
  33     33   631  
  33     33   194  
  33     33   46  
  33     33   627  
  33     33   131  
  33     33   69  
  33     33   744  
  33     33   13227  
  33     33   67  
  33     33   905  
  33     33   13151  
  33     33   98  
  33     33   985  
  33     33   159  
  33     33   41  
  33     33   748  
  33     33   139  
  33     33   36  
  33     33   581  
  33     33   478  
  33     33   38  
  33     33   577  
  33     33   433  
  33     33   42  
  33     33   637  
  33     33   475  
  33     33   44  
  33     33   561  
  33     33   118  
  33     33   57  
  33         742  
  33         12243  
  33         231  
  33         1205  
  33         12099  
  33         65  
  33         970  
  33         13760  
  33         153  
  33         1182  
  33         238  
  33         70  
  33         1034  
  33         189  
  33         39  
  33         824  
  33         231  
  33         47  
  33         667  
  33         139  
  33         50  
  33         760  
  33         139  
  33         39  
  33         580  
  33         464  
  33         44  
  33         644  
  33         142  
  33         43  
  33         652  
  33         135  
  33         59  
  33         580  
  33         126  
  33         43  
  33         793  
  33         14066  
  33         82  
  33         516  
  33         190  
  33         56  
  33         879  
  33         213  
  33         43  
  33         758  
  33         144  
  33         52  
  33         761  
  33         139  
  33         40  
  33         626  
  33         132  
  33         43  
  33         583  
  33         168  
  33         45  
  33         604  
  33         136  
  33         43  
  33         628  
  33         152  
  33         42  
  33         568  
  33         143  
  33         55  
  33         656  
  33         141  
  33         45  
  33         524  
  33         218  
  33         55  
  33         473  
  33         190  
  33         61  
  33         608  
  33         146  
  33         50  
  33         542  
  33         143  
  33         45  
  33         508  
  33         155  
  33         42  
  33         306  
  33         249  
  33         54  
  33         633  
  33         149  
  33         55  
  33         633  
  33         140  
  33         52  
  33         684  
  33         140  
  33         47  
  33         703  
  33         157  
  33         100  
  33         690  
  197         14911  
96              
97 197         95892 return __PACKAGE__->export_to_level(1, @_);
98             }
99              
100 12 50   12 1 32 sub computed { my $r = eval { Statistics::Basic::ComputedVector->new(@_) } or croak $@; return $r }
  12         77  
  12         50  
101              
102 18 50   18 1 5920 sub vector { my $r = eval { Statistics::Basic::Vector->new(@_) } or croak $@; return $r }
  18         191  
  18         56  
103 26 50   26 1 5490 sub mean { my $r = eval { Statistics::Basic::Mean->new(@_) } or croak $@; return $r }
  26         198  
  26         187  
104 10 50   10 1 20 sub median { my $r = eval { Statistics::Basic::Median->new(@_) } or croak $@; return $r }
  10         38  
  10         28  
105 2 50   2 1 4 sub mode { my $r = eval { Statistics::Basic::Mode->new(@_) } or croak $@; return $r }
  2         14  
  2         9  
106 2 50   2 1 5 sub variance { my $r = eval { Statistics::Basic::Variance->new(@_) } or croak $@; return $r }
  2         10  
  2         7  
107 14 50   14 1 34 sub stddev { my $r = eval { Statistics::Basic::StdDev->new(@_) } or croak $@; return $r }
  14         80  
  14         49  
108              
109 2 50   2 1 41 sub covariance { my $r = eval { Statistics::Basic::Covariance->new( $_[0], $_[1] ) } or croak $@; return $r }
  2         27  
  2         10  
110 6 50   6 1 23 sub correlation { my $r = eval { Statistics::Basic::Correlation->new( $_[0], $_[1] ) } or croak $@; return $r }
  6         53  
  6         23  
111 1 50   1 1 2 sub leastsquarefit { my $r = eval { Statistics::Basic::LeastSquareFit->new( $_[0], $_[1] ) } or croak $@; return $r }
  1         16  
  1         5  
112              
113             sub handle_missing_values {
114 2     2 1 9 my ($v1,$v2) = @_;
115              
116 2 50       4 my $v3 = eval { computed($v1) } or croak $@;
  2         7  
117 2 50       6 my $v4 = eval { computed($v2) } or croak $@;
  2         13  
118              
119             $v3->set_filter(sub {
120 2     2   5 my @v = $v2->query;
121 2 100       8 map {$_[$_]} grep { defined $v[$_] and defined $_[$_] } 0 .. $#_;
  8         19  
  13         48  
122 2         17 });
123              
124             $v4->set_filter(sub {
125 2     2   9 my @v = $v1->query;
126 2 100       8 map {$_[$_]} grep { defined $v[$_] and defined $_[$_] } 0 .. $#_;
  8         25  
  13         63  
127 2         13 });
128              
129 2         6 return ($v3,$v4);
130             }
131             *handle_missing = \&handle_missing_values;
132              
133             *average = *mean;
134             *avg = *mean;
135             *var = *variance;
136              
137             *cov = *covariance;
138             *cor = *correlation;
139             *corr = *correlation;
140             *lsf = *leastsquarefit;
141             *LSF = *leastsquarefit;
142              
143             1;