试图通过例子来理解PyMC,我做了一个小模型参考一组鸟类重量(观察到的数据:
y20
),据说来自正常人口N(mu, sigma)
.
import pymc as pm
import arviz as az
with pm.Model() as model:
# Priors for unknown model parameters
mu = pm.Uniform('mu', lower = 0, upper = 2000)
sigma = pm.Uniform('sigma', lower = 0, upper = 100)
# Likelihood of observations
lkd = pm.Normal('likelihood', mu = mu, sigma = sigma, observed = y20)
# Expected value of outcome
weights = pm.Normal('weights', mu = mu, sigma = sigma)
这个
pm.Model()
运行没有问题。现在关于抽样......
浏览文档,我在“阅读文档”教程中找到,在这里:HERE,
paragraph 3.5.1
,以下句子:MCMC 通常会导致样本之间的强自相关,从而导致不精确的后验推理。为了避免这种情况,通过仅保留每第 k 个样本来稀释样本是很有用的,其中 k 是一个整数值。这个细化间隔通过 thin 参数传递给采样器。
所以,在我的模型之后,我使用了这条新线:
with model:
trace = pm.sample(1000, tune = 1000, thin = 10)
我得到了一个奇怪的结果:
ValueError: Unused step method arguments: {'thin'}
PyMC 有什么变化吗?
您共享的文档链接似乎已过时。您分享的参考链接的主页:https://pymcmc.readthedocs.io/en/latest/ 显示它适用于版本 2x(检查介绍下的 1.3:版本 2 中的新功能)并且当前版本是 5.1.1
正如您在他们分享的教程中看到的,他们也使用 iter 作为参数。但是,您正在使用 tune。您正在合并来自两个不同版本的输入定义。
他们的 git 页面指向此文档页面作为参考,并且似乎也已更新: https://www.pymc.io/welcome.html
你可以参考这个文件的第317行,看看sample函数接受的参数是否符合你的要求: https://github.com/pymc-devs/pymc/blob/main/pymc/sampling/mcmc.py