| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> |
| <title>Binomial Quiz Example</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="../binom_eg.html" title="Binomial Distribution Examples"> |
| <link rel="prev" href="binomial_coinflip_example.html" title="Binomial Coin-Flipping Example"> |
| <link rel="next" href="binom_conf.html" title="Calculating Confidence Limits on the Frequency of Occurrence for a Binomial Distribution"> |
| </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="binomial_coinflip_example.html"><img src="../../../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../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="binom_conf.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.binom_eg.binomial_quiz_example"></a><a class="link" href="binomial_quiz_example.html" title="Binomial Quiz Example"> |
| Binomial Quiz Example</a> |
| </h6></div></div></div> |
| <p> |
| </p> |
| <p> |
| A multiple choice test has four possible answers to each of 16 questions. |
| A student guesses the answer to each question, so the probability |
| of getting a correct answer on any given question is one in four, |
| a quarter, 1/4, 25% or fraction 0.25. The conditions of the binomial |
| experiment are assumed to be met: n = 16 questions constitute the |
| trials; each question results in one of two possible outcomes (correct |
| or incorrect); the probability of being correct is 0.25 and is constant |
| if no knowledge about the subject is assumed; the questions are answered |
| independently if the student's answer to a question in no way influences |
| his/her answer to another question. |
| </p> |
| <p> |
| </p> |
| <p> |
| First, we need to be able to use the binomial distribution constructor |
| (and some std input/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">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">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="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ios</span><span class="special">;</span> <span class="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">flush</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">right</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="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">setw</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="preprocessor">#include</span> <span class="special"><</span><span class="identifier">exception</span><span class="special">></span> |
| <span class="keyword">using</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">exception</span><span class="special">;</span> |
| |
| |
| </pre> |
| <p> |
| </p> |
| <p> |
| </p> |
| <p> |
| The number of correct answers, X, is distributed as a binomial random |
| variable with binomial distribution parameters: questions n and success |
| fraction probability p. So we construct a binomial distribution: |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="keyword">int</span> <span class="identifier">questions</span> <span class="special">=</span> <span class="number">16</span><span class="special">;</span> <span class="comment">// All the questions in the quiz. |
| </span><span class="keyword">int</span> <span class="identifier">answers</span> <span class="special">=</span> <span class="number">4</span><span class="special">;</span> <span class="comment">// Possible answers to each question. |
| </span><span class="keyword">double</span> <span class="identifier">success_fraction</span> <span class="special">=</span> <span class="number">1.</span> <span class="special">/</span> <span class="identifier">answers</span><span class="special">;</span> <span class="comment">// If a random guess, p = 1/4 = 0.25. |
| </span><span class="identifier">binomial</span> <span class="identifier">quiz</span><span class="special">(</span><span class="identifier">questions</span><span class="special">,</span> <span class="identifier">success_fraction</span><span class="special">);</span></pre> |
| <p> |
| </p> |
| <p> |
| </p> |
| <p> |
| and display the distribution parameters we used thus: |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"In a quiz with "</span> <span class="special"><<</span> <span class="identifier">quiz</span><span class="special">.</span><span class="identifier">trials</span><span class="special">()</span> |
| <span class="special"><<</span> <span class="string">" questions and with a probability of guessing right of "</span> |
| <span class="special"><<</span> <span class="identifier">quiz</span><span class="special">.</span><span class="identifier">success_fraction</span><span class="special">()</span> <span class="special">*</span> <span class="number">100</span> <span class="special"><<</span> <span class="string">" %"</span> |
| <span class="special"><<</span> <span class="string">" or 1 in "</span> <span class="special"><<</span> <span class="keyword">static_cast</span><span class="special"><</span><span class="keyword">int</span><span class="special">>(</span><span class="number">1.</span> <span class="special">/</span> <span class="identifier">quiz</span><span class="special">.</span><span class="identifier">success_fraction</span><span class="special">())</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span></pre> |
| <p> |
| </p> |
| <p> |
| </p> |
| <p> |
| Show a few probabilities of just guessing: |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Probability of getting none right is "</span> <span class="special"><<</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">0</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 0.010023 |
| </span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Probability of getting exactly one right is "</span> <span class="special"><<</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">1</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Probability of getting exactly two right is "</span> <span class="special"><<</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">2</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> |
| <span class="keyword">int</span> <span class="identifier">pass_score</span> <span class="special">=</span> <span class="number">11</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Probability of getting exactly "</span> <span class="special"><<</span> <span class="identifier">pass_score</span> <span class="special"><<</span> <span class="string">" answers right by chance is "</span> |
| <span class="special"><<</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="identifier">pass_score</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Probability of getting all "</span> <span class="special"><<</span> <span class="identifier">questions</span> <span class="special"><<</span> <span class="string">" answers right by chance is "</span> |
| <span class="special"><<</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="identifier">questions</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span></pre> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting">Probability of getting none right is 0.0100226 |
| Probability of getting exactly one right is 0.0534538 |
| Probability of getting exactly two right is 0.133635 |
| Probability of getting exactly 11 right is 0.000247132 |
| Probability of getting exactly all 16 answers right by chance is 2.32831e-010 |
| </pre> |
| <p> |
| </p> |
| <p> |
| These don't give any encouragement to guessers! |
| </p> |
| <p> |
| </p> |
| <p> |
| We can tabulate the 'getting exactly right' ( == ) probabilities |
| thus: |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"\n"</span> <span class="string">"Guessed Probability"</span> <span class="special"><<</span> <span class="identifier">right</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> |
| <span class="keyword">for</span> <span class="special">(</span><span class="keyword">int</span> <span class="identifier">successes</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">successes</span> <span class="special"><=</span> <span class="identifier">questions</span><span class="special">;</span> <span class="identifier">successes</span><span class="special">++)</span> |
| <span class="special">{</span> |
| <span class="keyword">double</span> <span class="identifier">probability</span> <span class="special">=</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="identifier">successes</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">2</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">successes</span> <span class="special"><<</span> <span class="string">" "</span> <span class="special"><<</span> <span class="identifier">probability</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></pre> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting">Guessed Probability |
| 0 0.0100226 |
| 1 0.0534538 |
| 2 0.133635 |
| 3 0.207876 |
| 4 0.225199 |
| 5 0.180159 |
| 6 0.110097 |
| 7 0.0524273 |
| 8 0.0196602 |
| 9 0.00582526 |
| 10 0.00135923 |
| 11 0.000247132 |
| 12 3.43239e-005 |
| 13 3.5204e-006 |
| 14 2.51457e-007 |
| 15 1.11759e-008 |
| 16 2.32831e-010 |
| </pre> |
| <p> |
| </p> |
| <p> |
| Then we can add the probabilities of some 'exactly right' like this: |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Probability of getting none or one right is "</span> <span class="special"><<</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">0</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">1</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span></pre> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting">Probability of getting none or one right is 0.0634764 |
| </pre> |
| <p> |
| </p> |
| <p> |
| But if more than a couple of scores are involved, it is more convenient |
| (and may be more accurate) to use the Cumulative Distribution Function |
| (cdf) instead: |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Probability of getting none or one right is "</span> <span class="special"><<</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">1</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span></pre> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting">Probability of getting none or one right is 0.0634764 |
| </pre> |
| <p> |
| </p> |
| <p> |
| Since the cdf is inclusive, we can get the probability of getting |
| up to 10 right ( <= ) |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Probability of getting <= 10 right (to fail) is "</span> <span class="special"><<</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">10</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span></pre> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting">Probability of getting <= 10 right (to fail) is 0.999715 |
| </pre> |
| <p> |
| </p> |
| <p> |
| To get the probability of getting 11 or more right (to pass), it |
| is tempting to use |
| </p> |
| <pre class="programlisting"><span class="number">1</span> <span class="special">-</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">10</span><span class="special">)</span></pre> |
| <p> |
| to get the probability of > 10 |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Probability of getting > 10 right (to pass) is "</span> <span class="special"><<</span> <span class="number">1</span> <span class="special">-</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">10</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span></pre> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting">Probability of getting > 10 right (to pass) is 0.000285239 |
| </pre> |
| <p> |
| </p> |
| <p> |
| But this should be resisted in favor of using the complement function. |
| <a class="link" href="../../overview/complements.html#why_complements">Why complements?</a> |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Probability of getting > 10 right (to pass) is "</span> <span class="special"><<</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">10</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span></pre> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting">Probability of getting > 10 right (to pass) is 0.000285239 |
| </pre> |
| <p> |
| </p> |
| <p> |
| And we can check that these two, <= 10 and > 10, add up to |
| unity. |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">BOOST_ASSERT</span><span class="special">((</span><span class="identifier">cdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">10</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">10</span><span class="special">)))</span> <span class="special">==</span> <span class="number">1.</span><span class="special">);</span></pre> |
| <p> |
| </p> |
| <p> |
| </p> |
| <p> |
| If we want a < rather than a <= test, because the CDF is inclusive, |
| we must subtract one from the score. |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Probability of getting less than "</span> <span class="special"><<</span> <span class="identifier">pass_score</span> |
| <span class="special"><<</span> <span class="string">" (< "</span> <span class="special"><<</span> <span class="identifier">pass_score</span> <span class="special"><<</span> <span class="string">") answers right by guessing is "</span> |
| <span class="special"><<</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="identifier">pass_score</span> <span class="special">-</span><span class="number">1</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span></pre> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting">Probability of getting less than 11 (< 11) answers right by guessing is 0.999715 |
| </pre> |
| <p> |
| </p> |
| <p> |
| and similarly to get a >= rather than a > test we also need |
| to subtract one from the score (and can again check the sum is unity). |
| This is because if the cdf is <span class="emphasis"><em>inclusive</em></span>, then |
| its complement must be <span class="emphasis"><em>exclusive</em></span> otherwise there |
| would be one possible outcome counted twice! |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Probability of getting at least "</span> <span class="special"><<</span> <span class="identifier">pass_score</span> |
| <span class="special"><<</span> <span class="string">"(>= "</span> <span class="special"><<</span> <span class="identifier">pass_score</span> <span class="special"><<</span> <span class="string">") answers right by guessing is "</span> |
| <span class="special"><<</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="identifier">pass_score</span><span class="special">-</span><span class="number">1</span><span class="special">))</span> |
| <span class="special"><<</span> <span class="string">", only 1 in "</span> <span class="special"><<</span> <span class="number">1</span><span class="special">/</span><span class="identifier">cdf</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="identifier">pass_score</span><span class="special">-</span><span class="number">1</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> |
| |
| <span class="identifier">BOOST_ASSERT</span><span class="special">((</span><span class="identifier">cdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="identifier">pass_score</span> <span class="special">-</span><span class="number">1</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="identifier">pass_score</span><span class="special">-</span><span class="number">1</span><span class="special">)))</span> <span class="special">==</span> <span class="number">1</span><span class="special">);</span></pre> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting">Probability of getting at least 11 (>= 11) answers right by guessing is 0.000285239, only 1 in 3505.83 |
| </pre> |
| <p> |
| </p> |
| <p> |
| Finally we can tabulate some probabilities: |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"\n"</span> <span class="string">"At most (<=)"</span><span class="string">"\n"</span><span class="string">"Guessed OK Probability"</span> <span class="special"><<</span> <span class="identifier">right</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> |
| <span class="keyword">for</span> <span class="special">(</span><span class="keyword">int</span> <span class="identifier">score</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">score</span> <span class="special"><=</span> <span class="identifier">questions</span><span class="special">;</span> <span class="identifier">score</span><span class="special">++)</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">2</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">score</span> <span class="special"><<</span> <span class="string">" "</span> <span class="special"><<</span> <span class="identifier">setprecision</span><span class="special">(</span><span class="number">10</span><span class="special">)</span> |
| <span class="special"><<</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="identifier">score</span><span class="special">)</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></pre> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting">At most (<=) |
| Guessed OK Probability |
| 0 0.01002259576 |
| 1 0.0634764398 |
| 2 0.1971110499 |
| 3 0.4049871101 |
| 4 0.6301861752 |
| 5 0.8103454274 |
| 6 0.9204427481 |
| 7 0.9728700437 |
| 8 0.9925302796 |
| 9 0.9983555346 |
| 10 0.9997147608 |
| 11 0.9999618928 |
| 12 0.9999962167 |
| 13 0.9999997371 |
| 14 0.9999999886 |
| 15 0.9999999998 |
| 16 1 |
| </pre> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"\n"</span> <span class="string">"At least (>)"</span><span class="string">"\n"</span><span class="string">"Guessed OK Probability"</span> <span class="special"><<</span> <span class="identifier">right</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> |
| <span class="keyword">for</span> <span class="special">(</span><span class="keyword">int</span> <span class="identifier">score</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">score</span> <span class="special"><=</span> <span class="identifier">questions</span><span class="special">;</span> <span class="identifier">score</span><span class="special">++)</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">2</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">score</span> <span class="special"><<</span> <span class="string">" "</span> <span class="special"><<</span> <span class="identifier">setprecision</span><span class="special">(</span><span class="number">10</span><span class="special">)</span> |
| <span class="special"><<</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="identifier">score</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> |
| <span class="special">}</span></pre> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting">At least (>) |
| Guessed OK Probability |
| 0 0.9899774042 |
| 1 0.9365235602 |
| 2 0.8028889501 |
| 3 0.5950128899 |
| 4 0.3698138248 |
| 5 0.1896545726 |
| 6 0.07955725188 |
| 7 0.02712995629 |
| 8 0.00746972044 |
| 9 0.001644465374 |
| 10 0.0002852391917 |
| 11 3.810715862e-005 |
| 12 3.783265129e-006 |
| 13 2.628657967e-007 |
| 14 1.140870154e-008 |
| 15 2.328306437e-010 |
| 16 0 |
| </pre> |
| <p> |
| </p> |
| <p> |
| We now consider the probabilities of <span class="bold"><strong>ranges</strong></span> |
| of correct guesses. |
| </p> |
| <p> |
| </p> |
| <p> |
| First, calculate the probability of getting a range of guesses right, |
| by adding the exact probabilities of each from low ... high. |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="keyword">int</span> <span class="identifier">low</span> <span class="special">=</span> <span class="number">3</span><span class="special">;</span> <span class="comment">// Getting at least 3 right. |
| </span><span class="keyword">int</span> <span class="identifier">high</span> <span class="special">=</span> <span class="number">5</span><span class="special">;</span> <span class="comment">// Getting as most 5 right. |
| </span><span class="keyword">double</span> <span class="identifier">sum</span> <span class="special">=</span> <span class="number">0.</span><span class="special">;</span> |
| <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="identifier">low</span><span class="special">;</span> <span class="identifier">i</span> <span class="special"><=</span> <span class="identifier">high</span><span class="special">;</span> <span class="identifier">i</span><span class="special">++)</span> |
| <span class="special">{</span> |
| <span class="identifier">sum</span> <span class="special">+=</span> <span class="identifier">pdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="identifier">i</span><span class="special">);</span> |
| <span class="special">}</span> |
| <span class="identifier">cout</span><span class="special">.</span><span class="identifier">precision</span><span class="special">(</span><span class="number">4</span><span class="special">);</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Probability of getting between "</span> |
| <span class="special"><<</span> <span class="identifier">low</span> <span class="special"><<</span> <span class="string">" and "</span> <span class="special"><<</span> <span class="identifier">high</span> <span class="special"><<</span> <span class="string">" answers right by guessing is "</span> |
| <span class="special"><<</span> <span class="identifier">sum</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 0.61323</span></pre> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting">Probability of getting between 3 and 5 answers right by guessing is 0.6132 |
| </pre> |
| <p> |
| </p> |
| <p> |
| Or, usually better, we can use the difference of cdfs instead: |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Probability of getting between "</span> <span class="special"><<</span> <span class="identifier">low</span> <span class="special"><<</span> <span class="string">" and "</span> <span class="special"><<</span> <span class="identifier">high</span> <span class="special"><<</span> <span class="string">" answers right by guessing is "</span> |
| <span class="special"><<</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="identifier">high</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="identifier">low</span> <span class="special">-</span> <span class="number">1</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 0.61323</span></pre> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting">Probability of getting between 3 and 5 answers right by guessing is 0.6132 |
| </pre> |
| <p> |
| </p> |
| <p> |
| And we can also try a few more combinations of high and low choices: |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">low</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> <span class="identifier">high</span> <span class="special">=</span> <span class="number">6</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Probability of getting between "</span> <span class="special"><<</span> <span class="identifier">low</span> <span class="special"><<</span> <span class="string">" and "</span> <span class="special"><<</span> <span class="identifier">high</span> <span class="special"><<</span> <span class="string">" answers right by guessing is "</span> |
| <span class="special"><<</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="identifier">high</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="identifier">low</span> <span class="special">-</span> <span class="number">1</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 1 and 6 P= 0.91042 |
| </span><span class="identifier">low</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> <span class="identifier">high</span> <span class="special">=</span> <span class="number">8</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Probability of getting between "</span> <span class="special"><<</span> <span class="identifier">low</span> <span class="special"><<</span> <span class="string">" and "</span> <span class="special"><<</span> <span class="identifier">high</span> <span class="special"><<</span> <span class="string">" answers right by guessing is "</span> |
| <span class="special"><<</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="identifier">high</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="identifier">low</span> <span class="special">-</span> <span class="number">1</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 1 <= x 8 P = 0.9825 |
| </span><span class="identifier">low</span> <span class="special">=</span> <span class="number">4</span><span class="special">;</span> <span class="identifier">high</span> <span class="special">=</span> <span class="number">4</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Probability of getting between "</span> <span class="special"><<</span> <span class="identifier">low</span> <span class="special"><<</span> <span class="string">" and "</span> <span class="special"><<</span> <span class="identifier">high</span> <span class="special"><<</span> <span class="string">" answers right by guessing is "</span> |
| <span class="special"><<</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="identifier">high</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">cdf</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="identifier">low</span> <span class="special">-</span> <span class="number">1</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 4 <= x 4 P = 0.22520</span></pre> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting">Probability of getting between 1 and 6 answers right by guessing is 0.9104 |
| Probability of getting between 1 and 8 answers right by guessing is 0.9825 |
| Probability of getting between 4 and 4 answers right by guessing is 0.2252 |
| </pre> |
| <p> |
| <a name="math_toolkit.dist.stat_tut.weg.binom_eg.binomial_quiz_example.using_binomial_distribution_moments"></a> |
| </p> |
| <h5> |
| <a name="id954256"></a> |
| <a class="link" href="binomial_quiz_example.html#math_toolkit.dist.stat_tut.weg.binom_eg.binomial_quiz_example.using_binomial_distribution_moments">Using |
| Binomial distribution moments</a> |
| </h5> |
| <p> |
| </p> |
| <p> |
| Using moments of the distribution, we can say more about the spread |
| of results from guessing. |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"By guessing, on average, one can expect to get "</span> <span class="special"><<</span> <span class="identifier">mean</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" correct answers."</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Standard deviation is "</span> <span class="special"><<</span> <span class="identifier">standard_deviation</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"So about 2/3 will lie within 1 standard deviation and get between "</span> |
| <span class="special"><<</span> <span class="identifier">ceil</span><span class="special">(</span><span class="identifier">mean</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">)</span> <span class="special">-</span> <span class="identifier">standard_deviation</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">))</span> <span class="special"><<</span> <span class="string">" and "</span> |
| <span class="special"><<</span> <span class="identifier">floor</span><span class="special">(</span><span class="identifier">mean</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">)</span> <span class="special">+</span> <span class="identifier">standard_deviation</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">))</span> <span class="special"><<</span> <span class="string">" correct."</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Mode (the most frequent) is "</span> <span class="special"><<</span> <span class="identifier">mode</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Skewness is "</span> <span class="special"><<</span> <span class="identifier">skewness</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span></pre> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting">By guessing, on average, one can expect to get 4 correct answers. |
| Standard deviation is 1.732 |
| So about 2/3 will lie within 1 standard deviation and get between 3 and 5 correct. |
| Mode (the most frequent) is 4 |
| Skewness is 0.2887 |
| </pre> |
| <p> |
| <a name="math_toolkit.dist.stat_tut.weg.binom_eg.binomial_quiz_example.quantiles"></a> |
| </p> |
| <h5> |
| <a name="id954628"></a> |
| <a class="link" href="binomial_quiz_example.html#math_toolkit.dist.stat_tut.weg.binom_eg.binomial_quiz_example.quantiles">Quantiles</a> |
| </h5> |
| <p> |
| </p> |
| <p> |
| The quantiles (percentiles or percentage points) for a few probability |
| levels: |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Quartiles "</span> <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">0.25</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" to "</span> |
| <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">0.25</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// Quartiles |
| </span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"1 standard deviation "</span> <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">0.33</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" to "</span> |
| <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">0.67</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 1 sd |
| </span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Deciles "</span> <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">0.1</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" to "</span> |
| <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">0.1</span><span class="special">))<<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// Deciles |
| </span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"5 to 95% "</span> <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">0.05</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" to "</span> |
| <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">0.05</span><span class="special">))<<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 5 to 95% |
| </span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"2.5 to 97.5% "</span> <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">0.025</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" to "</span> |
| <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">0.025</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 2.5 to 97.5% |
| </span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"2 to 98% "</span> <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">0.02</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" to "</span> |
| <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">0.02</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 2 to 98% |
| </span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"If guessing then percentiles 1 to 99% will get "</span> <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">0.01</span><span class="special">)</span> |
| <span class="special"><<</span> <span class="string">" to "</span> <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">0.01</span><span class="special">))</span> <span class="special"><<</span> <span class="string">" right."</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span></pre> |
| <p> |
| </p> |
| <p> |
| </p> |
| <p> |
| Notice that these output integral values because the default policy |
| is <code class="computeroutput"><span class="identifier">integer_round_outwards</span></code>. |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting">Quartiles 2 to 5 |
| 1 standard deviation 2 to 5 |
| Deciles 1 to 6 |
| 5 to 95% 0 to 7 |
| 2.5 to 97.5% 0 to 8 |
| 2 to 98% 0 to 8 |
| </pre> |
| <p> |
| </p> |
| <p> |
| Quantiles values are controlled by the <a class="link" href="../../../../policy/pol_ref/discrete_quant_ref.html" title="Discrete Quantile Policies">discrete |
| quantile policy</a> chosen. The default is <code class="computeroutput"><span class="identifier">integer_round_outwards</span></code>, |
| so the lower quantile is rounded down, and the upper quantile is |
| rounded up. |
| </p> |
| <p> |
| </p> |
| <p> |
| But we might believe that the real values tell us a little more - |
| see <a class="link" href="../../../../policy/pol_tutorial/understand_dis_quant.html" title="Understanding Quantiles of Discrete Distributions">Understanding |
| Discrete Quantile Policy</a>. |
| </p> |
| <p> |
| </p> |
| <p> |
| We could control the policy for <span class="bold"><strong>all</strong></span> |
| distributions by |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_MATH_DISCRETE_QUANTILE_POLICY</span> <span class="identifier">real</span> |
| |
| <span class="identifier">at</span> <span class="identifier">the</span> <span class="identifier">head</span> <span class="identifier">of</span> <span class="identifier">the</span> <span class="identifier">program</span> <span class="identifier">would</span> <span class="identifier">make</span> <span class="keyword">this</span> <span class="identifier">policy</span> <span class="identifier">apply</span> |
| </pre> |
| <p> |
| </p> |
| <p> |
| #define BOOST_MATH_DISCRETE_QUANTILE_POLICY real |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">at</span> <span class="identifier">the</span> <span class="identifier">head</span> <span class="identifier">of</span> <span class="identifier">the</span> <span class="identifier">program</span> <span class="identifier">would</span> <span class="identifier">make</span> <span class="keyword">this</span> <span class="identifier">policy</span> <span class="identifier">apply</span> |
| </pre> |
| <p> |
| </p> |
| <p> |
| at the head of the program would make this policy apply to this |
| <span class="bold"><strong>one, and only</strong></span>, translation unit. |
| </p> |
| <p> |
| </p> |
| <p> |
| Or we can now create a (typedef for) policy that has discrete quantiles |
| real (here avoiding any 'using namespaces ...' statements): |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><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">policies</span><span class="special">::</span><span class="identifier">policy</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">policies</span><span class="special">::</span><span class="identifier">discrete_quantile</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">policies</span><span class="special">::</span><span class="identifier">real</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">policies</span><span class="special">::</span><span class="identifier">integer_round_outwards</span><span class="special">;</span> <span class="comment">// Default. |
| </span><span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">policies</span><span class="special">::</span><span class="identifier">policy</span><span class="special"><</span><span class="identifier">discrete_quantile</span><span class="special"><</span><span class="identifier">real</span><span class="special">></span> <span class="special">></span> <span class="identifier">real_quantile_policy</span><span class="special">;</span></pre> |
| <p> |
| </p> |
| <p> |
| </p> |
| <p> |
| Add a custom binomial distribution called |
| </p> |
| <pre class="programlisting"><span class="identifier">real_quantile_binomial</span></pre> |
| <p> |
| that uses |
| </p> |
| <pre class="programlisting"><span class="identifier">real_quantile_policy</span></pre> |
| <p> |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><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">binomial_distribution</span><span class="special">;</span> |
| <span class="keyword">typedef</span> <span class="identifier">binomial_distribution</span><span class="special"><</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">real_quantile_policy</span><span class="special">></span> <span class="identifier">real_quantile_binomial</span><span class="special">;</span></pre> |
| <p> |
| </p> |
| <p> |
| </p> |
| <p> |
| Construct an object of this custom distribution: |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">real_quantile_binomial</span> <span class="identifier">quiz_real</span><span class="special">(</span><span class="identifier">questions</span><span class="special">,</span> <span class="identifier">success_fraction</span><span class="special">);</span></pre> |
| <p> |
| </p> |
| <p> |
| </p> |
| <p> |
| And use this to show some quantiles - that now have real rather than |
| integer values. |
| </p> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting"><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Quartiles "</span> <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">quiz</span><span class="special">,</span> <span class="number">0.25</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" to "</span> |
| <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">quiz_real</span><span class="special">,</span> <span class="number">0.25</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// Quartiles 2 to 4.6212 |
| </span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"1 standard deviation "</span> <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">quiz_real</span><span class="special">,</span> <span class="number">0.33</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" to "</span> |
| <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">quiz_real</span><span class="special">,</span> <span class="number">0.67</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 1 sd 2.6654 4.194 |
| </span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"Deciles "</span> <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">quiz_real</span><span class="special">,</span> <span class="number">0.1</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" to "</span> |
| <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">quiz_real</span><span class="special">,</span> <span class="number">0.1</span><span class="special">))<<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// Deciles 1.3487 5.7583 |
| </span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"5 to 95% "</span> <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">quiz_real</span><span class="special">,</span> <span class="number">0.05</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" to "</span> |
| <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">quiz_real</span><span class="special">,</span> <span class="number">0.05</span><span class="special">))<<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 5 to 95% 0.83739 6.4559 |
| </span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"2.5 to 97.5% "</span> <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">quiz_real</span><span class="special">,</span> <span class="number">0.025</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" to "</span> |
| <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">quiz_real</span><span class="special">,</span> <span class="number">0.025</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 2.5 to 97.5% 0.42806 7.0688 |
| </span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"2 to 98% "</span> <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">quiz_real</span><span class="special">,</span> <span class="number">0.02</span><span class="special">)</span> <span class="special"><<</span> <span class="string">" to "</span> |
| <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">quiz_real</span><span class="special">,</span> <span class="number">0.02</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> <span class="comment">// 2 to 98% 0.31311 7.7880 |
| </span> |
| <span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"If guessing, then percentiles 1 to 99% will get "</span> <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">quiz_real</span><span class="special">,</span> <span class="number">0.01</span><span class="special">)</span> |
| <span class="special"><<</span> <span class="string">" to "</span> <span class="special"><<</span> <span class="identifier">quantile</span><span class="special">(</span><span class="identifier">complement</span><span class="special">(</span><span class="identifier">quiz_real</span><span class="special">,</span> <span class="number">0.01</span><span class="special">))</span> <span class="special"><<</span> <span class="string">" right."</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span></pre> |
| <p> |
| </p> |
| <p> |
| |
| </p> |
| <pre class="programlisting">Real Quantiles |
| Quartiles 2 to 4.621 |
| 1 standard deviation 2.665 to 4.194 |
| Deciles 1.349 to 5.758 |
| 5 to 95% 0.8374 to 6.456 |
| 2.5 to 97.5% 0.4281 to 7.069 |
| 2 to 98% 0.3131 to 7.252 |
| If guessing then percentiles 1 to 99% will get 0 to 7.788 right. |
| </pre> |
| <p> |
| </p> |
| <p> |
| See <a href="../../../../../../../../example/binomial_quiz_example.cpp" target="_top">binomial_quiz_example.cpp</a> |
| for full source code and output. |
| </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="binomial_coinflip_example.html"><img src="../../../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../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="binom_conf.html"><img src="../../../../../../../../../../doc/src/images/next.png" alt="Next"></a> |
| </div> |
| </body> |
| </html> |