public class GaussianDistribution extends AbstractDistribution implements ExponentialFamily
The family of normal distributions is closed under linear transformations. That is, if X is normally distributed, then a linear transform aX + b (for some real numbers a ≠ 0 and b) is also normally distributed. If X1, X2 are two independent normal random variables, then their linear combination will also be normally distributed. The converse is also true: if X1 and X2 are independent and their sum X1 + X2 is distributed normally, then both X1 and X2 must also be normal, which is known as the Cramer's theorem. Of all probability distributions over the reals with mean μ and variance σ2, the normal distribution N(μ, σ2) is the one with the maximum entropy.
The central limit theorem states that under certain, fairly common conditions, the sum of a large number of random variables will have approximately normal distribution. For example if X1, …, Xn is a sequence of iid random variables, each having mean μ and variance σ2 but otherwise distributions of Xi's can be arbitrary, then the central limit theorem states that
√n (1⁄n Σ Xi - μ) → N(0, σ2).
The theorem will hold even if the summands Xi are not iid, although some constraints on the degree of dependence and the growth rate of moments still have to be imposed.
Therefore, certain other distributions can be approximated by the normal distribution, for example:
| Constructor and Description |
|---|
GaussianDistribution(double[] data)
Constructor.
|
GaussianDistribution(double mu,
double sigma)
Constructor
|
| Modifier and Type | Method and Description |
|---|---|
double |
cdf(double x)
Cumulative distribution function.
|
double |
entropy()
Shannon entropy of the distribution.
|
static GaussianDistribution |
getInstance() |
double |
logp(double x)
The density at x in log scale, which may prevents the underflow problem.
|
Mixture.Component |
M(double[] x,
double[] posteriori)
The M step in the EM algorithm, which depends the specific distribution.
|
double |
mean()
The mean of distribution.
|
int |
npara()
The number of parameters of the distribution.
|
double |
p(double x)
The probability density function for continuous distribution
or probability mass function for discrete distribution at x.
|
double |
quantile(double p)
The quantile, the probability to the left of quantile(p) is p.
|
double |
rand()
Uses the Box-Muller algorithm to transform Random.random()'s into Gaussian deviates.
|
double |
randInverseCDF()
Uses Inverse CDF method to generate a Gaussian deviate.
|
double |
sd()
The standard deviation of distribution.
|
java.lang.String |
toString() |
double |
var()
The variance of distribution.
|
inverseTransformSampling, likelihood, logLikelihood, quantile, quantile, rejectionpublic GaussianDistribution(double mu,
double sigma)
mu - mean.sigma - standard deviation.public GaussianDistribution(double[] data)
public static GaussianDistribution getInstance()
public int npara()
Distributionnpara in interface Distributionpublic double mean()
Distributionmean in interface Distributionpublic double var()
Distributionvar in interface Distributionpublic double sd()
Distributionsd in interface Distributionpublic double entropy()
Distributionentropy in interface Distributionpublic java.lang.String toString()
toString in class java.lang.Objectpublic double rand()
rand in interface Distributionpublic double randInverseCDF()
public double p(double x)
Distributionp in interface Distributionpublic double logp(double x)
Distributionlogp in interface Distributionpublic double cdf(double x)
Distributioncdf in interface Distributionpublic double quantile(double p)
quantile in interface Distributionpublic Mixture.Component M(double[] x, double[] posteriori)
ExponentialFamilyM in interface ExponentialFamilyx - the input data for estimationposteriori - the posteriori probability.