prior_from_idata#

pymc_extras.utils.prior.prior_from_idata(idata: InferenceData, name='trace_prior_', *, var_names: Sequence[str] = (), **kwargs: ParamCfg | Transform | str | tuple) dict[str, TensorVariable][source]#

使用 MvNormal 近似从后验创建先验。

此近似使用 MvNormal 分布。请记住,此函数仅适用于单峰后验,并且在发生复杂的交互时会失败。

此外,如果检索到的变量受到约束,则应为该变量指定一个变换,例如标准差后验的 pymc.distributions.transforms.log

参数:
  • idata (arviz.InferenceData) – 带有后验组的推断数据

  • var_names (Sequence[str]) – 要从后验中按原样获取的变量名称

  • kwargs (Union[ParamCfg, Transform, str, Tuple]) – 带有附加配置的变量名称,详见示例

示例

>>> import pymc as pm
>>> import pymc.distributions.transforms as transforms
>>> import numpy as np
>>> with pm.Model(coords=dict(test=range(4), options=range(3))) as model1:
...     a = pm.Normal("a")
...     b = pm.Normal("b", dims="test")
...     c = pm.HalfNormal("c")
...     d = pm.Normal("d")
...     e = pm.Normal("e")
...     f = pm.Dirichlet("f", np.ones(3), dims="options")
...     trace = pm.sample(progressbar=False)

您可以在新模型中重用后验。

>>> with pm.Model(coords=dict(test=range(4), options=range(3))) as model2:
...     priors = prior_from_idata(
...         trace,                  # the old trace (posterior)
...         var_names=["a", "d"],   # take variables as is
...
...         e="new_e",              # assign new name "new_e" for a variable
...                                 # similar to dict(name="new_e")
...
...         b=("test", ),           # set a dim to "test"
...                                 # similar to dict(dims=("test", ))
...
...         c=transforms.log,       # apply log transform to a positive variable
...                                 # similar to dict(transform=transforms.log)
...
...                                 # set a name, assign a dim and apply simplex transform
...         f=dict(name="new_f", dims="options", transform=transforms.simplex)
...     )
...     trace1 = pm.sample_prior_predictive(100)