
BoostCommit : 
From: pbristow_at_[hidden]
Date: 20070917 11:06:34
Author: pbristow
Date: 20070917 11:06:32 EDT (Mon, 17 Sep 2007)
New Revision: 39348
URL: http://svn.boost.org/trac/boost/changeset/39348
Log:
revised binomial quiz example
Text files modified:
sandbox/math_toolkit/libs/math/example/binomial_quiz_example.cpp  549 +++++++++++++++++++++++++
1 files changed, 354 insertions(+), 195 deletions()
Modified: sandbox/math_toolkit/libs/math/example/binomial_quiz_example.cpp
==============================================================================
 sandbox/math_toolkit/libs/math/example/binomial_quiz_example.cpp (original)
+++ sandbox/math_toolkit/libs/math/example/binomial_quiz_example.cpp 20070917 11:06:32 EDT (Mon, 17 Sep 2007)
@@ 17,7 +17,8 @@
/*`
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 1/4 = 0.25.
+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);
@@ 25,115 +26,221 @@
the questions are answered independently if the student's answer to a question
in no way influences his/her answer to another question.
The number of correct answers, X, is distributed as a binomial random variable
with binomial distribution parameters n = 16 and p = 0.25.
The program below displays the probabilities for each of the 17 possible outcomes,
i.e., for X = 0, 1, ..., 16, in a line chart.

First we need to be able to use the binomial distribution constructor
(and some std input/output, of course)
+First, we need to be able to use the binomial distribution constructor
+(and some std input/output, of course).
*/
#include <boost/math/distributions/binomial.hpp>
using boost::math::binomial;
#include <iostream>
using std::cout;
using std::endl;
using std::ios;
using std::flush;
using std::left;
using std::right;
using std::fixed;
+ using std::cout; using std::endl;
+ using std::ios; using std::flush; using std::left; using std::right; using std::fixed;
#include <iomanip>
using std::setw;
using std::setprecision;
+ using std::setw; using std::setprecision;
//][/binomial_quiz_example1]
//[binomial_quiz_example2
int main()
{
try
{
cout << "Binomial distribution example  guessing in a quiz." << endl;
 /*`
 The number of correct answers, X, is distributed as a binomial random variable
 with binomial distribution parameters n = 16 and p = 0.25.
 */
 cout.precision(5); // Might be able to calculate a best value for this?
+//[binomial_quiz_example2
+/*`
+The number of correct answers, X, is distributed as a binomial random variable
+with binomial distribution parameters questions n = 16 and success fraction probability p = 0.25,
+so we construct a binomial distribution:
+*/
int questions = 16;
int answers = 4; // possible answers to each question.
double success_fraction = (double)answers / (double)questions; // If a random guess.
// Caution: = answers / questions would be zero (because they are integers)!
 int pass_score = 11;

 /*`
 Construct our Binomial distribution.
 */
binomial quiz(questions, success_fraction);
/*`
 and display the parameters we used.
+ and display the parameters we used thus:
*/
cout << "In a quiz with " << quiz.trials()
<< " questions and with a probability of guessing right of "
<< quiz.success_fraction() * 100 << " %"
<< " or 1 in " << static_cast<int>(1. / quiz.success_fraction()) << endl;
 /*`
 Show some probabilities of just guessing: these don't give any
 encouragement to guessers!
 */
+/*`
+Show a few probabilities of just guessing: these don't give any
+encouragement to guessers!
+*/
cout << "Probability of getting none right is " << pdf(quiz, 0) << endl; // 0.010023
 cout << "Probability of getting at least one right is " << 1  pdf(quiz, 1) << endl; // 0.94655
 cout << "Probability of getting none or one right is " << pdf(quiz, 0) + pdf(quiz, 1) << endl; // 0.063476
cout << "Probability of getting exactly one right is " << pdf(quiz, 1) << endl;
 cout << "Probability of getting exactly 11 right is " << pdf(quiz, 11) << endl;
 cout << "Probability of getting > 10 right (to pass) is " << cdf(complement(quiz, 10)) << endl;

 // Using Binomial probabilities.
 cout << "The probability of getting all the answers wrong by chance is "
 << pdf(quiz, 0) << endl;
 cout << "The probability of getting all the answers right by chance is "
+ cout << "Probability of getting exactly two right is " << pdf(quiz, 2) << endl;
+ int pass_score = 11;
+ cout << "Probability of getting exactly " << pass_score << " answers right by chance is "
<< pdf(quiz, questions) << endl;
 cout << "The probability of getting exactly " << pass_score
 << " answers right by guessing is " << pdf(quiz, pass_score) << endl << endl;

 cout << "The probability of getting less then " << pass_score
 << "(< " << pass_score << ") answers right by guessing is "
 << cdf(quiz, pass_score) << endl;

 cout << "The probability of getting at least " << pass_score
 << "(>= " << pass_score << ") answers right by guessing is "
 << cdf(complement(quiz, pass_score1))
 << " only 1 in " << 1/cdf(complement(quiz, pass_score1)) << endl;
+/*`
+[pre
+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 answers right by chance is 2.32831e010
+]
+These don't give any encouragement to guessers!
 /*`
 Tabulate probability versus number right.
 */
 cout << "\n" "Guessed right Probability" << right << endl;
+We can tabulate the getting exactly ( == ) right thus:
+*/
+ cout << "\n" "Guessed Probability" << right << endl;
for (int successes = 0; successes <= questions; successes++)
{
double probability = pdf(quiz, successes);
 cout << setw(2) << successes << " " << probability << endl;
+ cout << setw(2) << successes << " " << probability << endl;
}
cout << endl;
+/*`
+[pre
+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.43239e005
+13 3.5204e006
+14 2.51457e007
+15 1.11759e008
+16 2.32831e010
+]
+Then we can add the probabilities of several 'exactly right' like this:
+*/
+ cout << "Probability of getting none or one right is " << pdf(quiz, 0) + pdf(quiz, 1) << endl;
+
+/*`
+[pre
+Probability of getting none or one right is 0.0634764
+]
+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:
+*/
+ cout << "Probability of getting none or one right is " << cdf(quiz, 1) << endl;
+/*`
+[pre
+Probability of getting none or one right is 0.0634764
+]
+Since the cdf is inclusive, ( <= )
+*/
+ cout << "Probability of getting <= 10 right (to fail) is " << cdf(quiz, 10) << endl;
+/*`
+[pre
+Probability of getting <= 10 right (to fail) is 0.999715
+]
+It is tempting to write
+*/
+ cout << "Probability of getting > 10 right (to pass) is " << 1  cdf(quiz, 10) << endl;
+/*`
+[pre
+Probability of getting > 10 right (to pass) is 0.000285239
+]
+But this should be resisted in favor of using the complement function thus. __why_complements.
+*/
+ cout << "Probability of getting > 10 right (to pass) is " << cdf(complement(quiz, 10)) << endl;
+/*`
+[pre
+Probability of getting > 10 right (to pass) is 0.000285239
+]
+And we can check that these two, <= 10 and > 10, add up to unity.
+*/
+BOOST_ASSERT((cdf(quiz, 10) + cdf(complement(quiz, 10))) == 1.);
+/*`
+If we want a < rather than a <= test, because the CDF is inclusive, we must subtract one from the score.
+*/
+ cout << "Probability of getting less than " << pass_score
+ << " (< " << pass_score << ") answers right by guessing is "
+ << cdf(quiz, pass_score 1) << endl;
+/*`
+[pre
+Probability of getting less than 11 (< 11) answers right by guessing is 0.999715
+]
+and similarly to get a > rather than a >= test, because the cdf complement is also inclusive,
+we also need to subtract one from the score (and again check the sum is unity).
+*/
+ cout << "Probability of getting at least " << pass_score
+ << "(>= " << pass_score << ") answers right by guessing is "
+ << cdf(complement(quiz, pass_score1))
+ << ", only 1 in " << 1/cdf(complement(quiz, pass_score1)) << endl;
+ BOOST_ASSERT((cdf(quiz, pass_score 1) + cdf(complement(quiz, pass_score1))) == 1);
 cout << "\n" "At most (<=)""\n""Guessed right Probability" << right << endl;
+/*`
+[pre
+Probability of getting at least 11(>= 11) answers right by guessing is 0.000285239, only 1 in 3505.83
+]
+Finally we can tabulate some probabilities:
+*/
+ cout << "\n" "At most (<=)""\n""Guessed OK Probability" << right << endl;
for (int score = 0; score <= questions; score++)
{
 cout << setw(2) << score << " " << cdf(quiz, score) << endl;
+ cout << setw(2) << score << " " << setprecision(10)
+ << cdf(quiz, score) << endl;
}
cout << endl;

 cout << "\n" "At least (>=)""\n""Guessed right Probability" << right << endl;
+/*`
+[pre
+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
+]
+*/
+ cout << "\n" "At least (>=)""\n""Guessed OK Probability" << right << endl;
for (int score = 0; score <= questions; score++)
{
 cout << setw(2) << score << " " << cdf(complement(quiz, score)) << endl;
+ cout << setw(2) << score << " " << setprecision(10)
+ << cdf(complement(quiz, score)) << endl;
}
 /*`
 Calculate the probability of getting a range of guesses right,
 first by adding the exact probabilities of each of low ... high.
 */
+/*`
+[pre
+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.810715862e005
+12 3.783265129e006
+13 2.628657967e007
+14 1.140870154e008
+15 2.328306437e010
+16 0
+]
+We now consider the probabilities of *ranges* of correct guesses.
+
+Calculate the probability of getting a range of guesses right,
+first, by adding the exact probabilities of each of low ... high.
+*/
int low = 3;
int high = 5;
double sum = 0.;
@@ 141,33 +248,43 @@
{
sum += pdf(quiz, i);
}
 cout << "The probability of getting between "
+ cout.precision(4);
+ cout << "Probability of getting between "
<< low << " and " << high << " answers right by guessing is "
<< sum << endl; // 0.61323

 /*`
 Or, better, we can use the difference of cdfs instead:
 */
 cout << "The probability of getting between " << low << " and " << high << " answers right by guessing is "
+ cout << "Probability of getting between " << low << " and " << high << " answers right by guessing is "
<< cdf(quiz, high)  cdf(quiz, low  1) << endl; // 0.61323
+/*`
+[pre
+Probability of getting between 3 and 5 answers right by guessing is 0.6132
+]
+Or, usually better, we can use the difference of cdfs instead:
+*/
+
// And a few more combinations of high and low choices:
low = 1; high = 6;
 cout << "The probability of getting between " << low << " and " << high << " answers right by guessing is "
+ cout << "Probability of getting between " << low << " and " << high << " answers right by guessing is "
<< cdf(quiz, high)  cdf(quiz, low  1) << endl; // 1 and 6 P= 0.91042
low = 1; high = 8;
 cout << "The probability of getting between " << low << " and " << high << " answers right by guessing is "
+ cout << "Probability of getting between " << low << " and " << high << " answers right by guessing is "
<< cdf(quiz, high)  cdf(quiz, low  1) << endl; // 1 <= x 8 P = 0.9825
low = 4; high = 4;
 cout << "The probability of getting between " << low << " and " << high << " answers right by guessing is "
+ cout << "Probability of getting between " << low << " and " << high << " answers right by guessing is "
<< cdf(quiz, high)  cdf(quiz, low  1) << endl; // 4 <= x 4 P = 0.22520
low = 3; high = 5;
 cout << "The probability of getting between " << low << " and " << high << " answers right by guessing is "
+ cout << "Probability of getting between " << low << " and " << high << " answers right by guessing is "
<< cdf(quiz, high)  cdf(quiz, low  1) << endl; // P 3 to 5 right
 /*`
 Using Binomial distribution moments,
 we can say more about the spread of results from guessing.
 */
+/*`
+[pre
+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
+Probability of getting between 3 and 5 answers right by guessing is 0.6132
+]
+[h4 Using Binomial distribution moments]
+We can say more about the spread of results from guessing.
+*/
cout << "By guessing, on average, one can expect to get " << mean(quiz) << " correct answers." << endl;
cout << "Standard deviation is " << standard_deviation(quiz) << endl;
cout << "So about 2/3 will lie within 1 standard deviation and get between "
@@ 176,72 +293,109 @@
cout << "Mode (the most frequent) is " << mode(quiz) << endl;
cout << "Skewness is " << skewness(quiz) << endl;
 /*`
 Show the use of quantiles (percentiles or percentage points) for a
 few probability levels:
 */
 cout << "Quantiles" << endl;
+/*`
+[pre
+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
+]
+[h4 Quantiles]
+The quantiles (percentiles or percentage points) for a few probability levels:
+*/
cout << "Quartiles " << quantile(quiz, 0.25) << " to "
 << quantile(complement(quiz, 0.25)) << endl; // Quartiles 2.2821 4.6212
 cout << "1 sd " << quantile(quiz, 0.33) << " to "
 << quantile(quiz, 0.67) << endl; // 1 sd 2.6654 4.1935
+ << quantile(complement(quiz, 0.25)) << endl; // Quartiles
+ cout << "1 standard deviation " << quantile(quiz, 0.33) << " to "
+ << quantile(quiz, 0.67) << endl; // 1 sd
cout << "Deciles " << quantile(quiz, 0.1) << " to "
 << quantile(complement(quiz, 0.1))<< endl; // Deciles 1.3487 5.7583
+ << quantile(complement(quiz, 0.1))<< endl; // Deciles
cout << "5 to 95% " << quantile(quiz, 0.05) << " to "
 << quantile(complement(quiz, 0.05))<< endl; // 5 to 95% 0.83739 6.4559
+ << quantile(complement(quiz, 0.05))<< endl; // 5 to 95%
cout << "2.5 to 97.5% " << quantile(quiz, 0.025) << " to "
 << quantile(complement(quiz, 0.025)) << endl; // 2.5 to 97.5% 0.42806 7.0688
+ << quantile(complement(quiz, 0.025)) << endl; // 2.5 to 97.5%
cout << "2 to 98% " << quantile(quiz, 0.02) << " to "
 << quantile(complement(quiz, 0.02)) << endl; // 2 to 98% 0.31311 7.7880
+ << quantile(complement(quiz, 0.02)) << endl; // 2 to 98%
cout << "If guessing then percentiles 1 to 99% will get " << quantile(quiz, 0.01)
 << " to " << quantile(complement(quiz, 0.01)) << " right." << endl;
+ << " to " << quantile(complement(quiz, 0.01)) << " right." << endl;
+/*`
+which output these integral values because the default policy is `integer_round_outwards`.
+[pre
+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
+]
+*/
+
//] [/binomial_quiz_example2]
//[discrete_quantile_real
/*`
The quantiles values are controlled by the discrete quantile policy chosen.
+Quantiles values are controlled by the
+[link math_toolkit.policy.pol_ref.discrete_quant_ref discrete quantile policy]
+chosen.
The default is `integer_round_outwards`,
so the lower quantile is rounded down, and the upper quantile is rounded up.
We can control the policy for all distributions by
+But we might believe that the real values tell us a little more  see
+[link math_toolkit.policy.pol_tutorial.understand_dis_quant Understanding discrete quantile policy].
+
+We could control the policy for *all* distributions by
#define BOOST_MATH_DISCRETE_QUANTILE_POLICY real
at the head of the program would make this policy apply
to this *one, and only*, translation unit.
Or we can create a (typedef for) policy that has discrete quantiles real.
*/
 using namespace boost::math::policies;
/*`
Convenient for all policy and typelist values like discrete_quantile.
*/
 using namespace boost::math;
/*`
for binomial_distribution

Or to be more specific, to avoid 'using namespaces ...' statements:
+Or we can now create a (typedef for) policy that has discrete quantiles real.
+(here avoiding any 'using namespaces ...' statements):
*/
using boost::math::policies::policy;
using boost::math::policies::discrete_quantile;
using boost::math::policies::real;
using boost::math::policies::integer_round_outwards; // Default.
typedef boost::math::policies::policy<discrete_quantile<real> > real_quantile_policy;
 /*`
 Add a binomial distribution called real_quantile_binomial that uses real_quantile_policy.
 */
+/*`
+Add a binomial distribution called real_quantile_binomial that uses real_quantile_policy.
+*/
using boost::math::binomial_distribution;
typedef binomial_distribution<double, real_quantile_policy> real_quantile_binomial;
 /*`
 Construct a distribution of this custom real_quantile_binomial distribution;
 */
+/*`
+Construct a distribution of this custom real_quantile_binomial distribution;
+*/
real_quantile_binomial quiz_real(questions, success_fraction);
 /*`
 And use this to show some quantiles  that now have real rather than integer values.
 */

 cout << "Real Quartiles " << quantile(quiz_real, 0.25) << " to "
 << quantile(complement(quiz_real, 0.25)) << endl; // Real Quartiles 2.2821 to 4.6212
+/*`
+And use this to show some quantiles  that now have real rather than integer values.
+*/
+ cout << "Quartiles " << quantile(quiz, 0.25) << " to "
+ << quantile(complement(quiz_real, 0.25)) << endl; // Quartiles 2.2821 4.6212
+ cout << "1 standard deviation " << quantile(quiz_real, 0.33) << " to "
+ << quantile(quiz_real, 0.67) << endl; // 1 sd 2.6654 4.1935
+ cout << "Deciles " << quantile(quiz_real, 0.1) << " to "
+ << quantile(complement(quiz_real, 0.1))<< endl; // Deciles 1.3487 5.7583
+ cout << "5 to 95% " << quantile(quiz_real, 0.05) << " to "
+ << quantile(complement(quiz_real, 0.05))<< endl; // 5 to 95% 0.83739 6.4559
+ cout << "2.5 to 97.5% " << quantile(quiz_real, 0.025) << " to "
+ << quantile(complement(quiz_real, 0.025)) << endl; // 2.5 to 97.5% 0.42806 7.0688
+ cout << "2 to 98% " << quantile(quiz_real, 0.02) << " to "
+ << quantile(complement(quiz_real, 0.02)) << endl; // 2 to 98% 0.31311 7.7880
+
+ cout << "If guessing then percentiles 1 to 99% will get " << quantile(quiz_real, 0.01)
+ << " to " << quantile(complement(quiz_real, 0.01)) << " right." << endl;
+/*`Real Quantiles
+[pre
+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.
+]
+*/
//] [/discrete_quantile_real]
}
@@ 265,93 +419,98 @@
Binomial distribution example  guessing in a quiz.
In a quiz with 16 questions and with a probability of guessing right of 25 % or 1 in 4
Probability of getting none right is 0.010023
Probability of getting at least one right is 0.94655
Probability of getting none or one right is 0.063476
Probability of getting exactly one right is 0.053454
Probability of getting exactly 11 right is 0.00024713
Probability of getting > 10 right (to pass) is 0.00028524
The probability of getting all the answers wrong by chance is 0.010023
The probability of getting all the answers right by chance is 2.3283e010
The probability of getting exactly 11 answers right by guessing is 0.00024713
The probability of getting less then 11(< 11) answers right by guessing is 0.99996
The probability of getting at least 11(>= 11) answers right by guessing is 0.00028524 only 1 in 3505.8
Guessed right Probability
 0 0.010023
 1 0.053454
 2 0.13363
 3 0.20788
 4 0.2252
 5 0.18016
 6 0.1101
 7 0.052427
 8 0.01966
 9 0.0058253
10 0.0013592
11 0.00024713
12 3.4324e005
13 3.5204e006
14 2.5146e007
15 1.1176e008
16 2.3283e010
+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 answers right by chance is 2.32831e010
+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.43239e005
+13 3.5204e006
+14 2.51457e007
+15 1.11759e008
+16 2.32831e010
+Probability of getting none or one right is 0.0634764
+Probability of getting none or one right is 0.0634764
+Probability of getting <= 10 right (to fail) is 0.999715
+Probability of getting > 10 right (to pass) is 0.000285239
+Probability of getting > 10 right (to pass) is 0.000285239
+Probability of getting less than 11 (< 11) answers right by guessing is 0.999715
+Probability of getting at least 11(>= 11) answers right by guessing is 0.000285239, only 1 in 3505.83
At most (<=)
Guessed right Probability
 0 0.010023
 1 0.063476
 2 0.19711
 3 0.40499
 4 0.63019
 5 0.81035
 6 0.92044
 7 0.97287
 8 0.99253
 9 0.99836
10 0.99971
11 0.99996
12 1
13 1
14 1
15 1
16 1
+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
At least (>=)
Guessed right Probability
 0 0.98998
 1 0.93652
 2 0.80289
 3 0.59501
 4 0.36981
 5 0.18965
 6 0.079557
 7 0.02713
 8 0.0074697
 9 0.0016445
10 0.00028524
11 3.8107e005
12 3.7833e006
13 2.6287e007
14 1.1409e008
15 2.3283e010
16 0
The probability of getting between 3 and 5 answers right by guessing is 0.61323
The probability of getting between 3 and 5 answers right by guessing is 0.61323
The probability of getting between 1 and 6 answers right by guessing is 0.91042
The probability of getting between 1 and 8 answers right by guessing is 0.98251
The probability of getting between 4 and 4 answers right by guessing is 0.2252
The probability of getting between 3 and 5 answers right by guessing is 0.61323
+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.810715862e005
+12 3.783265129e006
+13 2.628657967e007
+14 1.140870154e008
+15 2.328306437e010
+16 0
+Probability of getting between 3 and 5 answers right by guessing is 0.6132
+Probability of getting between 3 and 5 answers right by guessing is 0.6132
+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
+Probability of getting between 3 and 5 answers right by guessing is 0.6132
By guessing, on average, one can expect to get 4 correct answers.
Standard deviation is 1.7321
+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.28868
Quantiles
+Skewness is 0.2887
Quartiles 2 to 5
1 sd 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
If guessing then percentiles 1 to 99% will get 0 to 8 right.
Real Quartiles 2.2821 to 4.6212
+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.
*/
BoostCommit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk