| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> |
| <title>Calculating Confidence Limits on the Frequency of Occurrence for the Negative Binomial Distribution</title> |
| <link rel="stylesheet" href="../../../../../../../../../../doc/src/boostbook.css" type="text/css"> |
| <meta name="generator" content="DocBook XSL Stylesheets V1.74.0"> |
| <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_eg.html" title="Negative Binomial Distribution Examples"> |
| <link rel="next" href="neg_binom_size_eg.html" title="Estimating Sample Sizes for the Negative Binomial."> |
| </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_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="neg_binom_size_eg.html"><img src="../../../../../../../../../../doc/src/images/next.png" alt="Next"></a> |
| </div> |
| <div class="section" lang="en"> |
| <div class="titlepage"><div><div><h6 class="title"> |
| <a name="math_toolkit.dist.stat_tut.weg.neg_binom_eg.neg_binom_conf"></a><a class="link" href="neg_binom_conf.html" title="Calculating Confidence Limits on the Frequency of Occurrence for the Negative Binomial Distribution"> |
| Calculating Confidence Limits on the Frequency of Occurrence for the |
| Negative Binomial Distribution</a> |
| </h6></div></div></div> |
| <p> |
| Imagine you have a process that follows a negative binomial distribution: |
| for each trial conducted, an event either occurs or does it does not, |
| referred to as "successes" and "failures". The |
| frequency with which successes occur is variously referred to as the |
| success fraction, success ratio, success percentage, occurrence frequency, |
| or probability of occurrence. |
| </p> |
| <p> |
| If, by experiment, you want to measure the the best estimate of success |
| fraction is given simply by <span class="emphasis"><em>k</em></span> / <span class="emphasis"><em>N</em></span>, |
| for <span class="emphasis"><em>k</em></span> successes out of <span class="emphasis"><em>N</em></span> |
| trials. |
| </p> |
| <p> |
| However our confidence in that estimate will be shaped by how many |
| trials were conducted, and how many successes were observed. The static |
| member functions <code class="computeroutput"><span class="identifier">negative_binomial_distribution</span><span class="special"><>::</span><span class="identifier">find_lower_bound_on_p</span></code> |
| and <code class="computeroutput"><span class="identifier">negative_binomial_distribution</span><span class="special"><>::</span><span class="identifier">find_upper_bound_on_p</span></code> |
| allow you to calculate the confidence intervals for your estimate of |
| the success fraction. |
| </p> |
| <p> |
| The sample program <a href="../../../../../../../../example/neg_binom_confidence_limits.cpp" target="_top">neg_binom_confidence_limits.cpp</a> |
| illustrates their use. |
| </p> |
| <p> |
| </p> |
| <p> |
| First we need some includes to access the negative binomial distribution |
| (and some basic std output of course). |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="preprocessor">#include</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">distributions</span><span class="special">/</span><span class="identifier">negative_binomial</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> |
| <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="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> |
| <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> |
| <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iomanip</span><span class="special">></span> |
| <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> <span class="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">left</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></pre> |
| <p> |
| </p> |
| <p> |
| </p> |
| <p> |
| First define a table of significance levels: these are the probabilities |
| that the true occurrence frequency lies outside the calculated interval: |
| </p> |
| <p> |
| </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> |
| </p> |
| <p> |
| Confidence value as % is (1 - alpha) * 100, so alpha 0.05 == 95% |
| confidence that the true occurence frequency lies <span class="bold"><strong>inside</strong></span> |
| the calculated interval. |
| </p> |
| <p> |
| </p> |
| <p> |
| We need a function to calculate and print confidence limits for an |
| observed frequency of occurrence that follows a negative binomial |
| distribution. |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="keyword">void</span> <span class="identifier">confidence_limits_on_frequency</span><span class="special">(</span><span class="keyword">unsigned</span> <span class="identifier">trials</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="identifier">successes</span><span class="special">)</span> |
| <span class="special">{</span> |
| <span class="comment">// trials = Total number of trials. |
| </span> <span class="comment">// successes = Total number of observed successes. |
| </span> <span class="comment">// failures = trials - successes. |
| </span> <span class="comment">// success_fraction = successes /trials. |
| </span> <span class="comment">// Print out general info: |
| </span> <span class="identifier">cout</span> <span class="special"><<</span> |
| <span class="string">"______________________________________________\n"</span> |
| <span class="string">"2-Sided Confidence Limits For Success Fraction\n"</span> |
| <span class="string">"______________________________________________\n\n"</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">setprecision</span><span class="special">(</span><span class="number">7</span><span class="special">);</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">40</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">left</span> <span class="special"><<</span> <span class="string">"Number of trials"</span> <span class="special"><<</span> <span class="string">" = "</span> <span class="special"><<</span> <span class="identifier">trials</span> <span class="special"><<</span> <span class="string">"\n"</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">40</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">left</span> <span class="special"><<</span> <span class="string">"Number of successes"</span> <span class="special"><<</span> <span class="string">" = "</span> <span class="special"><<</span> <span class="identifier">successes</span> <span class="special"><<</span> <span class="string">"\n"</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">40</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">left</span> <span class="special"><<</span> <span class="string">"Number of failures"</span> <span class="special"><<</span> <span class="string">" = "</span> <span class="special"><<</span> <span class="identifier">trials</span> <span class="special">-</span> <span class="identifier">successes</span> <span class="special"><<</span> <span class="string">"\n"</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">40</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">left</span> <span class="special"><<</span> <span class="string">"Observed frequency of occurrence"</span> <span class="special"><<</span> <span class="string">" = "</span> <span class="special"><<</span> <span class="keyword">double</span><span class="special">(</span><span class="identifier">successes</span><span class="special">)</span> <span class="special">/</span> <span class="identifier">trials</span> <span class="special"><<</span> <span class="string">"\n"</span><span class="special">;</span> |
| |
| <span class="comment">// Print table header: |
| </span> <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"\n\n"</span> |
| <span class="string">"___________________________________________\n"</span> |
| <span class="string">"Confidence Lower Upper\n"</span> |
| <span class="string">" Value (%) Limit Limit\n"</span> |
| <span class="string">"___________________________________________\n"</span><span class="special">;</span></pre> |
| <p> |
| </p> |
| <p> |
| </p> |
| <p> |
| And now for the important part - the bounds themselves. For each |
| value of <span class="emphasis"><em>alpha</em></span>, we call <code class="computeroutput"><span class="identifier">find_lower_bound_on_p</span></code> |
| and <code class="computeroutput"><span class="identifier">find_upper_bound_on_p</span></code> |
| to obtain lower and upper bounds respectively. Note that since we |
| are calculating a two-sided interval, we must divide the value of |
| alpha in two. Had we been calculating a single-sided interval, for |
| example: <span class="emphasis"><em>"Calculate a lower bound so that we are P% |
| sure that the true occurrence frequency is greater than some value"</em></span> |
| then we would <span class="bold"><strong>not</strong></span> have divided by |
| two. |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"> <span class="comment">// Now print out the upper and lower limits 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"><</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 value: |
| </span> <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">fixed</span> <span class="special"><<</span> <span class="identifier">setprecision</span><span class="special">(</span><span class="number">3</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">10</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">right</span> <span class="special"><<</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="comment">// Calculate bounds: |
| </span> <span class="keyword">double</span> <span class="identifier">lower</span> <span class="special">=</span> <span class="identifier">negative_binomial</span><span class="special">::</span><span class="identifier">find_lower_bound_on_p</span><span class="special">(</span><span class="identifier">trials</span><span class="special">,</span> <span class="identifier">successes</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="number">2</span><span class="special">);</span> |
| <span class="keyword">double</span> <span class="identifier">upper</span> <span class="special">=</span> <span class="identifier">negative_binomial</span><span class="special">::</span><span class="identifier">find_upper_bound_on_p</span><span class="special">(</span><span class="identifier">trials</span><span class="special">,</span> <span class="identifier">successes</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="number">2</span><span class="special">);</span> |
| <span class="comment">// Print limits: |
| </span> <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">fixed</span> <span class="special"><<</span> <span class="identifier">setprecision</span><span class="special">(</span><span class="number">5</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">15</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">right</span> <span class="special"><<</span> <span class="identifier">lower</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">fixed</span> <span class="special"><<</span> <span class="identifier">setprecision</span><span class="special">(</span><span class="number">5</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">setw</span><span class="special">(</span><span class="number">15</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">right</span> <span class="special"><<</span> <span class="identifier">upper</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> |
| <span class="special">}</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> |
| <span class="special">}</span> <span class="comment">// void confidence_limits_on_frequency(unsigned trials, unsigned successes)</span></pre> |
| <p> |
| </p> |
| <p> |
| </p> |
| <p> |
| And then call confidence_limits_on_frequency with increasing numbers |
| of trials, but always the same success fraction 0.1, or 1 in 10. |
| </p> |
| <p> |
| </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">confidence_limits_on_frequency</span><span class="special">(</span><span class="number">20</span><span class="special">,</span> <span class="number">2</span><span class="special">);</span> <span class="comment">// 20 trials, 2 successes, 2 in 20, = 1 in 10 = 0.1 success fraction. |
| </span> <span class="identifier">confidence_limits_on_frequency</span><span class="special">(</span><span class="number">200</span><span class="special">,</span> <span class="number">20</span><span class="special">);</span> <span class="comment">// More trials, but same 0.1 success fraction. |
| </span> <span class="identifier">confidence_limits_on_frequency</span><span class="special">(</span><span class="number">2000</span><span class="special">,</span> <span class="number">200</span><span class="special">);</span> <span class="comment">// Many more trials, but same 0.1 success fraction. |
| </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> |
| <p> |
| Let's see some sample output for a 1 in 10 success ratio, first for |
| a mere 20 trials: |
| </p> |
| <pre class="programlisting">______________________________________________ |
| 2-Sided Confidence Limits For Success Fraction |
| ______________________________________________ |
| Number of trials = 20 |
| Number of successes = 2 |
| Number of failures = 18 |
| Observed frequency of occurrence = 0.1 |
| ___________________________________________ |
| Confidence Lower Upper |
| Value (%) Limit Limit |
| ___________________________________________ |
| 50.000 0.04812 0.13554 |
| 75.000 0.03078 0.17727 |
| 90.000 0.01807 0.22637 |
| 95.000 0.01235 0.26028 |
| 99.000 0.00530 0.33111 |
| 99.900 0.00164 0.41802 |
| 99.990 0.00051 0.49202 |
| 99.999 0.00016 0.55574 |
| </pre> |
| <p> |
| As you can see, even at the 95% confidence level the bounds (0.012 |
| to 0.26) are really very wide, and very asymmetric about the observed |
| value 0.1. |
| </p> |
| <p> |
| Compare that with the program output for a mass 2000 trials: |
| </p> |
| <pre class="programlisting">______________________________________________ |
| 2-Sided Confidence Limits For Success Fraction |
| ______________________________________________ |
| Number of trials = 2000 |
| Number of successes = 200 |
| Number of failures = 1800 |
| Observed frequency of occurrence = 0.1 |
| ___________________________________________ |
| Confidence Lower Upper |
| Value (%) Limit Limit |
| ___________________________________________ |
| 50.000 0.09536 0.10445 |
| 75.000 0.09228 0.10776 |
| 90.000 0.08916 0.11125 |
| 95.000 0.08720 0.11352 |
| 99.000 0.08344 0.11802 |
| 99.900 0.07921 0.12336 |
| 99.990 0.07577 0.12795 |
| 99.999 0.07282 0.13206 |
| </pre> |
| <p> |
| Now even when the confidence level is very high, the limits (at 99.999%, |
| 0.07 to 0.13) are really quite close and nearly symmetric to the observed |
| value of 0.1. |
| </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 © 2006 , 2007, 2008, 2009, 2010 John Maddock, Paul A. Bristow, |
| Hubert Holin, Xiaogang Zhang, Bruno Lalande, Johan Råde, Gautam Sewani and |
| Thijs van den Berg<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_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="neg_binom_size_eg.html"><img src="../../../../../../../../../../doc/src/images/next.png" alt="Next"></a> |
| </div> |
| </body> |
| </html> |