scipy.stats.

Normal#

class scipy.stats.Normal(mu=None, sigma=None, **kwargs)[source]#

Normal distribution with prescribed mean and standard deviation.

The probability density function of the normal distribution is:

\[f(x) = \frac{1}{\sigma \sqrt{2 \pi}} \exp { \left( -\frac{1}{2}\left( \frac{x - \mu}{\sigma} \right)^2 \right)}\]

for \(x\) in (-infty, infty). This class accepts one parameterization: mu for \(\mu \in (-\infty, \infty)\), sigma for \(\sigma \in (0, \infty)\).

Parameters:
tolpositive float, optional

The desired relative tolerance of calculations. Left unspecified, calculations may be faster; when provided, calculations may be more likely to meet the desired accuracy.

validation_policy{None, “skip_all”}

Specifies the level of input validation to perform. Left unspecified, input validation is performed to ensure appropriate behavior in edge case (e.g. parameters out of domain, argument outside of distribution support, etc.) and improve consistency of output dtype, shape, etc. Pass 'skip_all' to avoid the computational overhead of these checks when rough edges are acceptable.

cache_policy{None, “no_cache”}

Specifies the extent to which intermediate results are cached. Left unspecified, intermediate results of some calculations (e.g. distribution support, moments, etc.) are cached to improve performance of future calculations. Pass 'no_cache' to reduce memory reserved by the class instance.

Attributes:
All parameters are available as attributes.

Methods

support()

Support of the random variable

plot([x, y, t, ax])

Plot a function of the distribution.

sample([shape, method, rng])

Random sample from the distribution.

moment([order, kind, method])

Raw, central, or standard moment of positive integer order.

mean(*[, method])

Mean (raw first moment about the origin)

median(*[, method])

Median (50th percentil)

mode(*[, method])

Mode (most likely value)

variance(*[, method])

Variance (central second moment)

standard_deviation(*[, method])

Standard deviation (square root of the second central moment)

skewness(*[, method])

Skewness (standardized third moment)

kurtosis(*[, method, convention])

Kurtosis (standardized fourth moment)

pdf(x, /, *[, method])

Probability density function

logpdf(x, /, *[, method])

Log of the probability density function

cdf(x[, y, method])

Cumulative distribution function

icdf(p, /, *[, method])

Inverse of the cumulative distribution function.

ccdf(x[, y, method])

Complementary cumulative distribution function

iccdf(p, /, *[, method])

Inverse complementary cumulative distribution function.

logcdf(x[, y, method])

Log of the cumulative distribution function

ilogcdf(logp, /, *[, method])

Inverse of the logarithm of the cumulative distribution function.

logccdf(x[, y, method])

Log of the complementary cumulative distribution function

ilogccdf(logp, /, *[, method])

Inverse of the log of the complementary cumulative distribution function.

entropy(*[, method])

Differential entropy

logentropy(*[, method])

Logarithm of the differential entropy

Notes

The following abbreviations are used throughout the documentation.

  • PDF: probability density function

  • CDF: cumulative distribution function

  • CCDF: complementary CDF

  • entropy: differential entropy

  • log-F: logarithm of F (e.g. log-CDF)

  • inverse F: inverse function of F (e.g. inverse CDF)

The API documentation is written to describe the API, not to serve as a statistical reference. Effort is made to be correct at the level required to use the functionality, not to be mathematically rigorous. For example, continuity and differentiability may be implicitly assumed. For precise mathematical definitions, consult your preferred mathematical text.

Examples

To use the distribution class, it must be instantiated using keyword parameters corresponding with one of the accepted parameterizations.

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy import stats
>>> from scipy.stats import Normal
>>> X = Normal(mu=-0.81, sigma=0.69)

For convenience, the plot method can be used to visualize the density and other functions of the distribution.

>>> X.plot()
>>> plt.show()
../../_images/scipy-stats-Normal-1_00_00.png

The support of the underlying distribution is available using the support method.

>>> X.support()
(np.float64(-inf), np.float64(inf))

The numerical values of parameters associated with all parameterizations are available as attributes.

>>> X.mu, X.sigma
(np.float64(-0.81), np.float64(0.69))

To evaluate the probability density function of the underlying distribution at argument x=-1.13:

>>> x = -1.13
>>> X.pdf(x)
0.5192263911374636

The cumulative distribution function, its complement, and the logarithm of these functions are evaluated similarly.

>>> np.allclose(np.exp(X.logccdf(x)), 1 - X.cdf(x))
True

The inverse of these functions with respect to the argument x is also available.

>>> logp = np.log(1 - X.ccdf(x))
>>> np.allclose(X.ilogcdf(logp), x)
True

Note that distribution functions and their logarithms also have two-argument versions for working with the probability mass between two arguments. The result tends to be more accurate than the naive implementation because it avoids subtractive cancellation.

>>> y = -0.56
>>> np.allclose(X.ccdf(x, y), 1 - (X.cdf(y) - X.cdf(x)))
True

There are methods for computing measures of central tendency, dispersion, higher moments, and entropy.

>>> X.mean(), X.median(), X.mode()
(np.float64(-0.81), np.float64(-0.81), np.float64(-0.81))
>>> X.variance(), X.standard_deviation()
(np.float64(0.4760999999999999), np.float64(0.69))
>>> X.skewness(), X.kurtosis()
(np.float64(0.0), np.float64(3.0))
>>> np.allclose(X.moment(order=6, kind='standardized'),
...             X.moment(order=6, kind='central') / X.variance()**3)
True
>>> np.allclose(np.exp(X.logentropy()), X.entropy())
True

Pseudo-random samples can be drawn from the underlying distribution using sample.

>>> X.sample(shape=(4,))
array([-1.55763675, -1.46907271, -0.06965848, -1.24340849])  # may vary