Analyse¶
Example¶
A basic example and properties of MultiNorm were shown in Getting started.
On this page we continue with analysis methods using same example:
from multinorm import MultiNorm
mean = [10, 20, 30]
covariance = [[1, 0, 0], [0, 4, 0], [0, 0, 9]]
names = ["a", "b", "c"]
mn = MultiNorm(mean, covariance, names)
Scipy¶
For most computations, MultiNorm uses scipy. The MultiNorm.scipy
property is a frozen scipy.stats.multivariate_normal object. It is cached,
accessing it multiple times doesn’t incur any extra computations.
Note that scipy.stats.multivariate_normal has a cov_info object,
which contains a covariance matrix decomposition which is computed once and
cached. It is at this time undocumented, but it is a public property
and is what powers most computations in the scipy and in this class.
>>> s = mn.scipy
>>> type(s)
scipy.stats._multivariate.multivariate_normal_frozen
To present a consistent and complete API, MultiNorm re-exposes the functionality
of scipy.stats.multivariate_normal, it is a wrapper.
Draw random samples from the distribution using MultiNorm.sample:
>>> points = mn.sample(size=2, random_state=0)
>>> points
array([[10.97873798, 20.80031442, 35.29215704],
[ 9.02272212, 23.73511598, 36.7226796 ]])
Points are always given as arrays with shape (n_dim, n_points).
Evaluate the probability density function (PDF), call MultiNorm.pdf:
>>> mn.pdf(points)
array([1.27661616e-03, 9.31966590e-05])
For log(pdf) (natural logarithm), call MultiNorm.logpdf:
>>> mn.logpdf(points)
array([-6.66354232, -9.28079868])
There is also a cdf and logcdf method for the cumulative distribution function,
as well as entropy. Since these are rarely needed, we didn’t wrap them. But you
can still access them via the MultiNorm.scipy property.
Marginal¶
TODO: marginal
Conditional¶
TODO: document MultiNorm.conditional
Error propagation¶
TODO: document MultiNorm.to_uncertainties
Sigmas¶
TODO: document MultiNorm.sigma_distance