pointStats.pl

From GM-RKB
Jump to navigation Jump to search

pointStats.pl is a Perl-based Point Estimation System.



References

##############################################
# pointStat.pl (v1.0) - Calculate some point statistics.
# return results in a hash {Average}{Min}{Max}{Median}{SquareSum}{StdDev}
# References: http://szabgab.com/talks/fundamentals_of_perl/solution-median.html

sub pointStats(@) {

   my $debug=0 ;
   die "ERROR: No values were given\n" if (not defined @_) ;

   my $cardinality = @_ ;

   my $sum = 0;
   foreach my $v (@_) {$sum += $v}
 
   my $average = $sum / $cardinality ;
   print "DEBUG:  $average = $sum / @_\n" if $debug>=2 ;
 
   my @Sorted = sort { $a <=> $b } @_ ;
   my $min = $Sorted[0] ;
   my $max = $Sorted[$#Sorted] ;

   my $median = @Sorted % 2  ?  $Sorted[(@Sorted-1)/2]  :  ($Sorted[@Sorted/2-1]+$Sorted[@Sorted/2])/2 ;
 
   my $sqtotal = 0 ;
   foreach my $v (@Sorted) { $sqtotal += ($average-$v) ** 2 }
   my $stddev = ($sqtotal / $cardinality) ** 0.5 ;
 
   my %Result ;
   $Result{Cardinality} = $cardinality ;
   $Result{Sum}         = $sum ;
   $Result{Average}     = $average ;
   $Result{Min}         = $min ;
   $Result{Max}         = $max ;
   $Result{Median}      = $median ;
   $Result{SquareSum}   = $sqtotal ;
   $Result{StdDev}      = $stddev ;

   return %Result
}