我有一个n个观察列表,每个观察值是两个Weibull分布式变量的总和:
x[i] = t1[i] + t2[i]
t1[i] ~ Weibull(shape1, scale1)
t2[i] ~ Weibull(shape2, scale2)
Run Code Online (Sandbox Code Playgroud)
我的目标是:
1)估计威布尔分布(shape1,scale1,shape2,scale2)的形状和比例参数,
2)对于每个观测值x [i],估计t1 [i](并且t2 [i]由此得出).
(旁白:每次观察x [i]是癌症诊断的年龄,t1 [i]和t2 [i]是肿瘤发展的两个不同时期.实际模型也涉及突变数据,但在此之前尝试一下,我想确保我可以使用PyMC来解决这个更简单的问题.)
我正在使用PyMC2进行这些估算,看起来运行会收敛,但结果不正确.我不知道我的PyMC模型语法,MCMC设置或两者都有问题.我试着适应这个建议使用电位潜变量模型.首先,我为每个观察定义x [i]和t1 [i]:
for i in xrange(n):
x[i] = pm.Index('x_%i'%i, x=data, index=i) # data is a list of observations
t1[i] = pm.Weibull('t1_%i'%i, alpha=shape1, beta=scale1)
# Ensure that initial guess for t1 is not more than the observed sum:
if t1[i].value >= x[i].value:
t1[i].value = 0.95 * x[i].value
Run Code Online (Sandbox Code Playgroud)
然后我为t2 [i] = x [i] …