123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- // 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
-
- */
|