1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>Gamma (and Erlang) Distribution</title> 5<link rel="stylesheet" href="../../../math.css" type="text/css"> 6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 7<link rel="home" href="../../../index.html" title="Math Toolkit 2.12.0"> 8<link rel="up" href="../dists.html" title="Distributions"> 9<link rel="prev" href="f_dist.html" title="F Distribution"> 10<link rel="next" href="geometric_dist.html" title="Geometric Distribution"> 11</head> 12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 13<table cellpadding="2" width="100%"><tr> 14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> 15<td align="center"><a href="../../../../../../../index.html">Home</a></td> 16<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> 17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 19<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> 20</tr></table> 21<hr> 22<div class="spirit-nav"> 23<a accesskey="p" href="f_dist.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../dists.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="geometric_dist.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> 24</div> 25<div class="section"> 26<div class="titlepage"><div><div><h4 class="title"> 27<a name="math_toolkit.dist_ref.dists.gamma_dist"></a><a class="link" href="gamma_dist.html" title="Gamma (and Erlang) Distribution">Gamma (and 28 Erlang) Distribution</a> 29</h4></div></div></div> 30<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">gamma</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></pre> 31<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">math</span><span class="special">{</span> 32 33<span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">RealType</span> <span class="special">=</span> <span class="keyword">double</span><span class="special">,</span> 34 <span class="keyword">class</span> <a class="link" href="../../../policy.html" title="Chapter 21. Policies: Controlling Precision, Error Handling etc">Policy</a> <span class="special">=</span> <a class="link" href="../../pol_ref/pol_ref_ref.html" title="Policy Class Reference">policies::policy<></a> <span class="special">></span> 35<span class="keyword">class</span> <span class="identifier">gamma_distribution</span> 36<span class="special">{</span> 37<span class="keyword">public</span><span class="special">:</span> 38 <span class="keyword">typedef</span> <span class="identifier">RealType</span> <span class="identifier">value_type</span><span class="special">;</span> 39 <span class="keyword">typedef</span> <span class="identifier">Policy</span> <span class="identifier">policy_type</span><span class="special">;</span> 40 41 <span class="identifier">gamma_distribution</span><span class="special">(</span><span class="identifier">RealType</span> <span class="identifier">shape</span><span class="special">,</span> <span class="identifier">RealType</span> <span class="identifier">scale</span> <span class="special">=</span> <span class="number">1</span><span class="special">)</span> 42 43 <span class="identifier">RealType</span> <span class="identifier">shape</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> 44 <span class="identifier">RealType</span> <span class="identifier">scale</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> 45<span class="special">};</span> 46 47<span class="special">}}</span> <span class="comment">// namespaces</span> 48</pre> 49<p> 50 The gamma distribution is a continuous probability distribution. When the 51 shape parameter is an integer then it is known as the Erlang Distribution. 52 It is also closely related to the Poisson and Chi Squared Distributions. 53 </p> 54<p> 55 When the shape parameter has an integer value, the distribution is the 56 <a href="http://en.wikipedia.org/wiki/Erlang_distribution" target="_top">Erlang distribution</a>. 57 Since this can be produced by ensuring that the shape parameter has an 58 integer value > 0, the Erlang distribution is not separately implemented. 59 </p> 60<div class="note"><table border="0" summary="Note"> 61<tr> 62<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../../../../doc/src/images/note.png"></td> 63<th align="left">Note</th> 64</tr> 65<tr><td align="left" valign="top"> 66<p> 67 To avoid potential confusion with the gamma functions, this distribution 68 does not provide the typedef: 69 </p> 70<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">gamma_distribution</span><span class="special"><</span><span class="keyword">double</span><span class="special">></span> <span class="identifier">gamma</span><span class="special">;</span></pre> 71<p> 72 Instead if you want a double precision gamma distribution you can write 73 </p> 74<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">math</span><span class="special">::</span><span class="identifier">gamma_distribution</span><span class="special"><></span> <span class="identifier">my_gamma</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">1</span><span class="special">);</span></pre> 75</td></tr> 76</table></div> 77<p> 78 For shape parameter <span class="emphasis"><em>k</em></span> and scale parameter θ it is defined 79 by the probability density function: 80 </p> 81<div class="blockquote"><blockquote class="blockquote"><p> 82 <span class="inlinemediaobject"><img src="../../../../equations/gamma_dist_ref1.svg"></span> 83 84 </p></blockquote></div> 85<p> 86 Sometimes an alternative formulation is used: given parameters α = k and 87 β = 1 / θ, then the distribution can be defined by the PDF: 88 </p> 89<div class="blockquote"><blockquote class="blockquote"><p> 90 <span class="inlinemediaobject"><img src="../../../../equations/gamma_dist_ref2.svg"></span> 91 92 </p></blockquote></div> 93<p> 94 In this form the inverse scale parameter is called a <span class="emphasis"><em>rate parameter</em></span>. 95 </p> 96<p> 97 Both forms are in common usage: this library uses the first definition 98 throughout. Therefore to construct a Gamma Distribution from a <span class="emphasis"><em>rate 99 parameter</em></span>, you should pass the reciprocal of the rate as the 100 scale parameter. 101 </p> 102<p> 103 The following two graphs illustrate how the PDF of the gamma distribution 104 varies as the parameters vary: 105 </p> 106<div class="blockquote"><blockquote class="blockquote"><p> 107 <span class="inlinemediaobject"><img src="../../../../graphs/gamma1_pdf.svg" align="middle"></span> 108 109 </p></blockquote></div> 110<div class="blockquote"><blockquote class="blockquote"><p> 111 <span class="inlinemediaobject"><img src="../../../../graphs/gamma2_pdf.svg" align="middle"></span> 112 113 </p></blockquote></div> 114<p> 115 The <span class="bold"><strong>Erlang Distribution</strong></span> is the same as 116 the Gamma, but with the shape parameter an integer. It is often expressed 117 using a <span class="emphasis"><em>rate</em></span> rather than a <span class="emphasis"><em>scale</em></span> 118 as the second parameter (remember that the rate is the reciprocal of the 119 scale). 120 </p> 121<p> 122 Internally the functions used to implement the Gamma Distribution are already 123 optimised for small-integer arguments, so in general there should be no 124 great loss of performance from using a Gamma Distribution rather than a 125 dedicated Erlang Distribution. 126 </p> 127<h5> 128<a name="math_toolkit.dist_ref.dists.gamma_dist.h0"></a> 129 <span class="phrase"><a name="math_toolkit.dist_ref.dists.gamma_dist.member_functions"></a></span><a class="link" href="gamma_dist.html#math_toolkit.dist_ref.dists.gamma_dist.member_functions">Member 130 Functions</a> 131 </h5> 132<pre class="programlisting"><span class="identifier">gamma_distribution</span><span class="special">(</span><span class="identifier">RealType</span> <span class="identifier">shape</span><span class="special">,</span> <span class="identifier">RealType</span> <span class="identifier">scale</span> <span class="special">=</span> <span class="number">1</span><span class="special">);</span> 133</pre> 134<p> 135 Constructs a gamma distribution with shape <span class="emphasis"><em>shape</em></span> and 136 scale <span class="emphasis"><em>scale</em></span>. 137 </p> 138<p> 139 Requires that the shape and scale parameters are greater than zero, otherwise 140 calls <a class="link" href="../../error_handling.html#math_toolkit.error_handling.domain_error">domain_error</a>. 141 </p> 142<pre class="programlisting"><span class="identifier">RealType</span> <span class="identifier">shape</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> 143</pre> 144<p> 145 Returns the <span class="emphasis"><em>shape</em></span> parameter of this distribution. 146 </p> 147<pre class="programlisting"><span class="identifier">RealType</span> <span class="identifier">scale</span><span class="special">()</span><span class="keyword">const</span><span class="special">;</span> 148</pre> 149<p> 150 Returns the <span class="emphasis"><em>scale</em></span> parameter of this distribution. 151 </p> 152<h5> 153<a name="math_toolkit.dist_ref.dists.gamma_dist.h1"></a> 154 <span class="phrase"><a name="math_toolkit.dist_ref.dists.gamma_dist.non_member_accessors"></a></span><a class="link" href="gamma_dist.html#math_toolkit.dist_ref.dists.gamma_dist.non_member_accessors">Non-member 155 Accessors</a> 156 </h5> 157<p> 158 All the <a class="link" href="../nmp.html" title="Non-Member Properties">usual non-member accessor 159 functions</a> that are generic to all distributions are supported: 160 <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.cdf">Cumulative Distribution Function</a>, 161 <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.pdf">Probability Density Function</a>, 162 <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.quantile">Quantile</a>, <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.hazard">Hazard Function</a>, <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.chf">Cumulative Hazard Function</a>, 163 <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.mean">mean</a>, <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.median">median</a>, 164 <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.mode">mode</a>, <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.variance">variance</a>, 165 <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.sd">standard deviation</a>, 166 <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.skewness">skewness</a>, <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.kurtosis">kurtosis</a>, <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.kurtosis_excess">kurtosis_excess</a>, 167 <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.range">range</a> and <a class="link" href="../nmp.html#math_toolkit.dist_ref.nmp.support">support</a>. 168 </p> 169<p> 170 The domain of the random variable is [0,+∞]. 171 </p> 172<h5> 173<a name="math_toolkit.dist_ref.dists.gamma_dist.h2"></a> 174 <span class="phrase"><a name="math_toolkit.dist_ref.dists.gamma_dist.accuracy"></a></span><a class="link" href="gamma_dist.html#math_toolkit.dist_ref.dists.gamma_dist.accuracy">Accuracy</a> 175 </h5> 176<p> 177 The gamma distribution is implemented in terms of the incomplete gamma 178 functions <a class="link" href="../../sf_gamma/igamma.html" title="Incomplete Gamma Functions">gamma_p</a> and 179 <a class="link" href="../../sf_gamma/igamma.html" title="Incomplete Gamma Functions">gamma_q</a> and their inverses 180 <a class="link" href="../../sf_gamma/igamma_inv.html" title="Incomplete Gamma Function Inverses">gamma_p_inv</a> and 181 <a class="link" href="../../sf_gamma/igamma_inv.html" title="Incomplete Gamma Function Inverses">gamma_q_inv</a>: refer 182 to the accuracy data for those functions for more information. 183 </p> 184<h5> 185<a name="math_toolkit.dist_ref.dists.gamma_dist.h3"></a> 186 <span class="phrase"><a name="math_toolkit.dist_ref.dists.gamma_dist.implementation"></a></span><a class="link" href="gamma_dist.html#math_toolkit.dist_ref.dists.gamma_dist.implementation">Implementation</a> 187 </h5> 188<p> 189 In the following table <span class="emphasis"><em>k</em></span> is the shape parameter of 190 the distribution, θ is its scale parameter, <span class="emphasis"><em>x</em></span> is the 191 random variate, <span class="emphasis"><em>p</em></span> is the probability and <span class="emphasis"><em>q 192 = 1-p</em></span>. 193 </p> 194<div class="informaltable"><table class="table"> 195<colgroup> 196<col> 197<col> 198</colgroup> 199<thead><tr> 200<th> 201 <p> 202 Function 203 </p> 204 </th> 205<th> 206 <p> 207 Implementation Notes 208 </p> 209 </th> 210</tr></thead> 211<tbody> 212<tr> 213<td> 214 <p> 215 pdf 216 </p> 217 </td> 218<td> 219 <p> 220 Using the relation: pdf = <a class="link" href="../../sf_gamma/gamma_derivatives.html" title="Derivative of the Incomplete Gamma Function">gamma_p_derivative</a>(k, 221 x / θ) / θ 222 </p> 223 </td> 224</tr> 225<tr> 226<td> 227 <p> 228 cdf 229 </p> 230 </td> 231<td> 232 <p> 233 Using the relation: p = <a class="link" href="../../sf_gamma/igamma.html" title="Incomplete Gamma Functions">gamma_p</a>(k, 234 x / θ) 235 </p> 236 </td> 237</tr> 238<tr> 239<td> 240 <p> 241 cdf complement 242 </p> 243 </td> 244<td> 245 <p> 246 Using the relation: q = <a class="link" href="../../sf_gamma/igamma.html" title="Incomplete Gamma Functions">gamma_q</a>(k, 247 x / θ) 248 </p> 249 </td> 250</tr> 251<tr> 252<td> 253 <p> 254 quantile 255 </p> 256 </td> 257<td> 258 <p> 259 Using the relation: x = θ * <a class="link" href="../../sf_gamma/igamma_inv.html" title="Incomplete Gamma Function Inverses">gamma_p_inv</a>(k, 260 p) 261 </p> 262 </td> 263</tr> 264<tr> 265<td> 266 <p> 267 quantile from the complement 268 </p> 269 </td> 270<td> 271 <p> 272 Using the relation: x = θ* <a class="link" href="../../sf_gamma/igamma_inv.html" title="Incomplete Gamma Function Inverses">gamma_q_inv</a>(k, 273 p) 274 </p> 275 </td> 276</tr> 277<tr> 278<td> 279 <p> 280 mean 281 </p> 282 </td> 283<td> 284 <p> 285 kθ 286 </p> 287 </td> 288</tr> 289<tr> 290<td> 291 <p> 292 variance 293 </p> 294 </td> 295<td> 296 <p> 297 kθ<sup>2</sup> 298 </p> 299 </td> 300</tr> 301<tr> 302<td> 303 <p> 304 mode 305 </p> 306 </td> 307<td> 308 <p> 309 (k-1)θ for <span class="emphasis"><em>k>1</em></span> otherwise a <a class="link" href="../../error_handling.html#math_toolkit.error_handling.domain_error">domain_error</a> 310 </p> 311 </td> 312</tr> 313<tr> 314<td> 315 <p> 316 skewness 317 </p> 318 </td> 319<td> 320 <p> 321 2 / sqrt(k) 322 </p> 323 </td> 324</tr> 325<tr> 326<td> 327 <p> 328 kurtosis 329 </p> 330 </td> 331<td> 332 <p> 333 3 + 6 / k 334 </p> 335 </td> 336</tr> 337<tr> 338<td> 339 <p> 340 kurtosis excess 341 </p> 342 </td> 343<td> 344 <p> 345 6 / k 346 </p> 347 </td> 348</tr> 349</tbody> 350</table></div> 351</div> 352<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 353<td align="left"></td> 354<td align="right"><div class="copyright-footer">Copyright © 2006-2019 Nikhar 355 Agrawal, Anton Bikineev, Paul A. Bristow, Marco Guazzone, Christopher Kormanyos, 356 Hubert Holin, Bruno Lalande, John Maddock, Jeremy Murphy, Matthew Pulver, Johan 357 Råde, Gautam Sewani, Benjamin Sobotta, Nicholas Thompson, Thijs van den Berg, 358 Daryle Walker and Xiaogang Zhang<p> 359 Distributed under the Boost Software License, Version 1.0. (See accompanying 360 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>) 361 </p> 362</div></td> 363</tr></table> 364<hr> 365<div class="spirit-nav"> 366<a accesskey="p" href="f_dist.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../dists.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="geometric_dist.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> 367</div> 368</body> 369</html> 370