| // Copyright John Maddock 2006 |
| // Copyright Paul A. Bristow 2010 |
| |
| // Use, modification and distribution are subject to the |
| // Boost Software License, Version 1.0. |
| // (See accompanying file LICENSE_1_0.txt |
| // or copy at http://www.boost.org/LICENSE_1_0.txt) |
| |
| #ifdef _MSC_VER |
| # pragma warning(disable: 4512) // assignment operator could not be generated. |
| # pragma warning(disable: 4510) // default constructor could not be generated. |
| # pragma warning(disable: 4610) // can never be instantiated - user defined constructor required. |
| #endif |
| |
| #include <iostream> |
| using std::cout; using std::endl; |
| #include <iomanip> |
| using std::fixed; using std::left; using std::right; using std::right; using std::setw; |
| using std::setprecision; |
| |
| #include <boost/math/distributions/binomial.hpp> |
| |
| void find_max_sample_size(double p, unsigned successes) |
| { |
| // |
| // p = success ratio. |
| // successes = Total number of observed successes. |
| // |
| // Calculate how many trials we can have to ensure the |
| // maximum number of successes does not exceed "successes". |
| // A typical use would be failure analysis, where you want |
| // zero or fewer "successes" with some probability. |
| // |
| // using namespace boost::math; |
| // Avoid potential binomial_distribution name ambiguity with std <random> |
| using boost::math::binomial_distribution; |
| |
| // Print out general info: |
| cout << |
| "________________________\n" |
| "Maximum Number of Trials\n" |
| "________________________\n\n"; |
| cout << setprecision(7); |
| cout << setw(40) << left << "Success ratio" << "= " << p << "\n"; |
| cout << setw(40) << left << "Maximum Number of \"successes\" permitted" << "= " << successes << "\n"; |
| // |
| // Define a table of confidence intervals: |
| // |
| double alpha[] = { 0.5, 0.25, 0.1, 0.05, 0.01, 0.001, 0.0001, 0.00001 }; |
| // |
| // Print table header: |
| // |
| cout << "\n\n" |
| "____________________________\n" |
| "Confidence Max Number\n" |
| " Value (%) Of Trials \n" |
| "____________________________\n"; |
| // |
| // Now print out the data for the table rows. |
| // |
| for(unsigned i = 0; i < sizeof(alpha)/sizeof(alpha[0]); ++i) |
| { |
| // Confidence value: |
| cout << fixed << setprecision(3) << setw(10) << right << 100 * (1-alpha[i]); |
| // calculate trials: |
| double t = binomial_distribution<>::find_maximum_number_of_trials(successes, p, alpha[i]); |
| t = floor(t); |
| // Print Trials: |
| cout << fixed << setprecision(0) << setw(15) << right << t << endl; |
| } |
| cout << endl; |
| } |
| |
| int main() |
| { |
| find_max_sample_size(1.0/1000, 0); |
| find_max_sample_size(1.0/10000, 0); |
| find_max_sample_size(1.0/100000, 0); |
| find_max_sample_size(1.0/1000000, 0); |
| |
| return 0; |
| } |
| |
| |
| /* |
| |
| Output: |
| |
| binomial_sample_sizes.cpp |
| binomial_sample_sizes_example.vcxproj -> J:\Cpp\MathToolkit\test\Math_test\Debug\binomial_sample_sizes_example.exe |
| ________________________ |
| Maximum Number of Trials |
| ________________________ |
| |
| Success ratio = 0.001 |
| Maximum Number of "successes" permitted = 0 |
| |
| |
| ____________________________ |
| Confidence Max Number |
| Value (%) Of Trials |
| ____________________________ |
| 50.000 692 |
| 75.000 287 |
| 90.000 105 |
| 95.000 51 |
| 99.000 10 |
| 99.900 0 |
| 99.990 0 |
| 99.999 0 |
| |
| ________________________ |
| Maximum Number of Trials |
| ________________________ |
| |
| Success ratio = 0.0001000 |
| Maximum Number of "successes" permitted = 0 |
| |
| |
| ____________________________ |
| Confidence Max Number |
| Value (%) Of Trials |
| ____________________________ |
| 50.000 6931 |
| 75.000 2876 |
| 90.000 1053 |
| 95.000 512 |
| 99.000 100 |
| 99.900 10 |
| 99.990 0 |
| 99.999 0 |
| |
| ________________________ |
| Maximum Number of Trials |
| ________________________ |
| |
| Success ratio = 0.0000100 |
| Maximum Number of "successes" permitted = 0 |
| |
| |
| ____________________________ |
| Confidence Max Number |
| Value (%) Of Trials |
| ____________________________ |
| 50.000 69314 |
| 75.000 28768 |
| 90.000 10535 |
| 95.000 5129 |
| 99.000 1005 |
| 99.900 100 |
| 99.990 10 |
| 99.999 1 |
| |
| ________________________ |
| Maximum Number of Trials |
| ________________________ |
| |
| Success ratio = 0.0000010 |
| Maximum Number of "successes" permitted = 0 |
| |
| |
| ____________________________ |
| Confidence Max Number |
| Value (%) Of Trials |
| ____________________________ |
| 50.000 693146 |
| 75.000 287681 |
| 90.000 105360 |
| 95.000 51293 |
| 99.000 10050 |
| 99.900 1000 |
| 99.990 100 |
| 99.999 10 |
| |
| |
| */ |