summaryrefslogtreecommitdiff
path: root/libs/math/doc/sf_and_dist/html/math_toolkit/dist/stat_tut/weg/neg_binom_eg/neg_binom_size_eg.html
blob: 2171cbfca318fa3d9a28b6a0af65c4d798f75ee9 (plain)
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
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Estimating Sample Sizes for the Negative Binomial.</title>
<link rel="stylesheet" href="../../../../../../../../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="../../../../../index.html" title="Math Toolkit">
<link rel="up" href="../neg_binom_eg.html" title="Negative Binomial Distribution Examples">
<link rel="prev" href="neg_binom_conf.html" title="Calculating Confidence Limits on the Frequency of Occurrence for the Negative Binomial Distribution">
<link rel="next" href="negative_binomial_example1.html" title="Negative Binomial Sales Quota Example.">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../../../boost.png"></td>
<td align="center"><a href="../../../../../../../../../../index.html">Home</a></td>
<td align="center"><a href="../../../../../../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../../../../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="neg_binom_conf.html"><img src="../../../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../neg_binom_eg.html"><img src="../../../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../../index.html"><img src="../../../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="negative_binomial_example1.html"><img src="../../../../../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="section math_toolkit_dist_stat_tut_weg_neg_binom_eg_neg_binom_size_eg">
<div class="titlepage"><div><div><h6 class="title">
<a name="math_toolkit.dist.stat_tut.weg.neg_binom_eg.neg_binom_size_eg"></a><a class="link" href="neg_binom_size_eg.html" title="Estimating Sample Sizes for the Negative Binomial.">Estimating
            Sample Sizes for the Negative Binomial.</a>
</h6></div></div></div>
<p>
              Imagine you have an event (let's call it a "failure" - though
              we could equally well call it a success if we felt it was a 'good'
              event) that you know will occur in 1 in N trials. You may want to know
              how many trials you need to conduct to be P% sure of observing at least
              k such failures. If the failure events follow a negative binomial distribution
              (each trial either succeeds or fails) then the static member function
              <code class="computeroutput"><span class="identifier">negative_binomial_distibution</span><span class="special">&lt;&gt;::</span><span class="identifier">find_minimum_number_of_trials</span></code>
              can be used to estimate the minimum number of trials required to be
              P% sure of observing the desired number of failures.
            </p>
<p>
              The example program <a href="../../../../../../../../example/neg_binomial_sample_sizes.cpp" target="_top">neg_binomial_sample_sizes.cpp</a>
              demonstrates its usage.
            </p>
<p>
              It centres around a routine that prints out a table of minimum sample
              sizes (number of trials) for various probability thresholds:
            </p>
<p>
</p>
<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">find_number_of_trials</span><span class="special">(</span><span class="keyword">double</span> <span class="identifier">failures</span><span class="special">,</span> <span class="keyword">double</span> <span class="identifier">p</span><span class="special">);</span>
</pre>
<p>
            </p>
<p>
              First define a table of significance levels: these are the maximum
              acceptable probability that <span class="emphasis"><em>failure</em></span> or fewer events
              will be observed.
            </p>
<p>
</p>
<pre class="programlisting"><span class="keyword">double</span> <span class="identifier">alpha</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0.5</span><span class="special">,</span> <span class="number">0.25</span><span class="special">,</span> <span class="number">0.1</span><span class="special">,</span> <span class="number">0.05</span><span class="special">,</span> <span class="number">0.01</span><span class="special">,</span> <span class="number">0.001</span><span class="special">,</span> <span class="number">0.0001</span><span class="special">,</span> <span class="number">0.00001</span> <span class="special">};</span>
</pre>
<p>
            </p>
<p>
              Confidence value as % is (1 - alpha) * 100, so alpha 0.05 == 95% confidence
              that the desired number of failures will be observed. The values range
              from a very low 0.5 or 50% confidence up to an extremely high confidence
              of 99.999.
            </p>
<p>
              Much of the rest of the program is pretty-printing, the important part
              is in the calculation of minimum number of trials required for each
              value of alpha using:
            </p>
<pre class="programlisting"><span class="special">(</span><span class="keyword">int</span><span class="special">)</span><span class="identifier">ceil</span><span class="special">(</span><span class="identifier">negative_binomial</span><span class="special">::</span><span class="identifier">find_minimum_number_of_trials</span><span class="special">(</span><span class="identifier">failures</span><span class="special">,</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">alpha</span><span class="special">[</span><span class="identifier">i</span><span class="special">]);</span>
</pre>
<p>
              find_minimum_number_of_trials returns a double, so <code class="computeroutput"><span class="identifier">ceil</span></code>
              rounds this up to ensure we have an integral minimum number of trials.
            </p>
<p>
</p>
<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">find_number_of_trials</span><span class="special">(</span><span class="keyword">double</span> <span class="identifier">failures</span><span class="special">,</span> <span class="keyword">double</span> <span class="identifier">p</span><span class="special">)</span>
<span class="special">{</span>
   <span class="comment">// trials = number of trials</span>
   <span class="comment">// failures = number of failures before achieving required success(es).</span>
   <span class="comment">// p        = success fraction (0 &lt;= p &lt;= 1.).</span>
   <span class="comment">//</span>
   <span class="comment">// Calculate how many trials we need to ensure the</span>
   <span class="comment">// required number of failures DOES exceed "failures".</span>

  <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"\n"</span><span class="string">"Target number of failures = "</span> <span class="special">&lt;&lt;</span> <span class="special">(</span><span class="keyword">int</span><span class="special">)</span><span class="identifier">failures</span><span class="special">;</span>
  <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">",   Success fraction = "</span> <span class="special">&lt;&lt;</span> <span class="identifier">fixed</span> <span class="special">&lt;&lt;</span> <span class="identifier">setprecision</span><span class="special">(</span><span class="number">1</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="number">100</span> <span class="special">*</span> <span class="identifier">p</span> <span class="special">&lt;&lt;</span> <span class="string">"%"</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
   <span class="comment">// Print table header:</span>
   <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"____________________________\n"</span>
           <span class="string">"Confidence        Min Number\n"</span>
           <span class="string">" Value (%)        Of Trials \n"</span>
           <span class="string">"____________________________\n"</span><span class="special">;</span>
   <span class="comment">// Now print out the data for the alpha table values.</span>
  <span class="keyword">for</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special">&lt;</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">alpha</span><span class="special">)/</span><span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">alpha</span><span class="special">[</span><span class="number">0</span><span class="special">]);</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span>
   <span class="special">{</span> <span class="comment">// Confidence values %:</span>
      <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">fixed</span> <span class="special">&lt;&lt;</span> <span class="identifier">setprecision</span><span class="special">(</span><span class="number">3</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">10</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">right</span> <span class="special">&lt;&lt;</span> <span class="number">100</span> <span class="special">*</span> <span class="special">(</span><span class="number">1</span><span class="special">-</span><span class="identifier">alpha</span><span class="special">[</span><span class="identifier">i</span><span class="special">])</span> <span class="special">&lt;&lt;</span> <span class="string">"      "</span>
      <span class="comment">// find_minimum_number_of_trials</span>
      <span class="special">&lt;&lt;</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">6</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">right</span>
      <span class="special">&lt;&lt;</span> <span class="special">(</span><span class="keyword">int</span><span class="special">)</span><span class="identifier">ceil</span><span class="special">(</span><span class="identifier">negative_binomial</span><span class="special">::</span><span class="identifier">find_minimum_number_of_trials</span><span class="special">(</span><span class="identifier">failures</span><span class="special">,</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">alpha</span><span class="special">[</span><span class="identifier">i</span><span class="special">]))</span>
      <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
   <span class="special">}</span>
   <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
<span class="special">}</span> <span class="comment">// void find_number_of_trials(double failures, double p)</span>
</pre>
<p>
            </p>
<p>
              finally we can produce some tables of minimum trials for the chosen
              confidence levels:
            </p>
<p>
</p>
<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
<span class="special">{</span>
    <span class="identifier">find_number_of_trials</span><span class="special">(</span><span class="number">5</span><span class="special">,</span> <span class="number">0.5</span><span class="special">);</span>
    <span class="identifier">find_number_of_trials</span><span class="special">(</span><span class="number">50</span><span class="special">,</span> <span class="number">0.5</span><span class="special">);</span>
    <span class="identifier">find_number_of_trials</span><span class="special">(</span><span class="number">500</span><span class="special">,</span> <span class="number">0.5</span><span class="special">);</span>
    <span class="identifier">find_number_of_trials</span><span class="special">(</span><span class="number">50</span><span class="special">,</span> <span class="number">0.1</span><span class="special">);</span>
    <span class="identifier">find_number_of_trials</span><span class="special">(</span><span class="number">500</span><span class="special">,</span> <span class="number">0.1</span><span class="special">);</span>
    <span class="identifier">find_number_of_trials</span><span class="special">(</span><span class="number">5</span><span class="special">,</span> <span class="number">0.9</span><span class="special">);</span>

    <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
<span class="special">}</span> <span class="comment">// int main()</span>
</pre>
<p>
            </p>
<div class="note"><table border="0" summary="Note">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../../../../doc/src/images/note.png"></td>
<th align="left">Note</th>
</tr>
<tr><td align="left" valign="top">
<p>
                Since we're calculating the <span class="emphasis"><em>minimum</em></span> number of
                trials required, we'll err on the safe side and take the ceiling
                of the result. Had we been calculating the <span class="emphasis"><em>maximum</em></span>
                number of trials permitted to observe less than a certain number
                of <span class="emphasis"><em>failures</em></span> then we would have taken the floor
                instead. We would also have called <code class="computeroutput"><span class="identifier">find_minimum_number_of_trials</span></code>
                like this:
</p>
<pre class="programlisting"><span class="identifier">floor</span><span class="special">(</span><span class="identifier">negative_binomial</span><span class="special">::</span><span class="identifier">find_minimum_number_of_trials</span><span class="special">(</span><span class="identifier">failures</span><span class="special">,</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">alpha</span><span class="special">[</span><span class="identifier">i</span><span class="special">]))</span>
</pre>
<p>
                which would give us the largest number of trials we could conduct
                and still be P% sure of observing <span class="emphasis"><em>failures or less</em></span>
                failure events, when the probability of success is <span class="emphasis"><em>p</em></span>.
              </p>
</td></tr>
</table></div>
<p>
              We'll finish off by looking at some sample output, firstly suppose
              we wish to observe at least 5 "failures" with a 50/50 (0.5)
              chance of success or failure:
            </p>
<pre class="programlisting">Target number of failures = 5,   Success fraction = 50%

____________________________
Confidence        Min Number
 Value (%)        Of Trials
____________________________
    50.000          11
    75.000          14
    90.000          17
    95.000          18
    99.000          22
    99.900          27
    99.990          31
    99.999          36

</pre>
<p>
              So 18 trials or more would yield a 95% chance that at least our 5 required
              failures would be observed.
            </p>
<p>
              Compare that to what happens if the success ratio is 90%:
            </p>
<pre class="programlisting">Target number of failures = 5.000,   Success fraction = 90.000%

____________________________
Confidence        Min Number
 Value (%)        Of Trials
____________________________
    50.000          57
    75.000          73
    90.000          91
    95.000         103
    99.000         127
    99.900         159
    99.990         189
    99.999         217
</pre>
<p>
              So now 103 trials are required to observe at least 5 failures with
              95% certainty.
            </p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2006-2010 John Maddock, Paul A. Bristow, Hubert Holin, Xiaogang Zhang, Bruno
      Lalande, Johan R&#229;de, Gautam Sewani, Thijs van den Berg and Benjamin Sobotta<p>
        Distributed under the Boost Software License, Version 1.0. (See accompanying
        file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
      </p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="neg_binom_conf.html"><img src="../../../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../neg_binom_eg.html"><img src="../../../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../../index.html"><img src="../../../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="negative_binomial_example1.html"><img src="../../../../../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>