Examples#
AeMCMC is capable of identifying conjugacy relations and simplify the model graph before building a sampler:
import aesara
import aemcmc
import aesara.tensor as at
srng = at.random.RandomStream(0)
alpha_tt = at.scalar("alpha")
beta_rv = srng.halfnormal(1.0)
l_rv = srng.gamma(alpha_tt, beta_rv)
Y_rv = srng.poisson(l_rv)
y_vv = Y_rv.clone()
sampler, initial_values = construct_sampler({Y_rv: y_vv}, srng)
AeMCMC can recognize some models like the following sparse regression and construct efficient samplers:
srng = at.random.RandomStream(0)
X = at.matrix("X")
tau_rv = srng.halfcauchy(0, 1)
lmbda_rv = srng.halfcauchy(0, 1, size=X.shape[1])
beta_rv = srng.normal(0, lmbda_rv * tau_rv, size=X.shape[1])
a = at.scalar("a")
b = at.scalar("b")
h_rv = srng.gamma(a, b)
# Negative-binomial regression
eta = X @ beta_rv
p = at.sigmoid(-eta)
Y_rv = srng.nbinom(h_rv, p)
y_vv = Y_rv.clone()
sampler, initial_values = construct_sampler({Y_rv: y_vv}, srng)