2017-04-26 53 views
1

我已经设置了以下二项开关点模型PyMC3:PyMC3二项式模型的开关点高度依赖于名为testVal的

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) 

它似乎运行正常,但它完全中心在一个值切换点( 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评估样本性能...

回答

0

离散值的模型可能会有问题,使用衍生物的所有好的抽样技术都不再工作,可以表现得像多模态分布一样。我真的不明白为什么在这种情况下,问题,但是你可以尝试使用连续变量作为开关点(而不是从概念上讲更有意义?)。