Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / math / doc / html / math_toolkit / stat_tut / weg / neg_binom_eg / negative_binomial_example1.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Negative Binomial Sales Quota Example.</title>
5 <link rel="stylesheet" href="../../../../math.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7 <link rel="home" href="../../../../index.html" title="Math Toolkit 2.11.0">
8 <link rel="up" href="../neg_binom_eg.html" title="Negative Binomial Distribution Examples">
9 <link rel="prev" href="neg_binom_size_eg.html" title="Estimating Sample Sizes for the Negative Binomial.">
10 <link rel="next" href="negative_binomial_example2.html" title="Negative Binomial Table Printing Example.">
11 </head>
12 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13 <table cellpadding="2" width="100%"><tr>
14 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
15 <td align="center"><a href="../../../../../../../../index.html">Home</a></td>
16 <td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
17 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19 <td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
20 </tr></table>
21 <hr>
22 <div class="spirit-nav">
23 <a accesskey="p" href="neg_binom_size_eg.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_example2.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
24 </div>
25 <div class="section">
26 <div class="titlepage"><div><div><h5 class="title">
27 <a name="math_toolkit.stat_tut.weg.neg_binom_eg.negative_binomial_example1"></a><a class="link" href="negative_binomial_example1.html" title="Negative Binomial Sales Quota Example.">Negative
28           Binomial Sales Quota Example.</a>
29 </h5></div></div></div>
30 <p>
31             This example program <a href="../../../../../../example/negative_binomial_example1.cpp" target="_top">negative_binomial_example1.cpp
32             (full source code)</a> demonstrates a simple use to find the probability
33             of meeting a sales quota.
34           </p>
35 <p>
36             Based on <a href="http://en.wikipedia.org/wiki/Negative_binomial_distribution" target="_top">a
37             problem by Dr. Diane Evans, Professor of Mathematics at Rose-Hulman Institute
38             of Technology</a>.
39           </p>
40 <p>
41             Pat is required to sell candy bars to raise money for the 6th grade field
42             trip. There are thirty houses in the neighborhood, and Pat is not supposed
43             to return home until five candy bars have been sold. So the child goes
44             door to door, selling candy bars. At each house, there is a 0.4 probability
45             (40%) of selling one candy bar and a 0.6 probability (60%) of selling
46             nothing.
47           </p>
48 <p>
49             What is the probability mass (density) function (pdf) for selling the
50             last (fifth) candy bar at the nth house?
51           </p>
52 <p>
53             The Negative Binomial(r, p) distribution describes the probability of
54             k failures and r successes in k+r Bernoulli(p) trials with success on
55             the last trial. (A <a href="http://en.wikipedia.org/wiki/Bernoulli_distribution" target="_top">Bernoulli
56             trial</a> is one with only two possible outcomes, success of failure,
57             and p is the probability of success). See also <a href="http://en.wikipedia.org/wiki/Bernoulli_distribution" target="_top">Bernoulli
58             distribution</a> and <a href="http://www.math.uah.edu/stat/bernoulli/Introduction.xhtml" target="_top">Bernoulli
59             applications</a>.
60           </p>
61 <p>
62             In this example, we will deliberately produce a variety of calculations
63             and outputs to demonstrate the ways that the negative binomial distribution
64             can be implemented with this library: it is also deliberately over-commented.
65           </p>
66 <p>
67             First we need to #define macros to control the error and discrete handling
68             policies. For this simple example, we want to avoid throwing an exception
69             (the default policy) and just return infinity. We want to treat the distribution
70             as if it was continuous, so we choose a discrete_quantile policy of real,
71             rather than the default policy integer_round_outwards.
72           </p>
73 <pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_MATH_OVERFLOW_ERROR_POLICY</span> <span class="identifier">ignore_error</span>
74 <span class="preprocessor">#define</span> <span class="identifier">BOOST_MATH_DISCRETE_QUANTILE_POLICY</span> <span class="identifier">real</span>
75 </pre>
76 <p>
77             After that we need some includes to provide easy access to the negative
78             binomial distribution,
79           </p>
80 <div class="caution"><table border="0" summary="Caution">
81 <tr>
82 <td rowspan="2" align="center" valign="top" width="25"><img alt="[Caution]" src="../../../../../../../../doc/src/images/caution.png"></td>
83 <th align="left">Caution</th>
84 </tr>
85 <tr><td align="left" valign="top"><p>
86               It is vital to #include distributions etc <span class="bold"><strong>after</strong></span>
87               the above #defines
88             </p></td></tr>
89 </table></div>
90 <p>
91             and we need some std library iostream, of course.
92           </p>
93 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">math</span><span class="special">/</span><span class="identifier">distributions</span><span class="special">/</span><span class="identifier">negative_binomial</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
94   <span class="comment">// for negative_binomial_distribution</span>
95   <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">negative_binomial</span><span class="special">;</span> <span class="comment">// typedef provides default type is double.</span>
96   <span class="keyword">using</span>  <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">pdf</span><span class="special">;</span> <span class="comment">// Probability mass function.</span>
97   <span class="keyword">using</span>  <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">cdf</span><span class="special">;</span> <span class="comment">// Cumulative density function.</span>
98   <span class="keyword">using</span>  <span class="special">::</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">quantile</span><span class="special">;</span>
99
100 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
101   <span class="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span><span class="special">;</span> <span class="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
102   <span class="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">noshowpoint</span><span class="special">;</span> <span class="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">fixed</span><span class="special">;</span> <span class="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">right</span><span class="special">;</span> <span class="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">left</span><span class="special">;</span>
103 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iomanip</span><span class="special">&gt;</span>
104   <span class="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setprecision</span><span class="special">;</span> <span class="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">setw</span><span class="special">;</span>
105
106 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">limits</span><span class="special">&gt;</span>
107   <span class="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">;</span>
108 </pre>
109 <p>
110             It is always sensible to use try and catch blocks because defaults policies
111             are to throw an exception if anything goes wrong.
112           </p>
113 <p>
114             A simple catch block (see below) will ensure that you get a helpful error
115             message instead of an abrupt program abort.
116           </p>
117 <pre class="programlisting"><span class="keyword">try</span>
118 <span class="special">{</span>
119 </pre>
120 <p>
121             Selling five candy bars means getting five successes, so successes r
122             = 5. The total number of trials (n, in this case, houses visited) this
123             takes is therefore = sucesses + failures or k + r = k + 5.
124           </p>
125 <pre class="programlisting"><span class="keyword">double</span> <span class="identifier">sales_quota</span> <span class="special">=</span> <span class="number">5</span><span class="special">;</span> <span class="comment">// Pat's sales quota - successes (r).</span>
126 </pre>
127 <p>
128             At each house, there is a 0.4 probability (40%) of selling one candy
129             bar and a 0.6 probability (60%) of selling nothing.
130           </p>
131 <pre class="programlisting"><span class="keyword">double</span> <span class="identifier">success_fraction</span> <span class="special">=</span> <span class="number">0.4</span><span class="special">;</span> <span class="comment">// success_fraction (p) - so failure_fraction is 0.6.</span>
132 </pre>
133 <p>
134             The Negative Binomial(r, p) distribution describes the probability of
135             k failures and r successes in k+r Bernoulli(p) trials with success on
136             the last trial. (A <a href="http://en.wikipedia.org/wiki/Bernoulli_distribution" target="_top">Bernoulli
137             trial</a> is one with only two possible outcomes, success of failure,
138             and p is the probability of success).
139           </p>
140 <p>
141             We therefore start by constructing a negative binomial distribution with
142             parameters sales_quota (required successes) and probability of success.
143           </p>
144 <pre class="programlisting"><span class="identifier">negative_binomial</span> <span class="identifier">nb</span><span class="special">(</span><span class="identifier">sales_quota</span><span class="special">,</span> <span class="identifier">success_fraction</span><span class="special">);</span> <span class="comment">// type double by default.</span>
145 </pre>
146 <p>
147             To confirm, display the success_fraction &amp; successes parameters of
148             the distribution.
149           </p>
150 <pre class="programlisting"><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Pat has a sales per house success rate of "</span> <span class="special">&lt;&lt;</span> <span class="identifier">success_fraction</span>
151   <span class="special">&lt;&lt;</span> <span class="string">".\nTherefore he would, on average, sell "</span> <span class="special">&lt;&lt;</span> <span class="identifier">nb</span><span class="special">.</span><span class="identifier">success_fraction</span><span class="special">()</span> <span class="special">*</span> <span class="number">100</span>
152   <span class="special">&lt;&lt;</span> <span class="string">" bars after trying 100 houses."</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
153
154 <span class="keyword">int</span> <span class="identifier">all_houses</span> <span class="special">=</span> <span class="number">30</span><span class="special">;</span> <span class="comment">// The number of houses on the estate.</span>
155
156 <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"With a success rate of "</span> <span class="special">&lt;&lt;</span> <span class="identifier">nb</span><span class="special">.</span><span class="identifier">success_fraction</span><span class="special">()</span>
157   <span class="special">&lt;&lt;</span> <span class="string">", he might expect, on average,\n"</span>
158     <span class="string">"to need to visit about "</span> <span class="special">&lt;&lt;</span> <span class="identifier">success_fraction</span> <span class="special">*</span> <span class="identifier">all_houses</span>
159     <span class="special">&lt;&lt;</span> <span class="string">" houses in order to sell all "</span> <span class="special">&lt;&lt;</span> <span class="identifier">nb</span><span class="special">.</span><span class="identifier">successes</span><span class="special">()</span> <span class="special">&lt;&lt;</span> <span class="string">" bars. "</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
160 </pre>
161 <pre class="programlisting">Pat has a sales per house success rate of 0.4.
162 Therefore he would, on average, sell 40 bars after trying 100 houses.
163 With a success rate of 0.4, he might expect, on average,
164 to need to visit about 12 houses in order to sell all 5 bars.
165 </pre>
166 <p>
167             The random variable of interest is the number of houses that must be
168             visited to sell five candy bars, so we substitute k = n - 5 into a negative_binomial(5,
169             0.4) and obtain the <a class="link" href="../../../dist_ref/nmp.html#math_toolkit.dist_ref.nmp.pdf">Probability
170             Density Function</a> of the distribution of houses visited. Obviously,
171             the best possible case is that Pat makes sales on all the first five
172             houses.
173           </p>
174 <p>
175             We calculate this using the pdf function:
176           </p>
177 <pre class="programlisting"><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Probability that Pat finishes on the "</span> <span class="special">&lt;&lt;</span> <span class="identifier">sales_quota</span> <span class="special">&lt;&lt;</span> <span class="string">"th house is "</span>
178   <span class="special">&lt;&lt;</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="number">5</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// == pdf(nb, 0)</span>
179 </pre>
180 <p>
181             Of course, he could not finish on fewer than 5 houses because he must
182             sell 5 candy bars. So the 5th house is the first that he could possibly
183             finish on.
184           </p>
185 <p>
186             To finish on or before the 8th house, Pat must finish at the 5th, 6th,
187             7th or 8th house. The probability that he will finish on <span class="bold"><strong>exactly</strong></span>
188             ( == ) on any house is the Probability Density Function (pdf).
189           </p>
190 <pre class="programlisting"><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Probability that Pat finishes on the 6th house is "</span>
191   <span class="special">&lt;&lt;</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="number">6</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
192 <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Probability that Pat finishes on the 7th house is "</span>
193   <span class="special">&lt;&lt;</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="number">7</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
194 <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Probability that Pat finishes on the 8th house is "</span>
195   <span class="special">&lt;&lt;</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="number">8</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
196 </pre>
197 <pre class="programlisting">Probability that Pat finishes on the 6th house is 0.03072
198 Probability that Pat finishes on the 7th house is 0.055296
199 Probability that Pat finishes on the 8th house is 0.077414
200 </pre>
201 <p>
202             The sum of the probabilities for these houses is the Cumulative Distribution
203             Function (cdf). We can calculate it by adding the individual probabilities.
204           </p>
205 <pre class="programlisting"><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Probability that Pat finishes on or before the 8th house is sum "</span>
206   <span class="string">"\n"</span> <span class="special">&lt;&lt;</span> <span class="string">"pdf(sales_quota) + pdf(6) + pdf(7) + pdf(8) = "</span>
207   <span class="comment">// Sum each of the mass/density probabilities for houses sales_quota = 5, 6, 7, &amp; 8.</span>
208   <span class="special">&lt;&lt;</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="number">5</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">)</span> <span class="comment">// 0 failures.</span>
209     <span class="special">+</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="number">6</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">)</span> <span class="comment">// 1 failure.</span>
210     <span class="special">+</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="number">7</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">)</span> <span class="comment">// 2 failures.</span>
211     <span class="special">+</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="number">8</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">)</span> <span class="comment">// 3 failures.</span>
212   <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
213 </pre>
214 <pre class="programlisting">pdf(sales_quota) + pdf(6) + pdf(7) + pdf(8) = 0.17367
215 </pre>
216 <p>
217             Or, usually better, by using the negative binomial <span class="bold"><strong>cumulative</strong></span>
218             distribution function.
219           </p>
220 <pre class="programlisting"><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"\nProbability of selling his quota of "</span> <span class="special">&lt;&lt;</span> <span class="identifier">sales_quota</span>
221   <span class="special">&lt;&lt;</span> <span class="string">" bars\non or before the "</span> <span class="special">&lt;&lt;</span> <span class="number">8</span> <span class="special">&lt;&lt;</span> <span class="string">"th house is "</span>
222   <span class="special">&lt;&lt;</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="number">8</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
223 </pre>
224 <pre class="programlisting">Probability of selling his quota of 5 bars on or before the 8th house is 0.17367
225 </pre>
226 <pre class="programlisting"><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"\nProbability that Pat finishes exactly on the 10th house is "</span>
227   <span class="special">&lt;&lt;</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="number">10</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
228 <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"\nProbability of selling his quota of "</span> <span class="special">&lt;&lt;</span> <span class="identifier">sales_quota</span>
229   <span class="special">&lt;&lt;</span> <span class="string">" bars\non or before the "</span> <span class="special">&lt;&lt;</span> <span class="number">10</span> <span class="special">&lt;&lt;</span> <span class="string">"th house is "</span>
230   <span class="special">&lt;&lt;</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="number">10</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
231 </pre>
232 <pre class="programlisting">Probability that Pat finishes exactly on the 10th house is 0.10033
233 Probability of selling his quota of 5 bars on or before the 10th house is 0.3669
234 </pre>
235 <pre class="programlisting"><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Probability that Pat finishes exactly on the 11th house is "</span>
236   <span class="special">&lt;&lt;</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="number">11</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
237 <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"\nProbability of selling his quota of "</span> <span class="special">&lt;&lt;</span> <span class="identifier">sales_quota</span>
238   <span class="special">&lt;&lt;</span> <span class="string">" bars\non or before the "</span> <span class="special">&lt;&lt;</span> <span class="number">11</span> <span class="special">&lt;&lt;</span> <span class="string">"th house is "</span>
239   <span class="special">&lt;&lt;</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="number">11</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
240 </pre>
241 <pre class="programlisting">Probability that Pat finishes on the 11th house is 0.10033
242 Probability of selling his quota of 5 candy bars
243 on or before the 11th house is 0.46723
244 </pre>
245 <pre class="programlisting"><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Probability that Pat finishes exactly on the 12th house is "</span>
246   <span class="special">&lt;&lt;</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="number">12</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
247
248 <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"\nProbability of selling his quota of "</span> <span class="special">&lt;&lt;</span> <span class="identifier">sales_quota</span>
249   <span class="special">&lt;&lt;</span> <span class="string">" bars\non or before the "</span> <span class="special">&lt;&lt;</span> <span class="number">12</span> <span class="special">&lt;&lt;</span> <span class="string">"th house is "</span>
250   <span class="special">&lt;&lt;</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="number">12</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
251 </pre>
252 <pre class="programlisting">Probability that Pat finishes on the 12th house is 0.094596
253 Probability of selling his quota of 5 candy bars
254 on or before the 12th house is 0.56182
255 </pre>
256 <p>
257             Finally consider the risk of Pat not selling his quota of 5 bars even
258             after visiting all the houses. Calculate the probability that he <span class="emphasis"><em>will</em></span>
259             sell on or before the last house: Calculate the probability that he would
260             sell all his quota on the very last house.
261           </p>
262 <pre class="programlisting"><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Probability that Pat finishes on the "</span> <span class="special">&lt;&lt;</span> <span class="identifier">all_houses</span>
263   <span class="special">&lt;&lt;</span> <span class="string">" house is "</span> <span class="special">&lt;&lt;</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="identifier">all_houses</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
264 </pre>
265 <p>
266             Probability of selling his quota of 5 bars on the 30th house is
267           </p>
268 <pre class="programlisting">Probability that Pat finishes on the 30 house is 0.00069145
269 </pre>
270 <p>
271             when he'd be very unlucky indeed!
272           </p>
273 <p>
274             What is the probability that Pat exhausts all 30 houses in the neighborhood,
275             and <span class="bold"><strong>still</strong></span> doesn't sell the required
276             5 candy bars?
277           </p>
278 <pre class="programlisting"><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"\nProbability of selling his quota of "</span> <span class="special">&lt;&lt;</span> <span class="identifier">sales_quota</span>
279   <span class="special">&lt;&lt;</span> <span class="string">" bars\non or before the "</span> <span class="special">&lt;&lt;</span> <span class="identifier">all_houses</span> <span class="special">&lt;&lt;</span> <span class="string">"th house is "</span>
280   <span class="special">&lt;&lt;</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="identifier">all_houses</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
281 </pre>
282 <pre class="programlisting">Probability of selling his quota of 5 bars
283 on or before the 30th house is 0.99849
284 </pre>
285 <p>
286             So the risk of failing even after visiting all the houses is 1 - this
287             probability,
288           </p>
289 <pre class="programlisting"><span class="number">1</span> <span class="special">-</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="identifier">all_houses</span> <span class="special">-</span> <span class="identifier">sales_quota</span></pre>
290 <p>
291             But using this expression may cause serious inaccuracy, so it would be
292             much better to use the complement of the cdf: So the risk of failing
293             even at, or after, the 31th (non-existent) houses is 1 - this probability,
294           </p>
295 <pre class="programlisting"><span class="number">1</span> <span class="special">-</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="identifier">all_houses</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">)</span></pre>
296 <p>
297             But using this expression may cause serious inaccuracy. So it would be
298             much better to use the __complement of the cdf (see <a class="link" href="../../overview/complements.html#why_complements">why
299             complements?</a>).
300           </p>
301 <pre class="programlisting"><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"\nProbability of failing to sell his quota of "</span> <span class="special">&lt;&lt;</span> <span class="identifier">sales_quota</span>
302   <span class="special">&lt;&lt;</span> <span class="string">" bars\neven after visiting all "</span> <span class="special">&lt;&lt;</span> <span class="identifier">all_houses</span> <span class="special">&lt;&lt;</span> <span class="string">" houses is "</span>
303   <span class="special">&lt;&lt;</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="identifier">all_houses</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">))</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
304 </pre>
305 <pre class="programlisting">Probability of failing to sell his quota of 5 bars
306 even after visiting all 30 houses is 0.0015101
307 </pre>
308 <p>
309             We can also use the quantile (percentile), the inverse of the cdf, to
310             predict which house Pat will finish on. So for the 8th house:
311           </p>
312 <pre class="programlisting"><span class="keyword">double</span> <span class="identifier">p</span> <span class="special">=</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="special">(</span><span class="number">8</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">));</span>
313 <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Probability of meeting sales quota on or before 8th house is "</span><span class="special">&lt;&lt;</span> <span class="identifier">p</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
314 </pre>
315 <pre class="programlisting">Probability of meeting sales quota on or before 8th house is 0.174
316 </pre>
317 <pre class="programlisting"><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"If the confidence of meeting sales quota is "</span> <span class="special">&lt;&lt;</span> <span class="identifier">p</span>
318     <span class="special">&lt;&lt;</span> <span class="string">", then the finishing house is "</span> <span class="special">&lt;&lt;</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="identifier">p</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">sales_quota</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
319
320 <span class="identifier">cout</span><span class="special">&lt;&lt;</span> <span class="string">" quantile(nb, p) = "</span> <span class="special">&lt;&lt;</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="identifier">p</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
321 </pre>
322 <pre class="programlisting">If the confidence of meeting sales quota is 0.17367, then the finishing house is 8
323 </pre>
324 <p>
325             Demanding absolute certainty that all 5 will be sold, implies an infinite
326             number of trials. (Of course, there are only 30 houses on the estate,
327             so he can't ever be <span class="bold"><strong>certain</strong></span> of selling
328             his quota).
329           </p>
330 <pre class="programlisting"><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"If the confidence of meeting sales quota is "</span> <span class="special">&lt;&lt;</span> <span class="number">1.</span>
331     <span class="special">&lt;&lt;</span> <span class="string">", then the finishing house is "</span> <span class="special">&lt;&lt;</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="number">1</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">sales_quota</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
332 <span class="comment">//  1.#INF == infinity.</span>
333 </pre>
334 <pre class="programlisting">If the confidence of meeting sales quota is 1, then the finishing house is 1.#INF
335 </pre>
336 <p>
337             And similarly for a few other probabilities:
338           </p>
339 <pre class="programlisting"><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"If the confidence of meeting sales quota is "</span> <span class="special">&lt;&lt;</span> <span class="number">0.</span>
340     <span class="special">&lt;&lt;</span> <span class="string">", then the finishing house is "</span> <span class="special">&lt;&lt;</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="number">0.</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">sales_quota</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
341
342 <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"If the confidence of meeting sales quota is "</span> <span class="special">&lt;&lt;</span> <span class="number">0.5</span>
343     <span class="special">&lt;&lt;</span> <span class="string">", then the finishing house is "</span> <span class="special">&lt;&lt;</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="number">0.5</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">sales_quota</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
344
345 <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"If the confidence of meeting sales quota is "</span> <span class="special">&lt;&lt;</span> <span class="number">1</span> <span class="special">-</span> <span class="number">0.00151</span> <span class="comment">// 30 th</span>
346     <span class="special">&lt;&lt;</span> <span class="string">", then the finishing house is "</span> <span class="special">&lt;&lt;</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="number">1</span> <span class="special">-</span> <span class="number">0.00151</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">sales_quota</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
347 </pre>
348 <pre class="programlisting">If the confidence of meeting sales quota is 0, then the finishing house is 5
349 If the confidence of meeting sales quota is 0.5, then the finishing house is 11.337
350 If the confidence of meeting sales quota is 0.99849, then the finishing house is 30
351 </pre>
352 <p>
353             Notice that because we chose a discrete quantile policy of real, the
354             result can be an 'unreal' fractional house.
355           </p>
356 <p>
357             If the opposite is true, we don't want to assume any confidence, then
358             this is tantamount to assuming that all the first sales_quota trials
359             will be successful sales.
360           </p>
361 <pre class="programlisting"><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"If confidence of meeting quota is zero\n(we assume all houses are successful sales)"</span>
362   <span class="string">", then finishing house is "</span> <span class="special">&lt;&lt;</span> <span class="identifier">sales_quota</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
363 </pre>
364 <pre class="programlisting">If confidence of meeting quota is zero (we assume all houses are successful sales), then finishing house is 5
365 If confidence of meeting quota is 0, then finishing house is 5
366 </pre>
367 <p>
368             We can list quantiles for a few probabilities:
369           </p>
370 <pre class="programlisting"> <span class="keyword">double</span> <span class="identifier">ps</span><span class="special">[]</span> <span class="special">=</span> <span class="special">{</span><span class="number">0.</span><span class="special">,</span> <span class="number">0.001</span><span class="special">,</span> <span class="number">0.01</span><span class="special">,</span> <span class="number">0.05</span><span class="special">,</span> <span class="number">0.1</span><span class="special">,</span> <span class="number">0.5</span><span class="special">,</span> <span class="number">0.9</span><span class="special">,</span> <span class="number">0.95</span><span class="special">,</span> <span class="number">0.99</span><span class="special">,</span> <span class="number">0.999</span><span class="special">,</span> <span class="number">1.</span><span class="special">};</span>
371  <span class="comment">// Confidence as fraction = 1-alpha, as percent =  100 * (1-alpha[i]) %</span>
372  <span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="number">3</span><span class="special">);</span>
373  <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">ps</span><span class="special">)/</span><span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">ps</span><span class="special">[</span><span class="number">0</span><span class="special">]);</span> <span class="identifier">i</span><span class="special">++)</span>
374  <span class="special">{</span>
375    <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"If confidence of meeting quota is "</span> <span class="special">&lt;&lt;</span> <span class="identifier">ps</span><span class="special">[</span><span class="identifier">i</span><span class="special">]</span>
376      <span class="special">&lt;&lt;</span> <span class="string">", then finishing house is "</span> <span class="special">&lt;&lt;</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="identifier">ps</span><span class="special">[</span><span class="identifier">i</span><span class="special">])</span> <span class="special">+</span> <span class="identifier">sales_quota</span>
377      <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
378 <span class="special">}</span>
379 </pre>
380 <pre class="programlisting">If confidence of meeting quota is 0, then finishing house is 5
381 If confidence of meeting quota is 0.001, then finishing house is 5
382 If confidence of meeting quota is 0.01, then finishing house is 5
383 If confidence of meeting quota is 0.05, then finishing house is 6.2
384 If confidence of meeting quota is 0.1, then finishing house is 7.06
385 If confidence of meeting quota is 0.5, then finishing house is 11.3
386 If confidence of meeting quota is 0.9, then finishing house is 17.8
387 If confidence of meeting quota is 0.95, then finishing house is 20.1
388 If confidence of meeting quota is 0.99, then finishing house is 24.8
389 If confidence of meeting quota is 0.999, then finishing house is 31.1
390 If confidence of meeting quota is 1, then finishing house is 1.#INF
391 </pre>
392 <p>
393             We could have applied a ceil function to obtain a 'worst case' integer
394             value for house.
395           </p>
396 <pre class="programlisting"><span class="identifier">ceil</span><span class="special">(</span><span class="identifier">quantile</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="identifier">ps</span><span class="special">[</span><span class="identifier">i</span><span class="special">]))</span></pre>
397 <p>
398             Or, if we had used the default discrete quantile policy, integer_outside,
399             by omitting
400           </p>
401 <pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_MATH_DISCRETE_QUANTILE_POLICY</span> <span class="identifier">real</span></pre>
402 <p>
403             we would have achieved the same effect.
404           </p>
405 <p>
406             The real result gives some suggestion which house is most likely. For
407             example, compare the real and integer_outside for 95% confidence.
408           </p>
409 <pre class="programlisting">If confidence of meeting quota is 0.95, then finishing house is 20.1
410 If confidence of meeting quota is 0.95, then finishing house is 21
411 </pre>
412 <p>
413             The real value 20.1 is much closer to 20 than 21, so integer_outside
414             is pessimistic. We could also use integer_round_nearest policy to suggest
415             that 20 is more likely.
416           </p>
417 <p>
418             Finally, we can tabulate the probability for the last sale being exactly
419             on each house.
420           </p>
421 <pre class="programlisting"><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"\nHouse for "</span> <span class="special">&lt;&lt;</span> <span class="identifier">sales_quota</span> <span class="special">&lt;&lt;</span> <span class="string">"th (last) sale.  Probability (%)"</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
422 <span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="number">5</span><span class="special">);</span>
423 <span class="keyword">for</span> <span class="special">(</span><span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="special">(</span><span class="keyword">int</span><span class="special">)</span><span class="identifier">sales_quota</span><span class="special">;</span> <span class="identifier">i</span> <span class="special">&lt;</span> <span class="identifier">all_houses</span><span class="special">+</span><span class="number">1</span><span class="special">;</span> <span class="identifier">i</span><span class="special">++)</span>
424 <span class="special">{</span>
425   <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">left</span> <span class="special">&lt;&lt;</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">3</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">i</span> <span class="special">&lt;&lt;</span> <span class="string">"                             "</span> <span class="special">&lt;&lt;</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">8</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="identifier">i</span> <span class="special">-</span> <span class="identifier">sales_quota</span><span class="special">)</span>  <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
426 <span class="special">}</span>
427 <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
428 </pre>
429 <pre class="programlisting">House for 5 th (last) sale.  Probability (%)
430 5                               0.01024
431 6                               0.04096
432 7                               0.096256
433 8                               0.17367
434 9                               0.26657
435 10                              0.3669
436 11                              0.46723
437 12                              0.56182
438 13                              0.64696
439 14                              0.72074
440 15                              0.78272
441 16                              0.83343
442 17                              0.874
443 18                              0.90583
444 19                              0.93039
445 20                              0.94905
446 21                              0.96304
447 22                              0.97342
448 23                              0.98103
449 24                              0.98655
450 25                              0.99053
451 26                              0.99337
452 27                              0.99539
453 28                              0.99681
454 29                              0.9978
455 30                              0.99849
456 </pre>
457 <p>
458             As noted above, using a catch block is always a good idea, even if you
459             do not expect to use it.
460           </p>
461 <pre class="programlisting"><span class="special">}</span>
462 <span class="keyword">catch</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">exception</span><span class="special">&amp;</span> <span class="identifier">e</span><span class="special">)</span>
463 <span class="special">{</span> <span class="comment">// Since we have set an overflow policy of ignore_error,</span>
464   <span class="comment">// an overflow exception should never be thrown.</span>
465    <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"\nMessage from thrown exception was:\n "</span> <span class="special">&lt;&lt;</span> <span class="identifier">e</span><span class="special">.</span><span class="identifier">what</span><span class="special">()</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
466 </pre>
467 <p>
468             For example, without a ignore domain error policy, if we asked for
469           </p>
470 <pre class="programlisting"><span class="identifier">pdf</span><span class="special">(</span><span class="identifier">nb</span><span class="special">,</span> <span class="special">-</span><span class="number">1</span><span class="special">)</span></pre>
471 <p>
472             for example, we would get:
473           </p>
474 <pre class="programlisting">Message from thrown exception was:
475  Error in function boost::math::pdf(const negative_binomial_distribution&lt;double&gt;&amp;, double):
476  Number of failures argument is -1, but must be &gt;= 0 !
477 </pre>
478 </div>
479 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
480 <td align="left"></td>
481 <td align="right"><div class="copyright-footer">Copyright &#169; 2006-2019 Nikhar
482       Agrawal, Anton Bikineev, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos,
483       Hubert Holin, Bruno Lalande, John Maddock, Jeremy Murphy, Matthew Pulver, Johan
484       R&#229;de, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg,
485       Daryle Walker and Xiaogang Zhang<p>
486         Distributed under the Boost Software License, Version 1.0. (See accompanying
487         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>)
488       </p>
489 </div></td>
490 </tr></table>
491 <hr>
492 <div class="spirit-nav">
493 <a accesskey="p" href="neg_binom_size_eg.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_example2.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
494 </div>
495 </body>
496 </html>