如何使用主持人进行错误传播

时间:2018-09-25 15:40:45

标签: bayesian emcee

我正在使用emcee来分析与SN 1a相关的某些数据。在处理真实数据之前,我从模拟数据开始。 我获得的结果似乎不错:

cornerplots

现在,我要计算一些后验数,例如

f(q,j)= j-q ^ 2

使用我为 q j 获得的后验者。 谁能帮我吗?

2 个答案:

答案 0 :(得分:0)

如果您有 j q 的原始后验样本,例如两个numpy数组jq,则对它们进行逐元素计算数组将为所需变量生成相应的样本。在您的示例中,f = j - q**2

我知道其他采样器(Stan,PyMC3)中存在直接在采样器中捕获感兴趣的转换变量的样本的选项。也许认识主持人的人(不是我)知道该怎么做。

答案 1 :(得分:0)

您可以使用参数的最终样本,然后获取变换的分位数,例如:

ndim=3 #number of parameters
chains= sampler.chain
samples = chains.reshape((-1, ndim))
q=samples[:,0]
j=samples[:,1]
H=samples[:,2]
f = j - q**2

f现在可以表示为分布:

import matplotlib.pyplot as plt
import numpy as np
plt.hist(f)
Q=np.quantile(f,q=[0.16,0.5,0.84])

如果f达到高斯分布,则Q是中位数Q[1],其西格玛值为1'Q [0],Q [1]'

您还可以使用标准误差传播方程式(https://en.wikipedia.org/wiki/Propagation_of_uncertainty):

f=Ej-Eq**2
df = np.sqrt(dj**2 - (2*Eq*dq)**2)

给出f = 0.9 +/- 0.25dq = 0.03dj = 0.25Eq=-0.52的{​​{1}}(来自您的情节)。但是由于参数的高度相关性,所以这不是最安全的方法。