PyMC3二项式切换点模型高度依赖于testval

时间:2017-04-26 21:10:37

标签: python statistics pymc3 mcmc

我在PyMC3中设置了以下二项式切换点模型:

with pm.Model() as switchpoint_model:

    switchpoint = pm.DiscreteUniform('switchpoint', lower=df['covariate'].min(), upper=df['covariate'].max())

    # Priors for pre- and post-switch parameters
    early_rate = pm.Beta('early_rate', 1, 1)
    late_rate = pm.Beta('late_rate', 1, 1)

    # Allocate appropriate binomial probabilities to years before and after current
    p = pm.math.switch(switchpoint >= df['covariate'].values, early_rate, late_rate)

    p = pm.Deterministic('p', p)

    y = pm.Binomial('y', p=p, n=df['trials'].values, observed=df['successes'].values)

似乎运行正常,除了它完全集中在switchpoint(999)的一个值上,如下所示。

enter image description here

经过进一步调查,该模型的结果似乎高度依赖于起始值(在PyMC3中," testval")。下面显示了当我设置testval = 750时会发生什么。

switchpoint = pm.DiscreteUniform('switchpoint', lower=gp['covariate'].min(), 
upper=gp['covariate'].max(), testval=750)

enter image description here

我得到了类似的不同结果以及其他不同的起始值。

对于上下文,这就是我的数据集的样子: enter image description here

我的问题是:

  1. 我的模型是否被错误地指定了?
  2. 如果指定正确,我该如何解释这些结果?特别是,如何比较/选择不同测试结果生成的结果?我唯一的想法是使用WAIC来评估样本性能......

1 个答案:

答案 0 :(得分:0)

具有离散值的模型可能存在问题,使用衍生物的所有漂亮的采样技术都不再有效,并且它们的行为很像多模态分布。我真的不明白为什么在这种情况下 会出现问题,但是你可以尝试使用连续变量替换开关点(在概念上这也不会更有意义吗?)。 / p>