This notebook just lists the (sometimes slightly modified) examples from the paper Symbolic Statistics with SymPy (doi:10.1109/MCSE.2012.56) by Matthew Rocklin and Andy R. Terrel, published in Computing in Science & Engineering, Volume 14, Issue 3 (2012).
from sympy import stats
import sympy
sympy.init_printing()
sympy.__version__
'0.7.7.dev'
sympy.stats.Die, by default 6-sided.
X = stats.Die('X')
Y = stats.Die('Y')
X
type(X)
sympy.stats.rv.RandomSymbol
stats.density(X)
stats.density(X).dict
stats.P(X > 3) # probability
stats.E(X + Y) # expectation
mod_X = X + 3
mod_X
stats.E(2*X + 4)
$P(X>3 \mid X+Y\ge 8)$
stats.P(X > 3, X + Y >= 8)
A = X > 3
B = X + Y >= 10
Note: this is not a proof for the general case:
stats.P(B, A) == stats.P(A, B) * stats.P(B) / stats.P(A)
True
density = dict(heads=0.5, tails=0.5)
density
{'heads': 0.5, 'tails': 0.5}
coin = stats.FiniteRV('coin', density)
coin
type(coin)
sympy.stats.rv.RandomSymbol
stats.density(coin)
stats.density(coin).dict
stats.P(X > 3)
stats.E(2 * X)
stats.variance(X + 3)
stats.density(2 * X)
X2 = stats.given(X, X < 3)
X2
stats.density(X, X > 3)
stats.E(X, X > 3)
T = stats.Normal('T', 30, 3)
T
type(T)
sympy.stats.rv.RandomSymbol
stats.density(T)
stats.P(T > 33)
_.n()
noise = stats.Normal('noise', 0, 1.5)
noise
type(noise)
sympy.stats.rv.RandomSymbol
observation = T + noise
observation
T_posterior = stats.given(T, sympy.Eq(observation, 26))
T_posterior
stats.density(T_posterior)
# TODO