Package smile.stat.distribution
Class AbstractDistribution
- java.lang.Object
-
- smile.stat.distribution.AbstractDistribution
-
- All Implemented Interfaces:
java.io.Serializable
,Distribution
- Direct Known Subclasses:
GaussianDistribution
,Mixture
public abstract class AbstractDistribution extends java.lang.Object implements Distribution
This is the base class of univariate distributions. Both rejection and inverse transform sampling methods are implemented to provide some general approaches to generate random samples based on probability density function or quantile function. Besides, a quantile function is also provided based on bisection searching. Likelihood and log likelihood functions are also implemented here.- Author:
- Haifeng Li
- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Constructor Description AbstractDistribution()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected double
inverseTransformSampling()
Use inverse transform sampling (also known as the inverse probability integral transform or inverse transformation method or Smirnov transform) to draw a sample from the given distribution.double
likelihood(double[] x)
The likelihood given a sample set following the distribution.double
logLikelihood(double[] x)
The likelihood given a sample set following the distribution.protected double
quantile(double p, double xmin, double xmax)
Inversion of CDF by bisection numeric root finding of "cdf(x) = p" for continuous distribution.protected double
quantile(double p, double xmin, double xmax, double eps)
Inversion of CDF by bisection numeric root finding of "cdf(x) = p" for continuous distribution.protected double
rejection(double pmax, double xmin, double xmax)
Use the rejection technique to draw a sample from the given distribution.
-
-
-
Method Detail
-
rejection
protected double rejection(double pmax, double xmin, double xmax)
Use the rejection technique to draw a sample from the given distribution. WARNING : this simulation technique can take a very long time. Rejection sampling is also commonly called the acceptance-rejection method or "accept-reject algorithm". It generates sampling values from an arbitrary probability distribution function f(x) by using an instrumental distribution g(x), under the only restriction that f(x) < M g(x) where M > 1 is an appropriate bound on f(x) / g(x).Rejection sampling is usually used in cases where the form of f(x) makes sampling difficult. Instead of sampling directly from the distribution f(x), we use an envelope distribution M g(x) where sampling is easier. These samples from M g(x) are probabilistically accepted or rejected.
This method relates to the general field of Monte Carlo techniques, including Markov chain Monte Carlo algorithms that also use a proxy distribution to achieve simulation from the target distribution f(x). It forms the basis for algorithms such as the Metropolis algorithm.
-
inverseTransformSampling
protected double inverseTransformSampling()
Use inverse transform sampling (also known as the inverse probability integral transform or inverse transformation method or Smirnov transform) to draw a sample from the given distribution. This is a method for generating sample numbers at random from any probability distribution given its cumulative distribution function (cdf). Subject to the restriction that the distribution is continuous, this method is generally applicable (and can be computationally efficient if the cdf can be analytically inverted), but may be too computationally expensive in practice for some probability distributions. The Box-Muller transform is an example of an algorithm which is less general but more computationally efficient. It is often the case that, even for simple distributions, the inverse transform sampling method can be improved on, given substantial research effort, e.g. the ziggurat algorithm and rejection sampling.
-
quantile
protected double quantile(double p, double xmin, double xmax, double eps)
Inversion of CDF by bisection numeric root finding of "cdf(x) = p" for continuous distribution.
-
quantile
protected double quantile(double p, double xmin, double xmax)
Inversion of CDF by bisection numeric root finding of "cdf(x) = p" for continuous distribution. The default epsilon is 1E-6.
-
likelihood
public double likelihood(double[] x)
The likelihood given a sample set following the distribution.- Specified by:
likelihood
in interfaceDistribution
-
logLikelihood
public double logLikelihood(double[] x)
The likelihood given a sample set following the distribution.- Specified by:
logLikelihood
in interfaceDistribution
-
-