[system] / trunk / webwork / system / courseScripts / PGstatisticsmacros.pl Repository: Repository Listing bbplugincoursesdistsnplrochestersystemwww

# View of /trunk/webwork/system/courseScripts/PGstatisticsmacros.pl

Mon Jul 2 19:04:34 2001 UTC (11 years, 11 months ago) by maria
File size: 3200 byte(s)
```added Regression.pm
```

```    1 #!/usr/local/bin/webwork-perl
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
13
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.
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);
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
```