Random variables#
Most random variables are implemented in Aesara, and AePPL only derives their log-densities. In the following we provide examples of the random variables supported by AePPL and how their log-densities can be obtained.
The aeppl.logprob.logprob
function can be called on any random variable instance to create a graph that represents its log-density computed at a given value:
import aesara.tensor as at
from aeppl.logprob import _logprob
srng = at.random.RandomStream()
mu = at.scalar("mu")
sigma = at.scalar("sigma")
x_rv = snrg.bernoulli(mu, sigma)
x_val = at.scalar('x_val')
x_logprob = logprob(x_rv, x_val)
Bernoulli#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.BernoulliRV
import aesara.tensor as at
srng = at.random.RandomStream()
p = at.scalar("p")
x_rv = snrg.bernoulli(p)
Beta#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.BetaRV
import aesara.tensor as at
srng = at.random.RandomStream()
a = at.scalar("a")
b = at.scalar("b")
x_rv = snrg.beta(a, b)
Beta-binomial#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.BetaBinomialRV
import aesara.tensor as at
srng = at.random.RandomStream()
n = at.iscalar("n")
a = at.scalar("a")
b = at.scalar("b")
x_rv = snrg.betabinom(n, a, b)
Binomial#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.BinomialRV
import aesara.tensor as at
srng = at.random.RandomStream()
n = at.iscalar("n")
p = at.scalar("p")
x_rv = snrg.binomal(n, p)
Cauchy#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.CauchyRV
import aesara.tensor as at
srng = at.random.RandomStream()
loc = at.scalar("loc")
scale = at.scalar("scale")
x_rv = snrg.cauchy(loc, scale)
Categorical#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.CategoricalRV
import aesara.tensor as at
srng = at.random.RandomStream()
p = at.vector("p")
x_rv = snrg.categorical(p)
Chi-squared#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.ChiSquareRV
import aesara.tensor as at
srng = at.random.RandomStream()
df = at.scalar("df")
x_rv = snrg.chisquare(df)
Dirac#
The Dirac measure is defined in AePPL.
import aeppl.dists as ad
loc = at.scalar("loc")
x_rv = ad.dirac_delta(loc)
Dirichlet#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.DirichletRV
import aesara.tensor as at
srng = at.random.RandomStream()
alpha = at.vector("alpha")
x_rv = snrg.dirichlet(alpha)
Discrete Markov Chain#
- aeppl.dists.discrete_markov_chain(Gammas, gamma_0, size=None, srng=None, **kwargs)[source]#
Construct a first-order discrete Markov chain distribution.
This defines a random vector that consists of state indicator values (i.e.
0
toM - 1
whereM
is the dimensionality of the state space) that are driven by a discrete Markov chain.Given an array of transition probability matrices
Gamma
and initial state probabilitiesgamma0
,discrete_markov_chain
represents the probability distribution ofstates
defined by:states[0] = categorical(gamma_0) for t in range(1, N): states[t] = categorical(Gammas[t, state[t-1]])
Example
import aesara.tensor as at import numpy as np num_steps = 10 Gammas_base = np.array([[.5, .5], [.5, .5]]) Gammas = np.broadcast(Gammas_base, (num_steps, 2, 2)) gamma0 = np.r_[0.5, 0.5] dmc, updates = discrete_markov_chain(test_Gamma, test_gamma_0)
- Parameters:
Gammas (
TensorVariable
) – An array of transition probability matrices.Gammas
takes the shape... x N x M x M
for a state sequence of lengthN
havingM
-many distinct states. Each row,r
, in a transition probability matrix gives the probability of transitioning from stater
to each other state.gamma_0 (
TensorVariable
) – The initial state probabilities. The last dimension should be lengthM
, i.e. the number of distinct states.srng (
Optional
[RandomStream
]) –
Exponential#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.ExponentialRV
import aesara.tensor as at
srng = at.random.RandomStream()
beta = at.scalar("beta")
x_rv = snrg.exponential(beta)
Gamma#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.GammaRV
import aesara.tensor as at
srng = at.random.RandomStream()
alpha = at.scalar('alpha')
beta = at.scalar('beta')
x_rv = srng.gamma(alpha, beta)
Geometric#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.GeometricRV
import aesara.tensor as at
srng = at.random.RandomStream()
p = at.scalar("p")
x_rv = snrg.geometric(p)
Gumbel#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.GumbelRV
import aesara.tensor as at
srng = at.random.RandomStream()
mu = at.scalar('mu')
beta = at.scalar('beta')
x_rv = srng.gumbel(mu, beta)
Half-Cauchy#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.HalfCauchyRV
import aesara.tensor as at
srng = at.random.RandomStream()
x0 = at.scalar('x0')
gamma = at.scalar('gamma')
x_rv = srng.halfcauchy(x0, gamma)
Half-Normal#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.HalfNormalRV
import aesara.tensor as at
srng = at.random.RandomStream()
mu = at.scalar('mu')
sigma = at.scalar('sigma')
x_rv = srng.halfnormal(mu, sigma)
Hypergeometric#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.HyperGeometricRV
import aesara.tensor as at
srng = at.random.RandomStream()
ngood = at.scalar("ngood")
nbad = at.scalar("nbad")
nsample = at.scalar("nsample")
x_rv = snrg.hypergeometric(ngood, nbad, nsample)
Inverse-Gamma#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.InvGammaRV
import aesara.tensor as at
srng = at.random.RandomStream()
alpha = at.scalar('alpha')
beta = at.scalar('beta')
x_rv = srng.invgamma(alpha, beta)
Laplace#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.LaplaceRV
import aesara.tensor as at
srng = at.random.RandomStream()
mu = at.scalar("mu")
lmbda = at.scalar("lambda")
x_rv = snrg.laplace(mu, lmbda)
Logistic#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.LogisticRV
import aesara.tensor as at
srng = at.random.RandomStream()
mu = at.scalar("mu")
s = at.scalar("s")
x_rv = snrg.logistic(mu, s)
Lognormal#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.LogNormalRV
import aesara.tensor as at
srng = at.random.RandomStream()
mu = at.scalar("mu")
sigma = at.scalar("sigma")
x_rv = snrg.lognormal(mu, sigma)
Multinomial#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.MultinomialRV
import aesara.tensor as at
srng = at.random.RandomStream()
n = at.iscalar("n")
p = at.vector("p")
x_rv = snrg.multinomial(n, p)
Multivariate-Normal#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.MvNormalRV
import aesara.tensor as at
srng = at.random.RandomStream()
mu = at.vector('mu')
Sigma = at.matrix('sigma')
x_rv = srng.multivariate_normal(mu, Sigma)
Negative-Binomial#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.NegBinomialRV
import aesara.tensor as at
srng = at.random.RandomStream()
n = at.iscalar("n")
p = at.scalar("p")
x_rv = snrg.negative_binomial(n, p)
Normal#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.NormalRV
import aesara.tensor as at
srng = at.random.RandomStream()
mu = at.scalar('mu')
sigma = at.scalar('sigma')
x_rv = srng.normal(mu, sigma)
Pareto#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.ParetoRV
import aesara.tensor as at
srng = at.random.RandomStream()
b = at.scalar("b")
scale = at.scalar("scale")
x_rv = snrg.pareto(b, scale)
Poisson#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.PoissonRV
import aesara.tensor as at
srng = at.random.RandomStream()
lmbda = at.scalar("lambda")
x_rv = snrg.poisson(lmbda)
Student T#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.StudentTRV
import aesara.tensor as at
srng = at.random.RandomStream()
df = at.scalar('df')
loc = at.scalar('loc')
scale = at.scalar('scale')
x_rv = srng.t(df, loc, scale)
Triangular#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.TriangularRV
import aesara.tensor as at
srng = at.random.RandomStream()
left = at.scalar('left')
mode = at.scalar('mode')
right = at.scalar('right')
x_rv = srng.triangular(left, mode, right)
Uniform#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.UniformRV
import aesara.tensor as at
srng = at.random.RandomStream()
low = at.scalar('low')
high = at.scalar('high')
x_rv = srng.uniform(low, high)
Von Mises#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.VonMisesRV
import aesara.tensor as at
srng = at.random.RandomStream()
mu = at.scalar('mu')
kappa = at.scalar('kappa')
x_rv = srng.vonmises(mu, kappa)
Wald#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.WaldRV
import aesara.tensor as at
srng = at.random.RandomStream()
mu = at.scalar('mu')
lmbda = at.scalar('lambda')
x_rv = srng.wald(mu, lmbda)
Weibull#
Documentation for the Aesara implementation can be found here: aesara.tensor.random.basic.WeibullRV
import aesara.tensor as at
srng = at.random.RandomStream()
k = at.scalar('k')
x_rv = srng.weibull(k)