pymc python变换点检测小概率。零可能性错误

时间:2017-04-10 08:33:01

标签: bayesian python pymc

我正在尝试使用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)

当我运行此代码时,我得到:

ZeroProbability:Stochastic obs的价值超出了它的支持,  或者它禁止其父母目前的价值观。

我对pymc很新,所以不确定我是否遗漏了一些明显的东西。我的猜测是我可能没有适当的分布来建模小概率。

1 个答案:

答案 0 :(得分:0)

无法告诉你在哪里引入了这个错误 - 在任何情况下编程都是偏离主题的 - 没有更多的输出。但这里有一个统计问题:你已经以某种方式构建了一个模型,它既不能产生观察到的变量,也不会产生潜在的变量。

举一个简单的例子,假设你有一个负值的数据集,并且你假设它是伽玛分布的;这将产生错误,因为数据在伽玛下的概率为零。同样,如果在MCMC链期间对不可能的值进行采样,则会引发错误。