File Coverage

blib/lib/Statistics/Basic.pm
Criterion Covered Total %
statement 248 248 100.0
branch 39 58 67.2
condition n/a
subroutine 71 71 100.0
pod 11 11 100.0
total 369 388 95.1


line stmt bran cond sub pod time code
1              
2             package Statistics::Basic;
3              
4 65     65   32045 use strict;
  65         99  
  65         1468  
5 65     65   353 use warnings;
  65         100  
  65         1615  
6 65     65   318 use Carp;
  65         98  
  65         3453  
7              
8 65     65   24069 use Number::Format;
  65         478163  
  65         7006  
9              
10             our $VERSION = '1.6611';
11             our $fmt = new Number::Format;
12              
13             our( $NOFILL, $DEBUG, $IPRES, $TOLER, $UNBIAS );
14              
15             BEGIN {
16 65 50   65   353 $NOFILL = exists($ENV{NOFILL}) ? $ENV{NOFILL} : 0;
17 65 50       170 $DEBUG = exists($ENV{DEBUG_STATS_B}) ? $ENV{DEBUG_STATS_B} : 0;
18 65 50       649 $IPRES = exists($ENV{IPRES}) ? $ENV{IPRES} : 2;
19 65 50       996 $TOLER = $ENV{TOLER} if exists $ENV{TOLER};
20             }
21              
22 65     65   417 use base 'Exporter';
  65         620  
  65         16323  
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   165317 my @special = ();
40              
41 197         461 @_ = grep { m/^(ignore_env|nofill|debug|ipres|toler|unbias)(?:=([\d\.\-_]+))?\z/i
  20         143  
42 244 100       2042 ? do {push @special, [lc($1), $2]; 0} : 1 }
  20         85  
43             @_;
44              
45 197 100       769 if( grep {$_->[0] =~ m/ignore_env/} @special ) {
  20         150  
46 5         35 delete $ENV{TOLER};
47 5         12 $NOFILL = 0;
48 5         12 $DEBUG = 0;
49 5         9 $IPRES = 2;
50 5         16 $TOLER = undef;
51 5         12 $UNBIAS = 0;
52             }
53              
54 197         596 for( grep {$_->[0] !~ m/ignore_env/} @special ) {
  20         100  
55 15         41 my ($k, $v) = @$_;
56 15 100       750 $v = eval $v if defined $v; ## no critic
57              
58 15 100       107 if( lc($k) eq "ipres" ) {
    100          
59 3 100       15 $v = 2 unless defined($v);
60 3 50       12 croak "bad ipres value ($v)" unless $v >= 0;
61 3         12 $IPRES = $v;
62              
63             } elsif( lc($k) eq "toler" ) {
64 5 100       16 if( defined $v ) {
65 4 50       15 croak "bad toler value($v)" unless $v >= 0;
66 4         16 $TOLER = $v;
67              
68             } else {
69 1         4 $TOLER = undef;
70             }
71              
72             } else {
73 65     65   266 no strict 'refs'; ## no critic
  65         699  
  65         30717  
74 7 100       22 ${uc($k)} = defined($v) ? $v : 1; ## no critic
  7         34  
75             }
76             }
77              
78 197         395 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   16688 eval $pull or die "problem loading base modules: $@"; ## no critic
  65     65   685  
  65     65   1426  
  65     33   249  
  65     33   649  
  65     33   1077  
  65     33   14184  
  65     33   407  
  33     33   1014  
  33     33   15362  
  33     33   103  
  33     33   1193  
  33     33   14860  
  33     33   109  
  33     33   1132  
  33     33   483  
  33     33   51  
  33     33   883  
  33     33   562  
  33     33   55  
  33     33   703  
  33     33   145  
  33     33   64  
  33     33   701  
  33     33   152  
  33     33   44  
  33     33   707  
  33     33   13126  
  33     33   179  
  33     33   922  
  33     33   13019  
  33     33   98  
  33     33   1107  
  33     33   183  
  33     33   55  
  33     33   808  
  33     33   191  
  33     33   41  
  33     33   731  
  33     33   470  
  33     33   54  
  33     33   676  
  33     33   461  
  33     33   57  
  33     33   710  
  33     33   632  
  33     33   54  
  33     33   635  
  33     33   144  
  33     33   43  
  33         793  
  33         14485  
  33         243  
  33         1417  
  33         13116  
  33         73  
  33         996  
  33         13606  
  33         105  
  33         1105  
  33         201  
  33         59  
  33         866  
  33         155  
  33         41  
  33         649  
  33         148  
  33         38  
  33         741  
  33         142  
  33         53  
  33         643  
  33         165  
  33         48  
  33         692  
  33         698  
  33         50  
  33         724  
  33         191  
  33         46  
  33         821  
  33         169  
  33         79  
  33         804  
  33         179  
  33         48  
  33         832  
  33         14029  
  33         79  
  33         516  
  33         189  
  33         63  
  33         914  
  33         159  
  33         46  
  33         607  
  33         136  
  33         44  
  33         652  
  33         135  
  33         45  
  33         604  
  33         142  
  33         47  
  33         610  
  33         134  
  33         49  
  33         613  
  33         168  
  33         53  
  33         663  
  33         154  
  33         63  
  33         685  
  33         163  
  33         60  
  33         633  
  33         142  
  33         53  
  33         557  
  33         230  
  33         54  
  33         440  
  33         195  
  33         54  
  33         673  
  33         157  
  33         49  
  33         590  
  33         164  
  33         45  
  33         912  
  33         160  
  33         54  
  33         344  
  33         201  
  33         59  
  33         752  
  33         178  
  33         59  
  33         726  
  33         159  
  33         52  
  33         759  
  33         187  
  33         50  
  33         709  
  33         158  
  33         98  
  33         689  
  197         14509  
96              
97 197         95063 return __PACKAGE__->export_to_level(1, @_);
98             }
99              
100 12 50   12 1 27 sub computed { my $r = eval { Statistics::Basic::ComputedVector->new(@_) } or croak $@; return $r }
  12         110  
  12         38  
101              
102 18 50   18 1 11675 sub vector { my $r = eval { Statistics::Basic::Vector->new(@_) } or croak $@; return $r }
  18         173  
  18         57  
103 26 50   26 1 13172 sub mean { my $r = eval { Statistics::Basic::Mean->new(@_) } or croak $@; return $r }
  26         195  
  26         186  
104 10 50   10 1 20 sub median { my $r = eval { Statistics::Basic::Median->new(@_) } or croak $@; return $r }
  10         40  
  10         24  
105 2 50   2 1 4 sub mode { my $r = eval { Statistics::Basic::Mode->new(@_) } or croak $@; return $r }
  2         18  
  2         9  
106 2 50   2 1 8 sub variance { my $r = eval { Statistics::Basic::Variance->new(@_) } or croak $@; return $r }
  2         22  
  2         9  
107 14 50   14 1 34 sub stddev { my $r = eval { Statistics::Basic::StdDev->new(@_) } or croak $@; return $r }
  14         75  
  14         44  
108              
109 2 50   2 1 218 sub covariance { my $r = eval { Statistics::Basic::Covariance->new( $_[0], $_[1] ) } or croak $@; return $r }
  2         19  
  2         21  
110 6 50   6 1 23 sub correlation { my $r = eval { Statistics::Basic::Correlation->new( $_[0], $_[1] ) } or croak $@; return $r }
  6         62  
  6         37  
111 1 50   1 1 3 sub leastsquarefit { my $r = eval { Statistics::Basic::LeastSquareFit->new( $_[0], $_[1] ) } or croak $@; return $r }
  1         14  
  1         8  
112              
113             sub handle_missing_values {
114 2     2 1 10 my ($v1,$v2) = @_;
115              
116 2 50       4 my $v3 = eval { computed($v1) } or croak $@;
  2         9  
117 2 50       5 my $v4 = eval { computed($v2) } or croak $@;
  2         6  
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         16  
  13         44  
122 2         22 });
123              
124             $v4->set_filter(sub {
125 2     2   7 my @v = $v1->query;
126 2 100       7 map {$_[$_]} grep { defined $v[$_] and defined $_[$_] } 0 .. $#_;
  8         16  
  13         37  
127 2         14 });
128              
129 2         13 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;