• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright John Maddock 2006
2 // Copyright Paul A. Bristow 2010
3 
4 // Use, modification and distribution are subject to the
5 // Boost Software License, Version 1.0.
6 // (See accompanying file LICENSE_1_0.txt
7 // or copy at http://www.boost.org/LICENSE_1_0.txt)
8 
9 #ifdef _MSC_VER
10 #  pragma warning(disable: 4512) // assignment operator could not be generated.
11 #  pragma warning(disable: 4510) // default constructor could not be generated.
12 #  pragma warning(disable: 4610) // can never be instantiated - user defined constructor required.
13 #endif
14 
15 #include <iostream>
16 using std::cout; using std::endl;
17 #include <iomanip>
18 using std::fixed; using std::left; using std::right; using std::right; using std::setw;
19 using std::setprecision;
20 
21 #include <boost/math/distributions/binomial.hpp>
22 
confidence_limits_on_frequency(unsigned trials,unsigned successes)23 void confidence_limits_on_frequency(unsigned trials, unsigned successes)
24 {
25    //
26    // trials = Total number of trials.
27    // successes = Total number of observed successes.
28    //
29    // Calculate confidence limits for an observed
30    // frequency of occurrence that follows a binomial distribution.
31    //
32    //using namespace std; // Avoid
33    // using namespace boost::math; // potential name ambiguity with std <random>
34    using boost::math::binomial_distribution;
35 
36    // Print out general info:
37    cout <<
38       "___________________________________________\n"
39       "2-Sided Confidence Limits For Success Ratio\n"
40       "___________________________________________\n\n";
41    cout << setprecision(7);
42    cout << setw(40) << left << "Number of Observations" << "=  " << trials << "\n";
43    cout << setw(40) << left << "Number of successes" << "=  " << successes << "\n";
44    cout << setw(40) << left << "Sample frequency of occurrence" << "=  " << double(successes) / trials << "\n";
45    //
46    // Define a table of significance levels:
47    //
48    double alpha[] = { 0.5, 0.25, 0.1, 0.05, 0.01, 0.001, 0.0001, 0.00001 };
49    //
50    // Print table header:
51    //
52    cout << "\n\n"
53            "_______________________________________________________________________\n"
54            "Confidence        Lower CP       Upper CP       Lower JP       Upper JP\n"
55            " Value (%)        Limit          Limit          Limit          Limit\n"
56            "_______________________________________________________________________\n";
57    //
58    // Now print out the data for the table rows.
59    //
60    for(unsigned i = 0; i < sizeof(alpha)/sizeof(alpha[0]); ++i)
61    {
62       // Confidence value:
63       cout << fixed << setprecision(3) << setw(10) << right << 100 * (1-alpha[i]);
64       // Calculate Clopper Pearson bounds:
65       double l = binomial_distribution<>::find_lower_bound_on_p(trials, successes, alpha[i]/2);
66       double u = binomial_distribution<>::find_upper_bound_on_p(trials, successes, alpha[i]/2);
67       // Print Clopper Pearson Limits:
68       cout << fixed << setprecision(5) << setw(15) << right << l;
69       cout << fixed << setprecision(5) << setw(15) << right << u;
70       // Calculate Jeffreys Prior Bounds:
71       l = binomial_distribution<>::find_lower_bound_on_p(trials, successes, alpha[i]/2, binomial_distribution<>::jeffreys_prior_interval);
72       u = binomial_distribution<>::find_upper_bound_on_p(trials, successes, alpha[i]/2, binomial_distribution<>::jeffreys_prior_interval);
73       // Print Jeffreys Prior Limits:
74       cout << fixed << setprecision(5) << setw(15) << right << l;
75       cout << fixed << setprecision(5) << setw(15) << right << u << std::endl;
76    }
77    cout << endl;
78 } // void confidence_limits_on_frequency()
79 
main()80 int main()
81 {
82    confidence_limits_on_frequency(20, 4);
83    confidence_limits_on_frequency(200, 40);
84    confidence_limits_on_frequency(2000, 400);
85 
86    return 0;
87 } // int main()
88 
89 /*
90 
91 ------ Build started: Project: binomial_confidence_limits, Configuration: Debug Win32 ------
92 Compiling...
93 binomial_confidence_limits.cpp
94 Linking...
95 Autorun "i:\boost-06-05-03-1300\libs\math\test\Math_test\debug\binomial_confidence_limits.exe"
96 ___________________________________________
97 2-Sided Confidence Limits For Success Ratio
98 ___________________________________________
99 
100 Number of Observations                  =  20
101 Number of successes                     =  4
102 Sample frequency of occurrence          =  0.2
103 
104 
105 _______________________________________________________________________
106 Confidence        Lower CP       Upper CP       Lower JP       Upper JP
107  Value (%)        Limit          Limit          Limit          Limit
108 _______________________________________________________________________
109     50.000        0.12840        0.29588        0.14974        0.26916
110     75.000        0.09775        0.34633        0.11653        0.31861
111     90.000        0.07135        0.40103        0.08734        0.37274
112     95.000        0.05733        0.43661        0.07152        0.40823
113     99.000        0.03576        0.50661        0.04655        0.47859
114     99.900        0.01905        0.58632        0.02634        0.55960
115     99.990        0.01042        0.64997        0.01530        0.62495
116     99.999        0.00577        0.70216        0.00901        0.67897
117 
118 ___________________________________________
119 2-Sided Confidence Limits For Success Ratio
120 ___________________________________________
121 
122 Number of Observations                  =  200
123 Number of successes                     =  40
124 Sample frequency of occurrence          =  0.2000000
125 
126 
127 _______________________________________________________________________
128 Confidence        Lower CP       Upper CP       Lower JP       Upper JP
129  Value (%)        Limit          Limit          Limit          Limit
130 _______________________________________________________________________
131     50.000        0.17949        0.22259        0.18190        0.22001
132     75.000        0.16701        0.23693        0.16934        0.23429
133     90.000        0.15455        0.25225        0.15681        0.24956
134     95.000        0.14689        0.26223        0.14910        0.25951
135     99.000        0.13257        0.28218        0.13468        0.27940
136     99.900        0.11703        0.30601        0.11902        0.30318
137     99.990        0.10489        0.32652        0.10677        0.32366
138     99.999        0.09492        0.34485        0.09670        0.34197
139 
140 ___________________________________________
141 2-Sided Confidence Limits For Success Ratio
142 ___________________________________________
143 
144 Number of Observations                  =  2000
145 Number of successes                     =  400
146 Sample frequency of occurrence          =  0.2000000
147 
148 
149 _______________________________________________________________________
150 Confidence        Lower CP       Upper CP       Lower JP       Upper JP
151  Value (%)        Limit          Limit          Limit          Limit
152 _______________________________________________________________________
153     50.000        0.19382        0.20638        0.19406        0.20613
154     75.000        0.18965        0.21072        0.18990        0.21047
155     90.000        0.18537        0.21528        0.18561        0.21503
156     95.000        0.18267        0.21821        0.18291        0.21796
157     99.000        0.17745        0.22400        0.17769        0.22374
158     99.900        0.17150        0.23079        0.17173        0.23053
159     99.990        0.16658        0.23657        0.16681        0.23631
160     99.999        0.16233        0.24169        0.16256        0.24143
161 
162 */
163 
164 
165 
166