了解PyMC中的灾难模型

时间:2014-09-24 05:56:14

标签: pymc

我开始学习PyMC并学习第一个教程的例子。

disasters_array =   \
     np.array([ 4, 5, 4, 0, 1, 4, 3, 4, 0, 6, 3, 3, 4, 0, 2, 6,
                   3, 3, 5, 4, 5, 3, 1, 4, 4, 1, 5, 5, 3, 4, 2, 5,
                   2, 2, 3, 4, 2, 1, 3, 2, 2, 1, 1, 1, 1, 3, 0, 0,
                   1, 0, 1, 1, 0, 0, 3, 1, 0, 3, 2, 2, 0, 1, 1, 1,
                   0, 1, 0, 1, 0, 0, 0, 2, 1, 0, 0, 0, 1, 1, 0, 2,
                   3, 3, 1, 1, 2, 1, 1, 1, 1, 2, 4, 2, 0, 0, 1, 4,
                   0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1])
switchpoint = DiscreteUniform('switchpoint', lower=0, upper=110, doc='Switchpoint[year]')
early_mean = Exponential('early_mean', beta=1.)
late_mean = Exponential('late_mean', beta=1.)

我不明白为什么将early_mean和late_mean建模为指数分布后的随机变量,其中rate = 1.我的直觉是它们应该使用disasters_array和switchpoint变量进行确定性计算。

@deterministic(plot=False)
def early_mean(s=switchpoint):
    return sum(disasters_array[:(s-1)])/(s-1)

@deterministic(plot=False)
def late_mean(s=switchpoint):
    return sum(disasters_array[s:])/s

2 个答案:

答案 0 :(得分:0)

disasters_array是泊松过程在此模型假设下生成的数据。 late_meanearly_mean是与此流程相关的参数,具体取决于它们在时间序列中的发生时间。参数的真实值是未知的,因此它们被指定为随机变量。确定性对象仅适用于完全由其父项的值确定的节点。

答案 1 :(得分:0)

early_meanlate_mean随机要素视为模型参数,并将Exponential视为这些参数的先验分布。在此处的模型版本中,确定性r和可能性D通过MCMC抽样导致early_meanlate_mean上的后验。