|
""" |
|
SymPy statistics module |
|
|
|
Introduces a random variable type into the SymPy language. |
|
|
|
Random variables may be declared using prebuilt functions such as |
|
Normal, Exponential, Coin, Die, etc... or built with functions like FiniteRV. |
|
|
|
Queries on random expressions can be made using the functions |
|
|
|
========================= ============================= |
|
Expression Meaning |
|
------------------------- ----------------------------- |
|
``P(condition)`` Probability |
|
``E(expression)`` Expected value |
|
``H(expression)`` Entropy |
|
``variance(expression)`` Variance |
|
``density(expression)`` Probability Density Function |
|
``sample(expression)`` Produce a realization |
|
``where(condition)`` Where the condition is true |
|
========================= ============================= |
|
|
|
Examples |
|
======== |
|
|
|
>>> from sympy.stats import P, E, variance, Die, Normal |
|
>>> from sympy import simplify |
|
>>> X, Y = Die('X', 6), Die('Y', 6) # Define two six sided dice |
|
>>> Z = Normal('Z', 0, 1) # Declare a Normal random variable with mean 0, std 1 |
|
>>> P(X>3) # Probability X is greater than 3 |
|
1/2 |
|
>>> E(X+Y) # Expectation of the sum of two dice |
|
7 |
|
>>> variance(X+Y) # Variance of the sum of two dice |
|
35/6 |
|
>>> simplify(P(Z>1)) # Probability of Z being greater than 1 |
|
1/2 - erf(sqrt(2)/2)/2 |
|
|
|
|
|
One could also create custom distribution and define custom random variables |
|
as follows: |
|
|
|
1. If you want to create a Continuous Random Variable: |
|
|
|
>>> from sympy.stats import ContinuousRV, P, E |
|
>>> from sympy import exp, Symbol, Interval, oo |
|
>>> x = Symbol('x') |
|
>>> pdf = exp(-x) # pdf of the Continuous Distribution |
|
>>> Z = ContinuousRV(x, pdf, set=Interval(0, oo)) |
|
>>> E(Z) |
|
1 |
|
>>> P(Z > 5) |
|
exp(-5) |
|
|
|
1.1 To create an instance of Continuous Distribution: |
|
|
|
>>> from sympy.stats import ContinuousDistributionHandmade |
|
>>> from sympy import Lambda |
|
>>> dist = ContinuousDistributionHandmade(Lambda(x, pdf), set=Interval(0, oo)) |
|
>>> dist.pdf(x) |
|
exp(-x) |
|
|
|
2. If you want to create a Discrete Random Variable: |
|
|
|
>>> from sympy.stats import DiscreteRV, P, E |
|
>>> from sympy import Symbol, S |
|
>>> p = S(1)/2 |
|
>>> x = Symbol('x', integer=True, positive=True) |
|
>>> pdf = p*(1 - p)**(x - 1) |
|
>>> D = DiscreteRV(x, pdf, set=S.Naturals) |
|
>>> E(D) |
|
2 |
|
>>> P(D > 3) |
|
1/8 |
|
|
|
2.1 To create an instance of Discrete Distribution: |
|
|
|
>>> from sympy.stats import DiscreteDistributionHandmade |
|
>>> from sympy import Lambda |
|
>>> dist = DiscreteDistributionHandmade(Lambda(x, pdf), set=S.Naturals) |
|
>>> dist.pdf(x) |
|
2**(1 - x)/2 |
|
|
|
3. If you want to create a Finite Random Variable: |
|
|
|
>>> from sympy.stats import FiniteRV, P, E |
|
>>> from sympy import Rational, Eq |
|
>>> pmf = {1: Rational(1, 3), 2: Rational(1, 6), 3: Rational(1, 4), 4: Rational(1, 4)} |
|
>>> X = FiniteRV('X', pmf) |
|
>>> E(X) |
|
29/12 |
|
>>> P(X > 3) |
|
1/4 |
|
|
|
3.1 To create an instance of Finite Distribution: |
|
|
|
>>> from sympy.stats import FiniteDistributionHandmade |
|
>>> dist = FiniteDistributionHandmade(pmf) |
|
>>> dist.pmf(x) |
|
Lambda(x, Piecewise((1/3, Eq(x, 1)), (1/6, Eq(x, 2)), (1/4, Eq(x, 3) | Eq(x, 4)), (0, True))) |
|
""" |
|
|
|
__all__ = [ |
|
'P', 'E', 'H', 'density', 'where', 'given', 'sample', 'cdf','median', |
|
'characteristic_function', 'pspace', 'sample_iter', 'variance', 'std', |
|
'skewness', 'kurtosis', 'covariance', 'dependent', 'entropy', 'independent', |
|
'random_symbols', 'correlation', 'factorial_moment', 'moment', 'cmoment', |
|
'sampling_density', 'moment_generating_function', 'smoment', 'quantile', |
|
'coskewness', 'sample_stochastic_process', |
|
|
|
'FiniteRV', 'DiscreteUniform', 'Die', 'Bernoulli', 'Coin', 'Binomial', |
|
'BetaBinomial', 'Hypergeometric', 'Rademacher', 'IdealSoliton', 'RobustSoliton', |
|
'FiniteDistributionHandmade', |
|
|
|
'ContinuousRV', 'Arcsin', 'Benini', 'Beta', 'BetaNoncentral', 'BetaPrime', |
|
'BoundedPareto', 'Cauchy', 'Chi', 'ChiNoncentral', 'ChiSquared', 'Dagum', 'Davis', 'Erlang', |
|
'ExGaussian', 'Exponential', 'ExponentialPower', 'FDistribution', |
|
'FisherZ', 'Frechet', 'Gamma', 'GammaInverse', 'Gompertz', 'Gumbel', |
|
'Kumaraswamy', 'Laplace', 'Levy', 'Logistic','LogCauchy', 'LogLogistic', 'LogitNormal', 'LogNormal', 'Lomax', |
|
'Moyal', 'Maxwell', 'Nakagami', 'Normal', 'GaussianInverse', 'Pareto', 'PowerFunction', |
|
'QuadraticU', 'RaisedCosine', 'Rayleigh','Reciprocal', 'StudentT', 'ShiftedGompertz', |
|
'Trapezoidal', 'Triangular', 'Uniform', 'UniformSum', 'VonMises', 'Wald', |
|
'Weibull', 'WignerSemicircle', 'ContinuousDistributionHandmade', |
|
|
|
'FlorySchulz', 'Geometric','Hermite', 'Logarithmic', 'NegativeBinomial', 'Poisson', 'Skellam', |
|
'YuleSimon', 'Zeta', 'DiscreteRV', 'DiscreteDistributionHandmade', |
|
|
|
'JointRV', 'Dirichlet', 'GeneralizedMultivariateLogGamma', |
|
'GeneralizedMultivariateLogGammaOmega', 'Multinomial', 'MultivariateBeta', |
|
'MultivariateEwens', 'MultivariateT', 'NegativeMultinomial', |
|
'NormalGamma', 'MultivariateNormal', 'MultivariateLaplace', 'marginal_distribution', |
|
|
|
'StochasticProcess', 'DiscreteTimeStochasticProcess', |
|
'DiscreteMarkovChain', 'TransitionMatrixOf', 'StochasticStateSpaceOf', |
|
'GeneratorMatrixOf', 'ContinuousMarkovChain', 'BernoulliProcess', |
|
'PoissonProcess', 'WienerProcess', 'GammaProcess', |
|
|
|
'CircularEnsemble', 'CircularUnitaryEnsemble', |
|
'CircularOrthogonalEnsemble', 'CircularSymplecticEnsemble', |
|
'GaussianEnsemble', 'GaussianUnitaryEnsemble', |
|
'GaussianOrthogonalEnsemble', 'GaussianSymplecticEnsemble', |
|
'joint_eigen_distribution', 'JointEigenDistribution', |
|
'level_spacing_distribution', |
|
|
|
'MatrixGamma', 'Wishart', 'MatrixNormal', 'MatrixStudentT', |
|
|
|
'Probability', 'Expectation', 'Variance', 'Covariance', 'Moment', |
|
'CentralMoment', |
|
|
|
'ExpectationMatrix', 'VarianceMatrix', 'CrossCovarianceMatrix' |
|
|
|
] |
|
from .rv_interface import (P, E, H, density, where, given, sample, cdf, median, |
|
characteristic_function, pspace, sample_iter, variance, std, skewness, |
|
kurtosis, covariance, dependent, entropy, independent, random_symbols, |
|
correlation, factorial_moment, moment, cmoment, sampling_density, |
|
moment_generating_function, smoment, quantile, coskewness, |
|
sample_stochastic_process) |
|
|
|
from .frv_types import (FiniteRV, DiscreteUniform, Die, Bernoulli, Coin, |
|
Binomial, BetaBinomial, Hypergeometric, Rademacher, |
|
FiniteDistributionHandmade, IdealSoliton, RobustSoliton) |
|
|
|
from .crv_types import (ContinuousRV, Arcsin, Benini, Beta, BetaNoncentral, |
|
BetaPrime, BoundedPareto, Cauchy, Chi, ChiNoncentral, ChiSquared, |
|
Dagum, Davis, Erlang, ExGaussian, Exponential, ExponentialPower, |
|
FDistribution, FisherZ, Frechet, Gamma, GammaInverse, GaussianInverse, |
|
Gompertz, Gumbel, Kumaraswamy, Laplace, Levy, Logistic, LogCauchy, |
|
LogLogistic, LogitNormal, LogNormal, Lomax, Maxwell, Moyal, Nakagami, |
|
Normal, Pareto, QuadraticU, RaisedCosine, Rayleigh, Reciprocal, |
|
StudentT, PowerFunction, ShiftedGompertz, Trapezoidal, Triangular, |
|
Uniform, UniformSum, VonMises, Wald, Weibull, WignerSemicircle, |
|
ContinuousDistributionHandmade) |
|
|
|
from .drv_types import (FlorySchulz, Geometric, Hermite, Logarithmic, NegativeBinomial, Poisson, |
|
Skellam, YuleSimon, Zeta, DiscreteRV, DiscreteDistributionHandmade) |
|
|
|
from .joint_rv_types import (JointRV, Dirichlet, |
|
GeneralizedMultivariateLogGamma, GeneralizedMultivariateLogGammaOmega, |
|
Multinomial, MultivariateBeta, MultivariateEwens, MultivariateT, |
|
NegativeMultinomial, NormalGamma, MultivariateNormal, MultivariateLaplace, |
|
marginal_distribution) |
|
|
|
from .stochastic_process_types import (StochasticProcess, |
|
DiscreteTimeStochasticProcess, DiscreteMarkovChain, |
|
TransitionMatrixOf, StochasticStateSpaceOf, GeneratorMatrixOf, |
|
ContinuousMarkovChain, BernoulliProcess, PoissonProcess, WienerProcess, |
|
GammaProcess) |
|
|
|
from .random_matrix_models import (CircularEnsemble, CircularUnitaryEnsemble, |
|
CircularOrthogonalEnsemble, CircularSymplecticEnsemble, |
|
GaussianEnsemble, GaussianUnitaryEnsemble, GaussianOrthogonalEnsemble, |
|
GaussianSymplecticEnsemble, joint_eigen_distribution, |
|
JointEigenDistribution, level_spacing_distribution) |
|
|
|
from .matrix_distributions import MatrixGamma, Wishart, MatrixNormal, MatrixStudentT |
|
|
|
from .symbolic_probability import (Probability, Expectation, Variance, |
|
Covariance, Moment, CentralMoment) |
|
|
|
from .symbolic_multivariate_probability import (ExpectationMatrix, VarianceMatrix, |
|
CrossCovarianceMatrix) |
|
|