$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: pbristow_at_[hidden]
Date: 2007-09-23 13:29:18
Author: pbristow
Date: 2007-09-23 13:29:17 EDT (Sun, 23 Sep 2007)
New Revision: 39487
URL: http://svn.boost.org/trac/boost/changeset/39487
Log:
added code to make a list of CI for an alpha for a range of numbers of observations.
Text files modified: 
   sandbox/math_toolkit/libs/math/example/chi_square_std_dev_test.cpp |   247 +++++++++++++++++++++++++++++---------- 
   1 files changed, 183 insertions(+), 64 deletions(-)
Modified: sandbox/math_toolkit/libs/math/example/chi_square_std_dev_test.cpp
==============================================================================
--- sandbox/math_toolkit/libs/math/example/chi_square_std_dev_test.cpp	(original)
+++ sandbox/math_toolkit/libs/math/example/chi_square_std_dev_test.cpp	2007-09-23 13:29:17 EDT (Sun, 23 Sep 2007)
@@ -7,14 +7,18 @@
 // or copy at http://www.boost.org/LICENSE_1_0.txt)
 
 #include <iostream>
+using std::cout; using std::endl;
+using std::left; using std::fixed; using std::right; using std::scientific;
 #include <iomanip>
+using std::setw;
+using std::setprecision;
 #include <boost/math/distributions/chi_squared.hpp>
 
+
 void confidence_limits_on_std_deviation(
         double Sd,    // Sample Standard Deviation
         unsigned N)   // Sample size
 {
-   //
    // Calculate confidence intervals for the standard deviation.
    // For example if we set the confidence limit to
    // 0.95, we know that if we repeat the sampling
@@ -27,8 +31,10 @@
    // contains the true standard deviation or it does not.
    // See http://www.itl.nist.gov/div898/handbook/eda/section3/eda358.htm
 
-   using namespace std;
-   using namespace boost::math;
+  // using namespace boost::math;
+   using boost::math::chi_squared;
+   using boost::math::quantile;
+   using boost::math::complement;
 
    // Print out general info:
    cout <<
@@ -40,11 +46,9 @@
    cout << setw(40) << left << "Standard Deviation" << "=  " << Sd << "\n";
    //
    // Define a table of significance/risk levels:
-   //
    double alpha[] = { 0.5, 0.25, 0.1, 0.05, 0.01, 0.001, 0.0001, 0.00001 };
    //
    // Start by declaring the distribution we'll need:
-   //
    chi_squared dist(N - 1);
    //
    // Print table header:
@@ -56,7 +60,6 @@
            "_____________________________________________\n";
    //
    // Now print out the data for the table rows.
-   //
    for(unsigned i = 0; i < sizeof(alpha)/sizeof(alpha[0]); ++i)
    {
       // Confidence value:
@@ -69,7 +72,57 @@
       cout << fixed << setprecision(5) << setw(15) << right << upper_limit << endl;
    }
    cout << endl;
-}
+} // void confidence_limits_on_std_deviation
+
+void confidence_limits_on_std_deviation_alpha(
+        double Sd,    // Sample Standard Deviation
+        double alpha  // confidence 
+        )   
+{  // Calculate confidence intervals for the standard deviation.
+   // for the alpha parameter, for a range number of observations, 
+   // from a mere 2 up to a million.
+   // O. L. Davies, Statistical Methods in Research and Production, ISBN 0 05 002437 X,
+   // 4.33 Page 68, Table H, pp 452 459.
+
+   //   using namespace std;
+   // using namespace boost::math;
+   using boost::math::chi_squared;
+   using boost::math::quantile;
+   using boost::math::complement;
+
+   // Define a table of numbers of observations:
+   unsigned int obs[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 30, 40 , 50, 60, 100, 120, 1000, 10000, 50000, 100000, 1000000};
+
+   cout <<   // Print out heading:
+      "________________________________________________\n"
+      "2-Sided Confidence Limits For Standard Deviation\n"
+      "________________________________________________\n\n";
+   cout << setprecision(7);
+   cout << setw(40) << left << "Confidence level (two-sided) " << "=  " << alpha << "\n";
+   cout << setw(40) << left << "Standard Deviation" << "=  " << Sd << "\n";
+
+   cout << "\n\n"      // Print table header:
+            "_____________________________________________\n"
+           "Observations        Lower          Upper\n"
+           "                    Limit          Limit\n"
+           "_____________________________________________\n";
+    for(unsigned i = 0; i < sizeof(obs)/sizeof(obs[0]); ++i)
+   {
+     unsigned int N = obs[i]; // Observations
+     // Start by declaring the distribution with the appropriate :
+     chi_squared dist(N - 1);
+     
+     // Now print out the data for the table row.
+      cout << fixed << setprecision(3) << setw(10) << right << N;
+      // Calculate limits: (alpha /2 because it is a two-sided (upper and lower limit) test.
+      double lower_limit = sqrt((N - 1) * Sd * Sd / quantile(complement(dist, alpha / 2)));
+      double upper_limit = sqrt((N - 1) * Sd * Sd / quantile(dist, alpha / 2));
+      // Print Limits:
+      cout << fixed << setprecision(4) << setw(15) << right << lower_limit;
+      cout << fixed << setprecision(4) << setw(15) << right << upper_limit << endl;
+   }
+   cout << endl;
+}// void confidence_limits_on_std_deviation_alpha
 
 void chi_squared_test(
        double Sd,     // Sample std deviation
@@ -85,8 +138,11 @@
    // that any difference is not down to chance.
    // See http://www.itl.nist.gov/div898/handbook/eda/section3/eda358.htm
    //
-   using namespace std;
-   using namespace boost::math;
+   // using namespace boost::math;
+   using boost::math::chi_squared;
+   using boost::math::quantile;
+   using boost::math::complement;
+   using boost::math::cdf;
 
    // Print header:
    cout <<
@@ -145,21 +201,23 @@
    else
       cout << "REJECTED\n";
    cout << endl << endl;
-}
+} // void chi_squared_test
 
 void chi_squared_sample_sized(
         double diff,      // difference from variance to detect
         double variance)  // true variance
 {
    using namespace std;
-   using namespace boost::math;
+   // using boost::math;
+   using boost::math::chi_squared;
+   using boost::math::quantile;
+   using boost::math::complement;
+   using boost::math::cdf;
 
    try
    {
-
-   // Print out general info:
-   cout <<
-      "_____________________________________________________________\n"
+   cout <<   // Print out general info:
+     "_____________________________________________________________\n"
       "Estimated sample sizes required for various confidence levels\n"
       "_____________________________________________________________\n\n";
    cout << setprecision(5);
@@ -211,16 +269,10 @@
     std::cout <<
       "\n""Message from thrown exception was:\n   " << e.what() << std::endl;
   }
-}
-
-//Message from thrown exception was:  for alpha 0.5
-//   Error in function boost::math::tools::bracket_and_solve_root<double>:
-//Unable to bracket root, last nearest value was 1.2446030555722283e-058
-
+} // chi_squared_sample_sized
 
 int main()
 {
-   //
    // Run tests for Gear data
    // see http://www.itl.nist.gov/div898/handbook/eda/section3/eda3581.htm
    // Tests measurements of gear diameter.
@@ -242,21 +294,24 @@
    chi_squared_sample_sized(13.97 * 13.97 - 100, 100);
    chi_squared_sample_sized(55, 100);
    chi_squared_sample_sized(1, 100);
+
+   // List confidence interval multipliers for standard deviation
+   // for a range of numbers of observations from 2 to a million,
+   // and for a few alpha values, 0.1, 0.05, 0.01 for condfidences 90, 95, 99 %
+   confidence_limits_on_std_deviation_alpha(1., 0.1);
+   confidence_limits_on_std_deviation_alpha(1., 0.05);
+   confidence_limits_on_std_deviation_alpha(1., 0.01);
+
    return 0;
 }
 
 /*
 
-Output:
-
 ________________________________________________
 2-Sided Confidence Limits For Standard Deviation
 ________________________________________________
-
 Number of Observations                  =  100
 Standard Deviation                      =  0.006278908
-
-
 _____________________________________________
 Confidence          Lower          Upper
  Value (%)          Limit          Limit
@@ -269,45 +324,36 @@
     99.900        0.00507        0.00812
     99.990        0.00489        0.00855
     99.999        0.00474        0.00895
-
 ______________________________________________
 Chi Squared test for sample standard deviation
 ______________________________________________
-
 Number of Observations                                 =  100
 Sample Standard Deviation                              =  0.00628
 Expected True Standard Deviation                       =  0.10000
-
 Test Statistic                                         =  0.39030
 CDF of test statistic:                                 =  1.438e-099
 Upper Critical Value at alpha:                         =  1.232e+002
 Upper Critical Value at alpha/2:                       =  1.284e+002
 Lower Critical Value at alpha:                         =  7.705e+001
 Lower Critical Value at alpha/2:                       =  7.336e+001
-
 Results for Alternative Hypothesis and alpha           =  0.0500
-
 Alternative Hypothesis              Conclusion
 Standard Deviation != 0.100            NOT REJECTED
 Standard Deviation  < 0.100            NOT REJECTED
 Standard Deviation  > 0.100            REJECTED
-
-
 _____________________________________________________________
 Estimated sample sizes required for various confidence levels
 _____________________________________________________________
-
 True Variance                           =  0.10000
 Difference to detect                    =  0.09372
-
-
 _______________________________________________________________
 Confidence       Estimated          Estimated
  Value (%)      Sample Size        Sample Size
-                (lower one         (upper one
+                (lower one-         (upper one-
                  sided test)        sided test)
 _______________________________________________________________
     50.000               2               2
+    66.667               2               5
     75.000               2              10
     90.000               4              32
     95.000               5              52
@@ -315,15 +361,11 @@
     99.900              13             178
     99.990              18             257
     99.999              23             337
-
 ________________________________________________
 2-Sided Confidence Limits For Standard Deviation
 ________________________________________________
-
 Number of Observations                  =  10
 Standard Deviation                      =  13.9700000
-
-
 _____________________________________________
 Confidence          Lower          Upper
  Value (%)          Limit          Limit
@@ -336,45 +378,36 @@
     99.900        7.69466       42.51593
     99.990        7.04085       55.93352
     99.999        6.54517       73.00132
-
 ______________________________________________
 Chi Squared test for sample standard deviation
 ______________________________________________
-
 Number of Observations                                 =  10
 Sample Standard Deviation                              =  13.97000
 Expected True Standard Deviation                       =  10.00000
-
 Test Statistic                                         =  17.56448
 CDF of test statistic:                                 =  9.594e-001
 Upper Critical Value at alpha:                         =  1.692e+001
 Upper Critical Value at alpha/2:                       =  1.902e+001
 Lower Critical Value at alpha:                         =  3.325e+000
 Lower Critical Value at alpha/2:                       =  2.700e+000
-
 Results for Alternative Hypothesis and alpha           =  0.0500
-
 Alternative Hypothesis              Conclusion
 Standard Deviation != 10.000            REJECTED
 Standard Deviation  < 10.000            REJECTED
 Standard Deviation  > 10.000            NOT REJECTED
-
-
 _____________________________________________________________
 Estimated sample sizes required for various confidence levels
 _____________________________________________________________
-
 True Variance                           =  100.00000
 Difference to detect                    =  95.16090
-
-
 _______________________________________________________________
 Confidence       Estimated          Estimated
  Value (%)      Sample Size        Sample Size
-                (lower one         (upper one
+                (lower one-         (upper one-
                  sided test)        sided test)
 _______________________________________________________________
     50.000               2               2
+    66.667               2               5
     75.000               2              10
     90.000               4              32
     95.000               5              51
@@ -382,22 +415,19 @@
     99.900              11             174
     99.990              15             251
     99.999              20             330
-
 _____________________________________________________________
 Estimated sample sizes required for various confidence levels
 _____________________________________________________________
-
 True Variance                           =  100.00000
 Difference to detect                    =  55.00000
-
-
 _______________________________________________________________
 Confidence       Estimated          Estimated
  Value (%)      Sample Size        Sample Size
-                (lower one         (upper one
+                (lower one-         (upper one-
                  sided test)        sided test)
 _______________________________________________________________
     50.000               2               2
+    66.667               4              10
     75.000               8              21
     90.000              23              71
     95.000              36             115
@@ -405,22 +435,19 @@
     99.900             123             401
     99.990             177             580
     99.999             232             762
-
 _____________________________________________________________
 Estimated sample sizes required for various confidence levels
 _____________________________________________________________
-
 True Variance                           =  100.00000
 Difference to detect                    =  1.00000
-
-
 _______________________________________________________________
 Confidence       Estimated          Estimated
  Value (%)      Sample Size        Sample Size
-                (lower one         (upper one
+                (lower one-         (upper one-
                  sided test)        sided test)
 _______________________________________________________________
     50.000               2               2
+    66.667           14696           14993
     75.000           36033           36761
     90.000          130079          132707
     95.000          214283          218612
@@ -428,6 +455,98 @@
     99.900          756333          771612
     99.990         1095435         1117564
     99.999         1440608         1469711
-
+________________________________________________
+2-Sided Confidence Limits For Standard Deviation
+________________________________________________
+Confidence level (two-sided)            =  0.1000000
+Standard Deviation                      =  1.0000000
+_____________________________________________
+Observations        Lower          Upper
+                    Limit          Limit
+_____________________________________________
+         2         0.5102        15.9472
+         3         0.5778         4.4154
+         4         0.6196         2.9200
+         5         0.6493         2.3724
+         6         0.6720         2.0893
+         7         0.6903         1.9154
+         8         0.7054         1.7972
+         9         0.7183         1.7110
+        10         0.7293         1.6452
+        15         0.7688         1.4597
+        20         0.7939         1.3704
+        30         0.8255         1.2797
+        40         0.8454         1.2320
+        50         0.8594         1.2017
+        60         0.8701         1.1805
+       100         0.8963         1.1336
+       120         0.9045         1.1203
+      1000         0.9646         1.0383
+     10000         0.9885         1.0118
+     50000         0.9948         1.0052
+    100000         0.9963         1.0037
+   1000000         0.9988         1.0012
+________________________________________________
+2-Sided Confidence Limits For Standard Deviation
+________________________________________________
+Confidence level (two-sided)            =  0.0500000
+Standard Deviation                      =  1.0000000
+_____________________________________________
+Observations        Lower          Upper
+                    Limit          Limit
+_____________________________________________
+         2         0.4461        31.9102
+         3         0.5207         6.2847
+         4         0.5665         3.7285
+         5         0.5991         2.8736
+         6         0.6242         2.4526
+         7         0.6444         2.2021
+         8         0.6612         2.0353
+         9         0.6755         1.9158
+        10         0.6878         1.8256
+        15         0.7321         1.5771
+        20         0.7605         1.4606
+        30         0.7964         1.3443
+        40         0.8192         1.2840
+        50         0.8353         1.2461
+        60         0.8476         1.2197
+       100         0.8780         1.1617
+       120         0.8875         1.1454
+      1000         0.9580         1.0459
+     10000         0.9863         1.0141
+     50000         0.9938         1.0062
+    100000         0.9956         1.0044
+   1000000         0.9986         1.0014
+________________________________________________
+2-Sided Confidence Limits For Standard Deviation
+________________________________________________
+Confidence level (two-sided)            =  0.0100000
+Standard Deviation                      =  1.0000000
+_____________________________________________
+Observations        Lower          Upper
+                    Limit          Limit
+_____________________________________________
+         2         0.3562       159.5759
+         3         0.4344        14.1244
+         4         0.4834         6.4675
+         5         0.5188         4.3960
+         6         0.5464         3.4848
+         7         0.5688         2.9798
+         8         0.5875         2.6601
+         9         0.6036         2.4394
+        10         0.6177         2.2776
+        15         0.6686         1.8536
+        20         0.7018         1.6662
+        30         0.7444         1.4867
+        40         0.7718         1.3966
+        50         0.7914         1.3410
+        60         0.8065         1.3026
+       100         0.8440         1.2200
+       120         0.8558         1.1973
+      1000         0.9453         1.0609
+     10000         0.9821         1.0185
+     50000         0.9919         1.0082
+    100000         0.9943         1.0058
+   1000000         0.9982         1.0018
 */