|
| HypoExponentialDistQuick (double[] lambda) |
| Constructs a HypoExponentialDistQuick object, with rates \(\lambda_i = \) lambda[ \(i-1\)] , \(i = 1,…,k\). More...
|
|
double | density (double x) |
|
double | cdf (double x) |
| Returns the distribution function \(F(x)\). More...
|
|
double | barF (double x) |
| Returns \(\bar{F}(x) = 1 - F(x)\). More...
|
|
double | inverseF (double u) |
| Returns the inverse distribution function \(F^{-1}(u)\), defined in ( inverseF ). More...
|
|
void | setLambda (double[] lambda) |
|
String | toString () |
|
| HypoExponentialDist (double[] lambda) |
| Constructs a HypoExponentialDist object, with rates \(\lambda_i = \) lambda[ \(i-1\)] , \(i = 1,…,k\). More...
|
|
double | density (double x) |
|
double | cdf (double x) |
| Returns the distribution function \(F(x)\). More...
|
|
double | barF (double x) |
| Returns \(\bar{F}(x) = 1 - F(x)\). More...
|
|
double | inverseF (double u) |
| Returns the inverse distribution function \(F^{-1}(u)\), defined in ( inverseF ). More...
|
|
double | getMean () |
| Returns the mean of the distribution function.
|
|
double | getVariance () |
| Returns the variance of the distribution function.
|
|
double | getStandardDeviation () |
| Returns the standard deviation of the distribution function.
|
|
double [] | getLambda () |
| Returns the values \(\lambda_i\) for this object.
|
|
void | setLambda (double[] lambda) |
| Sets the values \(\lambda_i = \)lambda[ \(i-1\)] , \(i = 1,…,k\) for this object.
|
|
double [] | getParams () |
| Same as getLambda.
|
|
String | toString () |
| Returns a String containing information about the current distribution.
|
|
abstract double | density (double x) |
| Returns \(f(x)\), the density evaluated at \(x\). More...
|
|
double | barF (double x) |
| Returns the complementary distribution function. More...
|
|
double | inverseBrent (double a, double b, double u, double tol) |
| Computes the inverse distribution function \(x = F^{-1}(u)\), using the Brent-Dekker method. More...
|
|
double | inverseBisection (double u) |
| Computes and returns the inverse distribution function \(x = F^{-1}(u)\), using bisection. More...
|
|
double | inverseF (double u) |
| Returns the inverse distribution function \(x = F^{-1}(u)\). More...
|
|
double | getMean () |
| Returns the mean. More...
|
|
double | getVariance () |
| Returns the variance. More...
|
|
double | getStandardDeviation () |
| Returns the standard deviation. More...
|
|
double | getXinf () |
| Returns \(x_a\) such that the probability density is 0 everywhere outside the interval \([x_a, x_b]\). More...
|
|
double | getXsup () |
| Returns \(x_b\) such that the probability density is 0 everywhere outside the interval \([x_a, x_b]\). More...
|
|
void | setXinf (double xa) |
| Sets the value \(x_a=\) xa , such that the probability density is 0 everywhere outside the interval \([x_a, x_b]\). More...
|
|
void | setXsup (double xb) |
| Sets the value \(x_b=\) xb , such that the probability density is 0 everywhere outside the interval \([x_a, x_b]\). More...
|
|
|
static double | density (double[] lambda, double x) |
| Computes the density function \(f(x)\), with \(\lambda_i = \) lambda[ \(i-1\)] , \(i = 1,…,k\). More...
|
|
static double | cdf (double[] lambda, double x) |
| Computes the distribution function \(F(x)\), with \(\lambda_i = \) lambda[ \(i-1\)] , \(i = 1,…,k\). More...
|
|
static double | barF (double[] lambda, double x) |
| Computes the complementary distribution \(\bar{F}(x)\), with \(\lambda_i = \) lambda[ \(i-1\)] , \(i = 1,…,k\). More...
|
|
static double | inverseF (double[] lambda, double u) |
| Computes the inverse distribution function \(F^{-1}(u)\), with \(\lambda_i = \) lambda[ \(i-1\)] , \(i = 1,…,k\). More...
|
|
static double | density (double[] lambda, double x) |
| Computes the density function \(f(x)\), with \(\lambda_i = \) lambda[ \(i-1\)] , \(i = 1,…,k\). More...
|
|
static double | cdf (double[] lambda, double x) |
| Computes the distribution function \(F(x)\), with \(\lambda_i = \) lambda[ \(i-1\)] , \(i = 1,…,k\). More...
|
|
static double | cdf2 (double[] lambda, double x) |
| Computes the distribution function \(F(x)\), with \(\lambda_i = \) lambda[ \(i-1\)] , \(i = 1,…,k\). More...
|
|
static double | barF (double[] lambda, double x) |
| Computes the complementary distribution \(\bar{F}(x)\), with \(\lambda_i = \) lambda[ \(i-1\)] , \(i = 1,…,k\). More...
|
|
static double | inverseF (double[] lambda, double u) |
| Computes the inverse distribution function \(F^{-1}(u)\), with \(\lambda_i = \) lambda[ \(i-1\)] , \(i = 1,…,k\). More...
|
|
static double | getMean (double[] lambda) |
| Returns the mean, \(E[X] = \sum_{i=1}^k 1/\lambda_i\), of the hypoexponential distribution with rates \(\lambda_i = \) lambda[ \(i-1\)] , \(i = 1,…,k\). More...
|
|
static double | getVariance (double[] lambda) |
| Returns the variance, \(\mbox{Var}[X] = \sum_{i=1}^k 1/\lambda_i^2\), of the hypoexponential distribution with rates \(\lambda_i = \) lambda[ \(i-1\)] , \(i = 1,…,k\). More...
|
|
static double | getStandardDeviation (double[] lambda) |
| Returns the standard deviation of the hypoexponential distribution with rates \(\lambda_i = \) lambda[ \(i-1\)] , \(i = 1,…,k\). More...
|
|
This class is a subclass of HypoExponentialDist and also implements the hypoexponential distribution.
It uses different algorithms to compute the probabilities. The formula ( tail-hypoexp ) for the complementary distribution is mathematically equivalent to (see [209] (page 299) and [68] (Appendix B))
\[ \bar{F}(x) = \mathbb P\left[X_1 + \cdots+ X_k > x \right] = \sum_{i=1}^k e^{-\lambda_i x} \prod_{\substack {j=1\\j\not i}}^k \frac{\lambda_j}{\lambda_j - \lambda_i}. \tag{convolution-hypo} \]
The expression ( convolution-hypo ) is much faster to compute than the matrix exponential formula ( tail-hypoexp ), but it becomes numerically unstable when \(k\) gets large and/or the differences between the \(\lambda_i\) are too small, because it is an alternating sum with relatively large terms of similar size. When the \(\lambda_i\) are close, many of the factors \(\lambda_j - \lambda_i\) in ( convolution-hypo ) are small, and the effect of this is amplified when \(k\) is large. This gives rise to large terms of opposite sign in the sum and the formula becomes unstable due to subtractive cancellation. For example, with the computations done in standard 64-bit floating-point arithmetic, if the \(\lambda_i\) are regularly spaced with differences of \(\lambda_{i+1} - \lambda_i = 0.1\) for all \(i\), the formula ( convolution-hypo ) breaks down already for \(k \approx15\), while if the differences \(\lambda_{i+1} - \lambda_i = 3\), it gives a few decimal digits of precision for \(k\) up to \(\approx300\).
The formula ( fhypoexp ) for the density is mathematically equivalent to the much faster formula
\[ f(x) = \sum_{i=1}^k\lambda_i e^{-\lambda_i x} \prod_{\substack {j=1\\j\not i}}^k \frac{\lambda_j}{\lambda_j - \lambda_i}, \tag{fhypoexp2} \]
which is also numerically unstable when \(k\) gets large and/or the differences between the \(\lambda_i\) are too small.