mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-04 05:50:31 -05:00 
			
		
		
		
	
		
			
	
	
		
			166 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			166 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
								 | 
							
								// 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
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |