[system] / trunk / pg / macros / PGstatisticsmacros.pl Repository:
ViewVC logotype

View of /trunk/pg/macros/PGstatisticsmacros.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1080 - (download) (as text) (annotate)
Mon Jun 9 17:49:36 2003 UTC (16 years, 7 months ago) by apizer
File size: 3122 byte(s)
remove unneccsary shebang lines

Arnie

    1 
    2 
    3 sub _PGstatisticsmacros_init {
    4   foreach my $t (@Distributions::EXPORT_OK) {
    5           *{$t} = *{"Distributions::$t"}
    6           }
    7         foreach my $t (@Regression::EXPORT_OK) {
    8                 *{$t} = *{"Regression::$t"}
    9                 }
   10 }
   11 
   12 =head1 Statistics Macros
   13 
   14 =head3 Normal distribution
   15 
   16 =pod
   17 
   18   Usage: normal_prob(a, b, mean=>0, deviation=>1);
   19 
   20 Computes the probability of x being in the interval (a,b) for normal distribution.
   21 The first two arguments are required. Use '-infty' for negative infinity, and 'infty' or '+infty' for positive infinity.
   22 The mean and deviation are optional, and are 0 and 1 respectively by default.
   23 Load PGnumericalmacros.pl in your problem if you use this method.
   24 
   25 =cut
   26 
   27 sub normal_prob {
   28         warn 'You must also load PGnumericalmacros to use PGstatisticsmacros' unless defined(&_PGnumericalmacros_init);
   29 
   30   my $a = shift;
   31         my $b = shift;
   32   my %options=@_;
   33 
   34   my $mean = $options{'mean'} if defined ($options{'mean'});
   35         $mean = 0 unless defined $mean;
   36 
   37   my $deviation = $options{'deviation'} if defined ($options{'deviation'});
   38         $deviation = 1 unless defined $deviation;
   39 
   40   if ($deviation <= 0) {
   41     warn 'Deviation must be a positive number.';
   42     return;
   43     }
   44 
   45         my $z_score_of_a;
   46   my $z_score_of_b;
   47 
   48   if ( $a eq '-infty' ) {
   49     $z_score_of_a = -6;
   50   } else {
   51     $z_score_of_a = ($a - $mean)/$deviation;
   52   }
   53 
   54         if (($b eq 'infty') or ($b eq '+infty')) {
   55     $z_score_of_b = 6;
   56   } else {
   57     $z_score_of_b = ($b - $mean)/$deviation;
   58   }
   59 
   60         my $function = sub { my $x=shift;
   61                              $E**(-$x**2/2)/sqrt(2*$PI);
   62                              };
   63 
   64         my $prob = romberg($function, $z_score_of_a, $z_score_of_b, 8);
   65         $prob;
   66 }
   67 
   68 =head3 "Inverse" of normal distribution
   69 
   70 =pod
   71 
   72   Usage: normal_distr(prob, mean=>0, deviation=>1);
   73 
   74 Computes the positive number b such that the probability of x being in the interval (0,b)
   75 is equal to the given probability (first argument). The mean and deviation are
   76 optional, and are 0 and 1 respectively by default.
   77 Caution: since students may use tables, they may only be able to provide the answer correct to 2 or 3
   78 decimal places. Use tolerance when evaluating answers.
   79 Load PGnumericalmacros.pl if you use this method.
   80 
   81 =cut
   82 
   83 sub normal_distr {
   84   warn 'You must also load PGnumericalmacros to use PGstatisticsmacros' unless defined(&_PGnumericalmacros_init);
   85 
   86         my $prob = shift;
   87         my %options=@_;
   88 
   89         my $mean = $options{'mean'} if defined ($options{'mean'});
   90         $mean = 0 unless defined $mean;
   91 
   92         my $deviation = $options{'deviation'} if defined ($options{'deviation'});
   93         $deviation = 1 unless defined $deviation;
   94 
   95         if ($deviation <= 0) {
   96                 warn 'Deviation must be a positive number.';
   97                 return;
   98                 }
   99 
  100         my $function = sub { my $x=shift;
  101                              $E**(-$x**2/2)/sqrt(2*$PI);
  102                              };
  103 
  104         my $z_score_of_b = inv_romberg($function, 0, $prob);
  105 
  106         my $b = $z_score_of_b * $deviation + $mean;
  107         $b;
  108 }
  109 
  110 ##########################################
  111 
  112 1;
  113 

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9