File: binomial_sample_sizes.cpp

package info (click to toggle)
scipy 1.16.0-1exp7
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 234,820 kB
  • sloc: cpp: 503,145; python: 344,611; ansic: 195,638; javascript: 89,566; fortran: 56,210; cs: 3,081; f90: 1,150; sh: 848; makefile: 785; pascal: 284; csh: 135; lisp: 134; xml: 56; perl: 51
file content (176 lines) | stat: -rw-r--r-- 5,083 bytes parent folder | download | duplicates (20)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
// 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
  

*/