【问题标题】:How to make errors propagation using emcee如何使用司仪进行错误传播
【发布时间】:2019-03-01 07:19:16
【问题描述】:

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

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

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

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

【问题讨论】:

  • 亲爱的@saramago,我正在做主持人,能给我你的电子邮件吗?我想问你一个关于司仪的问题。谢谢。

标签: bayesian emcee


【解决方案1】:

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

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 达到高斯分布,则QQ[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)

它为dq = 0.03dj = 0.25Eq=-0.52Ej=1.18 提供f = 0.9 +/- 0.25(来自您的情节)。但由于参数的高度相关性,这不是最安全的方法。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 你建议我切换到 PyMC3 还是 Stan?他们的学习曲线是什么?
    • @Saramago,不一定。我不知道 emcee,但从描述来看,它很好地处理了方差中的尺度不平衡,而 HMC/NUTS(Stan 底层的采样器,PyMC3)却没有。然而,人们通常可以重新参数化以克服规模不平衡,然后 NUTS 可以在高维数据上高效,尽管有相关的后验。我主要使用 PyMC3,因为它同时处理离散和连续潜在随机变量。
    猜你喜欢
    • 2015-03-19
    • 1970-01-01
    • 2022-12-05
    • 2015-07-16
    • 2018-05-23
    • 2018-10-13
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    相关资源
    最近更新 更多