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)