I’ve been trying to practice turing.jl and Julia as a whole and its been a great experience so far!
I am having some trouble coming from pymc3 background, any help and direction is much appreciated!
Given the code from the (amazing) book on Bayesian methods for Hackers:
import pymc3 as pm import theano.tensor as tt with pm.Model() as model: alpha = 1.0/count_data.mean() # Recall count_data is the # variable that holds our txt counts lambda_1 = pm.Exponential("lambda_1", alpha) lambda_2 = pm.Exponential("lambda_2", alpha) tau = pm.DiscreteUniform("tau", lower=0, upper=n_count_data - 1) idx = np.arange(n_count_data) # Index lambda_ = pm.math.switch(tau > idx, lambda_1, lambda_2) observation = pm.Poisson("obs", lambda_, observed=count_data) step = pm.Metropolis() trace = pm.sample(10000, tune=5000,step=step)
my translation is:
@model text_model(y) = begin α = 1/mean(y) λ₁ ~ Exponential(α) λ₂ ~ Exponential(α) τ ~ DiscreteUniform(1, length(y)) function equality(idx) if τ > idx return λ₁ end return λ₂ end times = 1:length(y) λ = map(equality, times) for idx in times y[idx] ~ Poisson(λ[idx]) end return τ end model = model(data.count) trace = sample(model, Gibbs(HMC(0.01, 10, :λ₁, :λ₂), PG(20, :τ)), 1000)
There are no errors (other than warning of rejected proposals for numerical reasons once in a while) and the sampling goes on without a problem.
The problem is that I get the wrong results .
Do you think the code translation makes sense? not super sure about the switchpoint method I am using.
Thanks in advance Julia and Turing Communities!