【发布时间】:2017-05-10 06:22:17
【问题描述】:
以下模型(取自 Bayesian Methods for Hackers)适用于 Poisson。
count_data = np.loadtxt("data/txtdata.csv")
n_count_data = len(count_data)
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(), pm.NUTS()]
trace = pm.sample(10000, tune=5000,step=step)
pm.traceplot(trace, ['lambda_1', 'lambda_2', 'tau'])
plt.show()
使用泊松分布:
但是,在此模型中使用指数随机变量时:
observation = pm.Exponential("obs", lambda_, observed=count_data)
我明白了:
指数分布:
我希望使用指数分布的原因是使用非整数。
我不确定问题出在 lambda_ 定义还是其他问题(为此所需的采样器)。
【问题讨论】: