| // 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 confidence_limits_on_frequency(unsigned trials, unsigned successes) |
| { |
| // |
| // trials = Total number of trials. |
| // successes = Total number of observed successes. |
| // |
| // Calculate confidence limits for an observed |
| // frequency of occurrence that follows a binomial distribution. |
| // |
| //using namespace std; // Avoid |
| // using namespace boost::math; // potential name ambiguity with std <random> |
| using boost::math::binomial_distribution; |
| |
| // Print out general info: |
| cout << |
| "___________________________________________\n" |
| "2-Sided Confidence Limits For Success Ratio\n" |
| "___________________________________________\n\n"; |
| cout << setprecision(7); |
| cout << setw(40) << left << "Number of Observations" << "= " << trials << "\n"; |
| cout << setw(40) << left << "Number of successes" << "= " << successes << "\n"; |
| cout << setw(40) << left << "Sample frequency of occurrence" << "= " << double(successes) / trials << "\n"; |
| // |
| // Define a table of significance levels: |
| // |
| 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 Lower CP Upper CP Lower JP Upper JP\n" |
| " Value (%) Limit Limit Limit Limit\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 Clopper Pearson bounds: |
| double l = binomial_distribution<>::find_lower_bound_on_p(trials, successes, alpha[i]/2); |
| double u = binomial_distribution<>::find_upper_bound_on_p(trials, successes, alpha[i]/2); |
| // Print Clopper Pearson Limits: |
| cout << fixed << setprecision(5) << setw(15) << right << l; |
| cout << fixed << setprecision(5) << setw(15) << right << u; |
| // Calculate Jeffreys Prior Bounds: |
| l = binomial_distribution<>::find_lower_bound_on_p(trials, successes, alpha[i]/2, binomial_distribution<>::jeffreys_prior_interval); |
| u = binomial_distribution<>::find_upper_bound_on_p(trials, successes, alpha[i]/2, binomial_distribution<>::jeffreys_prior_interval); |
| // Print Jeffreys Prior Limits: |
| cout << fixed << setprecision(5) << setw(15) << right << l; |
| cout << fixed << setprecision(5) << setw(15) << right << u << std::endl; |
| } |
| cout << endl; |
| } // void confidence_limits_on_frequency() |
| |
| int main() |
| { |
| confidence_limits_on_frequency(20, 4); |
| confidence_limits_on_frequency(200, 40); |
| confidence_limits_on_frequency(2000, 400); |
| |
| return 0; |
| } // int main() |
| |
| /* |
| |
| ------ Build started: Project: binomial_confidence_limits, Configuration: Debug Win32 ------ |
| Compiling... |
| binomial_confidence_limits.cpp |
| Linking... |
| Autorun "i:\boost-06-05-03-1300\libs\math\test\Math_test\debug\binomial_confidence_limits.exe" |
| ___________________________________________ |
| 2-Sided Confidence Limits For Success Ratio |
| ___________________________________________ |
| |
| Number of Observations = 20 |
| Number of successes = 4 |
| Sample frequency of occurrence = 0.2 |
| |
| |
| _______________________________________________________________________ |
| Confidence Lower CP Upper CP Lower JP Upper JP |
| Value (%) Limit Limit Limit Limit |
| _______________________________________________________________________ |
| 50.000 0.12840 0.29588 0.14974 0.26916 |
| 75.000 0.09775 0.34633 0.11653 0.31861 |
| 90.000 0.07135 0.40103 0.08734 0.37274 |
| 95.000 0.05733 0.43661 0.07152 0.40823 |
| 99.000 0.03576 0.50661 0.04655 0.47859 |
| 99.900 0.01905 0.58632 0.02634 0.55960 |
| 99.990 0.01042 0.64997 0.01530 0.62495 |
| 99.999 0.00577 0.70216 0.00901 0.67897 |
| |
| ___________________________________________ |
| 2-Sided Confidence Limits For Success Ratio |
| ___________________________________________ |
| |
| Number of Observations = 200 |
| Number of successes = 40 |
| Sample frequency of occurrence = 0.2000000 |
| |
| |
| _______________________________________________________________________ |
| Confidence Lower CP Upper CP Lower JP Upper JP |
| Value (%) Limit Limit Limit Limit |
| _______________________________________________________________________ |
| 50.000 0.17949 0.22259 0.18190 0.22001 |
| 75.000 0.16701 0.23693 0.16934 0.23429 |
| 90.000 0.15455 0.25225 0.15681 0.24956 |
| 95.000 0.14689 0.26223 0.14910 0.25951 |
| 99.000 0.13257 0.28218 0.13468 0.27940 |
| 99.900 0.11703 0.30601 0.11902 0.30318 |
| 99.990 0.10489 0.32652 0.10677 0.32366 |
| 99.999 0.09492 0.34485 0.09670 0.34197 |
| |
| ___________________________________________ |
| 2-Sided Confidence Limits For Success Ratio |
| ___________________________________________ |
| |
| Number of Observations = 2000 |
| Number of successes = 400 |
| Sample frequency of occurrence = 0.2000000 |
| |
| |
| _______________________________________________________________________ |
| Confidence Lower CP Upper CP Lower JP Upper JP |
| Value (%) Limit Limit Limit Limit |
| _______________________________________________________________________ |
| 50.000 0.19382 0.20638 0.19406 0.20613 |
| 75.000 0.18965 0.21072 0.18990 0.21047 |
| 90.000 0.18537 0.21528 0.18561 0.21503 |
| 95.000 0.18267 0.21821 0.18291 0.21796 |
| 99.000 0.17745 0.22400 0.17769 0.22374 |
| 99.900 0.17150 0.23079 0.17173 0.23053 |
| 99.990 0.16658 0.23657 0.16681 0.23631 |
| 99.999 0.16233 0.24169 0.16256 0.24143 |
| |
| */ |
| |
| |
| |