// (C) Copyright John Maddock 2006 // 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 #include #include 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 occurance that follows a binomial // distribution. // using namespace std; using namespace boost::math; // 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 occurance" << "= " << 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 Upper\n" " Value (%) 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 bounds: double l = binomial::estimate_lower_bound_on_p(trials, successes, alpha[i]/2); double u = binomial::estimate_upper_bound_on_p(trials, successes, alpha[i]/2); // Print Limits: cout << fixed << setprecision(5) << setw(15) << right << l; cout << fixed << setprecision(5) << setw(15) << right << u << endl; } cout << endl; } int main() { confidence_limits_on_frequency(20, 2); confidence_limits_on_frequency(200, 20); confidence_limits_on_frequency(2000, 200); return 0; }