我开始学习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
答案 0 :(得分:0)
disasters_array
是泊松过程在此模型假设下生成的数据。 late_mean
和early_mean
是与此流程相关的参数,具体取决于它们在时间序列中的发生时间。参数的真实值是未知的,因此它们被指定为随机变量。确定性对象仅适用于完全由其父项的值确定的节点。
答案 1 :(得分:0)
将early_mean
和late_mean
随机要素视为模型参数,并将Exponential
视为这些参数的先验分布。在此处的模型版本中,确定性r
和可能性D
通过MCMC抽样导致early_mean
和late_mean
上的后验。