我正在尝试一个非常简单的模型:在我假设我知道精度的地方拟合一个 Normal,我只想找到平均值。下面的代码似乎正确地适合法线。但是在拟合之后,我想从模型中采样,即生成与我的data
变量相似的新数据。我知道我可以trace("mean")
用来获取平均变量的样本。但是我怎样才能从模型本身中获取新样本呢?
我查看了文档,例如http://pymc-devs.github.io/pymc/database.html#accessing-sampled-data。我还看过不少例子,例如矿难,还有一些来自概率编程笔记本的例子,但都没有提到这一点。我(或多或少是 MCMC 初学者)期望从拟合模型中采样是重点!我错过了什么?
from pymc import *
data = np.array([-1, 0, 4, 0, 2, -2, 1, 0, 0, 2, 1, -3, -1, 0, 0, 1, 0, 1])
mean = Uniform("mean", -4, 4)
precision = 2.0**-2
obs = Normal("obs", mean, precision, value=data, observed=True)
model = Model( {"mean": mean, "obs": obs})
mcmc = MCMC(model)
mcmc.sample(10000, 1000, 1)
# I can get samples for the "mean" variable
mean_samples = mcmc.trace("mean")[:]
hist(mean_samples)
# but how can I do the equivalent of mcmc.trace("obs")?