1

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

角图

现在,我想计算一些量的后验,例如

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

使用我为qj获得的后验。谁能帮我?

4

2 回答 2

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 sigma 值 `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.03, dj = 0.25, Eq=-0.52, Ej=1.18(来自你的情节)。但是由于参数的高度相关性,这不是最安全的方法。

于 2019-12-09T16:00:55.420 回答
0

如果您有jq的原始后验样本,例如,两个 numpy 数组jq,那么在这些数组上按元素计算将产生所需变量的相应样本。在您的示例中,f = j - q**2.

我知道其他采样器(Stan,PyMC3)中存在直接在采样器中捕获感兴趣的转换变量样本的选项。也许知道主持人(不是我)的人知道如何做到这一点。

于 2018-09-25T18:25:45.390 回答