PyMC3 - Poisson适用于切换点,指数不

时间:2017-05-10 06:22:17

标签: python pymc pymc3

以下模型(取自贝叶斯黑客方法)与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()

使用泊松分布:

With Poisson Distribution

但是,在此模型中使用指数随机变量时:

observation = pm.Exponential("obs", lambda_, observed=count_data)

我明白了:

使用指数分布: With Exponential Distribution

我希望使用指数分布的原因是使用非整数。

我不确定问题是关于lambda_定义还是其他问题(需要采样器)。

1 个答案:

答案 0 :(得分:0)

泊松分布模型很重要。

它还可以用于队列网络之类的模型来模拟单个客户的到达时间。请注意,客户的预期到货时间将是费率参数(通常为lambda)的倒数。

一个人可以将数据作为每个固定采样时间间隔的计数馈入Poisson流程,例如您每天获得多少客户。

使用指数分布来模拟一些过渡时间。这不是一个计数过程。它是一个连续的过程,其离散模拟是几何分布。

泊松分布用于对离散数据和离散计数进行建模,这些离散计数和连续计数之间的时间呈指数分布。

它们看起来很相似,但性质不同。

输入到指数分布中的计数数据可能会混淆整个过程。

换句话说,由于指数分布无法理解给定的数据,因此它不是合适的模型。