
BoostCommit : 
From: john_at_[hidden]
Date: 20070825 12:14:27
Author: johnmaddock
Date: 20070825 12:14:26 EDT (Sat, 25 Aug 2007)
New Revision: 38942
URL: http://svn.boost.org/trac/boost/changeset/38942
Log:
Typo fixes, changed formatting a bit, and gave example a meaningful name.
Text files modified:
sandbox/math_toolkit/libs/math/doc/distributions/negative_binomial_example.qbk  4
sandbox/math_toolkit/libs/math/example/binomial_quiz_example.cpp  117 +++++++++++++++++++++
sandbox/math_toolkit/libs/math/example/negative_binomial_example1.cpp  4
3 files changed, 68 insertions(+), 57 deletions()
Modified: sandbox/math_toolkit/libs/math/doc/distributions/negative_binomial_example.qbk
==============================================================================
 sandbox/math_toolkit/libs/math/doc/distributions/negative_binomial_example.qbk (original)
+++ sandbox/math_toolkit/libs/math/doc/distributions/negative_binomial_example.qbk 20070825 12:14:26 EDT (Sat, 25 Aug 2007)
@@ 162,7 +162,7 @@
[endsect] [/section:neg_binom_size_eg Estimating Sample Sizes.]
[section:negative_binomial_example1 Negative Binomial example 1.]
+[section:negative_binomial_example1 Negative Binomial Sales Quota Example.]
The example program
[@../../example/negative_binomial_example1.cpp negative_binomial_example1.cpp (full source code)]
@@ 192,7 +192,7 @@
= sucesses + failures or k + r = k + 5.
The random variable we are interested in is the number of houses (k)
that must be visited to sell five candy bars,
so we substitute k = n 5 into a negative_binomial(5, 0.4) mass (density) function
+so we substitute k = n  5 into a negative_binomial(5, 0.4) mass (density) function
and obtain the following mass (density) function of the distribution of houses (for n >= 5):
Obviously, the best case is that Pat makes sales on all the first five houses.
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 20070825 12:14:26 EDT (Sat, 25 Aug 2007)
@@ 15,24 +15,20 @@
//[binomial_quiz_example1
/*`
 A multiple choice test has four possible answers to each of 16 questions.
 A student quesses the answer to each question,
 so the probability of getting a correct answer on any given question is 1/4 = 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.

 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.
*/
// #define BOOST_MATH_DISCRETE_QUANTILE_POLICY real
/*`
For information on the effect of this define, see section on quantiles below.
+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.
+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.
+
+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)
@@ 52,7 +48,7 @@
#include <iomanip>
using std::setw;
using std::setprecision;
// ][/binomial_quiz_example1]
+//][/binomial_quiz_example1]
//[binomial_confidence_limits
void confidence_limits_on_frequency(unsigned trials, unsigned successes)
@@ 105,9 +101,10 @@
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.
*/
+ /*`
+ 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?
int questions = 16;
int answers = 4; // possible answers to each question.
@@ 115,17 +112,21 @@
// Caution: = answers / questions would be zero (because they are integers)!
int pass_score = 11;
/*`Construct our Binomial distribution.
*/
+ /*`
+ Construct our Binomial distribution.
+ */
binomial quiz(questions, success_fraction);
/*`and display the parameters we used.
*/
+ /*`
+ and display the parameters we used.
+ */
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 some 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
@@ 150,8 +151,9 @@
<< cdf(complement(quiz, pass_score1))
<< " only 1 in " << 1/cdf(complement(quiz, pass_score1)) << endl;
/*`Tabulate probability versus number right.
*/
+ /*`
+ Tabulate probability versus number right.
+ */
cout << "\n" "Guessed right Probability" << right << endl;
for (int successes = 0; successes <= questions; successes++)
{
@@ 173,9 +175,10 @@
{
cout << setw(2) << score << " " << 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.
*/
+ /*`
+ 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.;
@@ 187,8 +190,9 @@
<< low << " and " << high << " answers right by guessing is "
<< sum << endl; // 0.61323
/*`Or, better, we can use the difference of cdfs instead:
*/
+ /*`
+ Or, better, we can use the difference of cdfs instead:
+ */
cout << "The probability of getting between " << low << " and " << high << " answers right by guessing is "
<< cdf(quiz, high)  cdf(quiz, low  1) << endl; // 0.61323
// And a few more combinations of high and low choices:
@@ 205,9 +209,10 @@
cout << "The 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.
*/
+ /*`
+ 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 "
@@ 218,8 +223,10 @@
/*`Show the use of quantiles (percentiles or percentage points) for a few probability levels:
*/
+ /*`
+ Show the use of quantiles (percentiles or percentage points) for a
+ few probability levels:
+ */
cout << "Quantiles" << endl;
cout << "Quartiles " << quantile(quiz, 0.25) << " to "
<< quantile(complement(quiz, 0.25)) << endl; // Quartiles 2.2821 4.6212
@@ 240,8 +247,9 @@
//] [/binomial_quiz_example2]
//[discrete_quantile_real
/*`The quantiles values are controlled by the discrete quantile policy chosen.
The default is integer_outside,
+/*`
+The quantiles values are controlled by the 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
@@ 250,11 +258,12 @@
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;
+*/
+ using namespace boost::math::policies;
/*`
Convenient for all policy and typelist values like discrete_quantile.
*/
using namespace boost::math;
+ using namespace boost::math;
/*`
for binomial_distribution
@@ 265,15 +274,18 @@
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.
*/
+ /*`
+ 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
@@ 282,9 +294,8 @@
//[binomial_quiz_example3
/*`Now we can repeat the

/*`Confidence intervals for various confidences 1  alpha,
+/*`
+Now we can repeat the confidence intervals for various confidences 1  alpha,
probability as % = 100 * (1  alpha[i]), so alpha 0.05 = 95% confidence.
*/
double alpha[] = {0.5, 0.33, 0.25, 0.1, 0.05, 0.01, 0.001, 0.0001, 0.00001};
Modified: sandbox/math_toolkit/libs/math/example/negative_binomial_example1.cpp
==============================================================================
 sandbox/math_toolkit/libs/math/example/negative_binomial_example1.cpp (original)
+++ sandbox/math_toolkit/libs/math/example/negative_binomial_example1.cpp 20070825 12:14:26 EDT (Sat, 25 Aug 2007)
@@ 85,7 +85,7 @@
is the Probability Density Function (pdf).
*/
cout << "Probability that Pat finishes on the " << sales_quota << "th house is "
 << "f(5) = " << pdf(nb, nb.successes()) << endl;
+ << "f(5) = " << pdf(nb, 5  sales_quota) << endl;
cout << "Probability that Pat finishes on the 6th house is "
<< pdf(nb, 6  sales_quota) << endl;
cout << "Probability that Pat finishes on the 7th house is "
@@ 97,7 +97,7 @@
cout << "Probability that Pat finishes on or before the 8th house is sum "
"\n" << "pdf(sales_quota) + pdf(6) + pdf(7) + pdf(8) = "
// Sum each of the mass/density probabilities for houses sales_quota = 5, 6, 7, & 8.
 << pdf(nb, sales_quota  sales_quota) // 0
+ << pdf(nb, 5  sales_quota) // 0
+ pdf(nb, 6  sales_quota) // 1
+ pdf(nb, 7  sales_quota) // 2
+ pdf(nb, 8  sales_quota) // 3
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