I think that worked! Here’s what I have now:
import numpy as np
import pymc3 as pm
import arviz as az
import theano.tensor as tt
print(f"Running on PyMC3 v{pm.__version__}")
np.random.seed(451)
x = np.random.exponential(3,size=500)
minx=1
maxx=20
obs = x[np.where(~((x<minx) | (x>maxx)))] # remove values outside range
def censor_correct(λ):
result = -tt.log(tt.exp(-minx/λ)- tt.exp(-maxx/λ))*len(obs)
return result
with pm.Model() as expModel:
λ = pm.Exponential("λ", lam=1/5) # prior exponential with mean of 5
clip_exp = pm.Potential("clip_exp", censor_correct(λ))
x = pm.Exponential('x', lam=1/λ, observed=obs) # obs exponential with mean of $\lambda$.
trace= pm.sample(2000, tune=1000, return_inferencedata=True)
az.summary(trace)
mean sd hdi_3% hdi_97%
λ 2.895 0.159 2.603 3.199
Thank you!