【问题标题】:pymc python change point detection for small probabilities. ZeroProbability Errorpymc python 小概率变化点检测。零概率误差
【发布时间】: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 很陌生,所以不确定我是否遗漏了一些明显的东西。我的猜测是我可能没有合适的分布来模拟小概率。

【问题讨论】:

    标签: bayesian python pymc


    【解决方案1】:

    如果没有更多的输出,就不可能知道你在哪里引入了这个错误——无论如何,编程在这里是题外话。但是这里有一个统计问题:您以某种方式构建了一个模型,该模型既不能产生观察到的变量,也不能产生当前的潜在变量样本。

    举个简单的例子,假设您有一个带有负值的数据集,并且假设它是伽马分布的;这将产生错误,因为数据在伽马下的概率为零。同样,如果在 MCMC 链中采样到不可能的值,也会引发错误。

    【讨论】:

    • 我明白了,但是当我将均匀分布的限制设置为观察值的限制时,我不确定观察结果如何超出分布范围?
    猜你喜欢
    • 2016-06-23
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    相关资源
    最近更新 更多