【发布时间】:2017-04-10 08:33:00
【问题描述】:
我正在尝试使用 pymc 来查找时间序列中的变化点。随着时间的推移,我正在查看的值是“转换”的概率,它非常小,平均为 0.009,范围为 0.001-0.016。
我给这两个概率一个均匀分布作为在零和最大观察之间的先验。
alpha = df.cnvrs.max() # Set upper uniform
center_1_c = pm.Uniform("center_1_c", 0, alpha)
center_2_c = pm.Uniform("center_2_c", 0, alpha)
day_c = pm.DiscreteUniform("day_c", lower=1, upper=n_days)
@pm.deterministic
def lambda_(day_c=day_c, center_1_c=center_1_c, center_2_c=center_2_c):
out = np.zeros(n_days)
out[:day_c] = center_1_c
out[day_c:] = center_2_c
return out
observation = pm.Uniform("obs", lambda_, value=df.cnvrs.values, observed=True)
当我运行这段代码时,我得到:
零概率:随机 obs 的值超出其支持范围, 或者它禁止其父母的当前价值观。
我对 pymc 很陌生,所以不确定我是否遗漏了一些明显的东西。我的猜测是我可能没有合适的分布来模拟小概率。
【问题讨论】: