import numpy as np import pandas as pd import pymc as pm def record(name,var): pm.Deterministic(f'{name}_mu',var) def observe(name,var,observed,sigma=1): if isinstance(observed,pd.DataFrame): if name not in observed.columns: raise Exception(f'observed data中未找到{name}') observed = observed.loc[:,name].values mu = pm.Deterministic(f'{name}_mu',var) sigma = pm.HalfNormal(f'{name}_sigma',sigma=sigma) pm.Normal(name,mu=mu,sigma=sigma,observed=observed) def reorder_posterior(prior:dict,posterior:dict): param_posterior_reorder = {'F_air':{}} for equp_name in prior.keys(): param_posterior_reorder.setdefault(equp_name,{}) for param_name,param_value in posterior.items(): if '__' in param_name: continue if param_name == 'F_air_val_rw': param_value = param_value[-1] if param_name.startswith(equp_name): param_name_adj = param_name.replace(f'{equp_name}_','') param_posterior_reorder[equp_name][param_name_adj] = param_value return param_posterior_reorder