gpt4 book ai didi

python - 如何将坐标传递给arviz/pymc3函数plot_posterior(类似于xarray.Dataset.sel)

转载 作者:行者123 更新时间:2023-12-01 07:46:28 25 4
gpt4 key购买 nike

我正在 pymc3 中进行一些贝叶斯建模,并希望使用plot_posterior(来自 arviz 包)绘制后验分布。生成的图在水平轴上尴尬地未对齐,我想将其移动到 -3 和 +3 之间精确绘制。不幸的是,我无法弄清楚应该将什么传递给函数来指定这一点。

arviz.plot_posterior 的文档指定参数“coords”具有定义“要绘制的 var_names 的坐标。传递到 Dataset.sel”大概这是我需要指定水平轴范围的内容,但它没有不要告诉我它期望什么样的值。

我已经检查了 Dataset.sel 的文档,它指出它期望的第一个参数是“一个字典,其键与标量、切片或刻度标签数组给出的维度和值匹配”。我对此的解释是,键是与变量名称匹配的字符串,值是刻度线的一些可迭代结构。

我的变量称为“m”,是由以下代码生成的:

with pymc3.Model() as m1:
m = pymc3.Normal('m', mu = 0, sigma = 1)
obs = pymc3.Normal('obs', mu = m, sigma = 1, observed = numpy.random.randn(3))
trace = pymc3.sample(1000, tune = 500, cores = 1)

我对plot_posterior的期望是这样的:

plot_posterior(trace, coords = {'m': [-3.0, -2,0, -1,0, 0.0, 1.0, 2.0, 3.0]})

它给了我错误“ValueError:维度或多索引级别 ['m'] 不存在”

大概我走在正确的轨道上,但我只是无法挖掘出这个函数需要什么参数的更精确的定义。感谢您提供的任何帮助。

编辑:我已经弄清楚如何扩展轴本身(技巧是 ax = mpl.pyplot.axes(xlim = (-3.0, 3.0))),但我仍然不知道如何扩展绘图变量本身。

最佳答案

这实际上是你可以直接进入 matplotlib 的东西:pm.plot_posterior 将返回一个轴,它具有大多数显示属性的 getter 和 setter:

ax, = pymc3.plot_posterior(trace)
ax.set_xlim(-3, 3)

enter image description here

coords 参数用于多维随机变量。如果您的模型如下所示:

with pymc3.Model() as m1:
m = pymc3.Normal('m', mu = 0, sigma = 1, shape = 4)
obs = pymc3.Normal('obs', mu = m, sigma = 1, observed = numpy.random.randn(3, 4))
trace = pymc3.sample(1000, tune = 500, cores = 1)

那么你的绘图将具有 m 的所有 4 个维度:

pymc3.plot_posterior(trace)

enter image description here

您可以使用坐标来减少它:

pymc3.plot_posterior(trace, coords={'m_dim_0': [0, 2]})

enter image description here

关于python - 如何将坐标传递给arviz/pymc3函数plot_posterior(类似于xarray.Dataset.sel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56439959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com