]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/math/example/neg_binom_confidence_limits.cpp
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / boost / libs / math / example / neg_binom_confidence_limits.cpp
CommitLineData
7c673cae
FG
1// neg_binomial_confidence_limits.cpp
2
3// Copyright John Maddock 2006
4// Copyright Paul A. Bristow 2007, 2010
5// Use, modification and distribution are subject to the
6// Boost Software License, Version 1.0.
7// (See accompanying file LICENSE_1_0.txt
8// or copy at http://www.boost.org/LICENSE_1_0.txt)
9
10// Caution: this file contains quickbook markup as well as code
11// and comments, don't change any of the special comment markups!
12
13//[neg_binomial_confidence_limits
14
15/*`
16
17First we need some includes to access the negative binomial distribution
18(and some basic std output of course).
19
20*/
21
22#include <boost/math/distributions/negative_binomial.hpp>
23using boost::math::negative_binomial;
24
25#include <iostream>
26using std::cout; using std::endl;
27#include <iomanip>
28using std::setprecision;
29using std::setw; using std::left; using std::fixed; using std::right;
30
31/*`
32First define a table of significance levels: these are the
33probabilities that the true occurrence frequency lies outside the calculated
34interval:
35*/
36
37 double alpha[] = { 0.5, 0.25, 0.1, 0.05, 0.01, 0.001, 0.0001, 0.00001 };
38
39/*`
40Confidence value as % is (1 - alpha) * 100, so alpha 0.05 == 95% confidence
41that the true occurrence frequency lies *inside* the calculated interval.
42
43We need a function to calculate and print confidence limits
44for an observed frequency of occurrence
45that follows a negative binomial distribution.
46
47*/
48
49void confidence_limits_on_frequency(unsigned trials, unsigned successes)
50{
51 // trials = Total number of trials.
52 // successes = Total number of observed successes.
53 // failures = trials - successes.
54 // success_fraction = successes /trials.
55 // Print out general info:
56 cout <<
57 "______________________________________________\n"
58 "2-Sided Confidence Limits For Success Fraction\n"
59 "______________________________________________\n\n";
60 cout << setprecision(7);
61 cout << setw(40) << left << "Number of trials" << " = " << trials << "\n";
62 cout << setw(40) << left << "Number of successes" << " = " << successes << "\n";
63 cout << setw(40) << left << "Number of failures" << " = " << trials - successes << "\n";
64 cout << setw(40) << left << "Observed frequency of occurrence" << " = " << double(successes) / trials << "\n";
65
66 // Print table header:
67 cout << "\n\n"
68 "___________________________________________\n"
69 "Confidence Lower Upper\n"
70 " Value (%) Limit Limit\n"
71 "___________________________________________\n";
72
73
74/*`
75And now for the important part - the bounds themselves.
76For each value of /alpha/, we call `find_lower_bound_on_p` and
77`find_upper_bound_on_p` to obtain lower and upper bounds respectively.
78Note that since we are calculating a two-sided interval,
79we must divide the value of alpha in two. Had we been calculating a
80single-sided interval, for example: ['"Calculate a lower bound so that we are P%
81sure that the true occurrence frequency is greater than some value"]
82then we would *not* have divided by two.
83*/
84
85 // Now print out the upper and lower limits for the alpha table values.
86 for(unsigned i = 0; i < sizeof(alpha)/sizeof(alpha[0]); ++i)
87 {
88 // Confidence value:
89 cout << fixed << setprecision(3) << setw(10) << right << 100 * (1-alpha[i]);
90 // Calculate bounds:
91 double lower = negative_binomial::find_lower_bound_on_p(trials, successes, alpha[i]/2);
92 double upper = negative_binomial::find_upper_bound_on_p(trials, successes, alpha[i]/2);
93 // Print limits:
94 cout << fixed << setprecision(5) << setw(15) << right << lower;
95 cout << fixed << setprecision(5) << setw(15) << right << upper << endl;
96 }
97 cout << endl;
98} // void confidence_limits_on_frequency(unsigned trials, unsigned successes)
99
100/*`
101
102And then call confidence_limits_on_frequency with increasing numbers of trials,
103but always the same success fraction 0.1, or 1 in 10.
104
105*/
106
107int main()
108{
109 confidence_limits_on_frequency(20, 2); // 20 trials, 2 successes, 2 in 20, = 1 in 10 = 0.1 success fraction.
110 confidence_limits_on_frequency(200, 20); // More trials, but same 0.1 success fraction.
111 confidence_limits_on_frequency(2000, 200); // Many more trials, but same 0.1 success fraction.
112
113 return 0;
114} // int main()
115
116//] [/negative_binomial_confidence_limits_eg end of Quickbook in C++ markup]
117
118/*
119
120______________________________________________
1212-Sided Confidence Limits For Success Fraction
122______________________________________________
123Number of trials = 20
124Number of successes = 2
125Number of failures = 18
126Observed frequency of occurrence = 0.1
127___________________________________________
128Confidence Lower Upper
129 Value (%) Limit Limit
130___________________________________________
131 50.000 0.04812 0.13554
132 75.000 0.03078 0.17727
133 90.000 0.01807 0.22637
134 95.000 0.01235 0.26028
135 99.000 0.00530 0.33111
136 99.900 0.00164 0.41802
137 99.990 0.00051 0.49202
138 99.999 0.00016 0.55574
139______________________________________________
1402-Sided Confidence Limits For Success Fraction
141______________________________________________
142Number of trials = 200
143Number of successes = 20
144Number of failures = 180
145Observed frequency of occurrence = 0.1000000
146___________________________________________
147Confidence Lower Upper
148 Value (%) Limit Limit
149___________________________________________
150 50.000 0.08462 0.11350
151 75.000 0.07580 0.12469
152 90.000 0.06726 0.13695
153 95.000 0.06216 0.14508
154 99.000 0.05293 0.16170
155 99.900 0.04343 0.18212
156 99.990 0.03641 0.20017
157 99.999 0.03095 0.21664
158______________________________________________
1592-Sided Confidence Limits For Success Fraction
160______________________________________________
161Number of trials = 2000
162Number of successes = 200
163Number of failures = 1800
164Observed frequency of occurrence = 0.1000000
165___________________________________________
166Confidence Lower Upper
167 Value (%) Limit Limit
168___________________________________________
169 50.000 0.09536 0.10445
170 75.000 0.09228 0.10776
171 90.000 0.08916 0.11125
172 95.000 0.08720 0.11352
173 99.000 0.08344 0.11802
174 99.900 0.07921 0.12336
175 99.990 0.07577 0.12795
176 99.999 0.07282 0.13206
177*/
178