假设我使用 pymc3 为伽马分布生成一些样本数据:
import pymc3 as pm
import arviz as az
# generate fake data:
with pm.Model() as model2:
g = pm.Gamma('g', alpha=1.7, beta=0.097)
syn = g.random(size=1000)
plt.hist(syn, bins=50);
现在,我将创建一个模型来拟合该数据的伽马分布:
model = pm.Model()
with model:
# alpha
alpha = pm.Exponential('alpha', lam=2)
# beta
beta = pm.Exponential('beta', lam=0.1)
g = pm.Gamma('g', alpha=alpha, beta=beta, observed=syn)
trace = pm.sample(2000, return_inferencedata=True)
这将正确获得创建原始假数据的值和分布。现在,我想绘制 pdf(但我不知道该怎么做!)。我看到了一个这样做的例子:
with model:
post_pred = pm.sample_posterior_predictive(trace.posterior)
# add posterior predictive to the InferenceData
az.concat(trace, az.from_pymc3(posterior_predictive=post_pred), inplace=True)
它创建了一个矩阵,其中包含来自估计的 pdf 的样本。我用以下方法绘制结果:
fig, ax = plt.subplots()
az.plot_ppc(trace, ax=ax)
ax.hist(syn, bins=100, alpha=.3, density=True, label='data')
ax.legend(fontsize=10);
plt.xlim([0,60])
这使:
这不是我要找的。相反,我想从 alpha 和 beta 的后验中采样以绘制许多 gamma pdf。我可以通过采样和绘制线条来做到这一点,但我认为这必须是已经用 pymc3 或 arviz 实现的东西,但我只是不知道。如果你能告诉我如何绘制我想要的东西,请提前感谢。