Как сделать распространение ошибок, используя emcee

Я использую Emcee для того, чтобы проанализировать некоторые данные, связанные с SN 1a. Прежде чем заняться реальными данными, я начал с симулированных данных. Результаты, которые я получил, кажутся хорошими:

cornerplots

Теперь я хочу вычислить исходные значения некоторых величин, таких как

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

используя постеры, которые я получил для q и j. Может кто-нибудь мне помочь?

1 ответ

Если у вас есть сырые задние образцы j и q, например, два массива numpy j а также qзатем поэлементное вычисление этих массивов даст соответствующие выборки для требуемой переменной. В вашем примере f = j - q**2,

Я знаю, что опции для захвата образцов преобразованных переменных, представляющих интерес, непосредственно в семплере, существуют в других семплерах (Stan, PyMC3). Может быть, кто-то, кто знает ведущий (не я) знает, как это сделать.

Вы можете использовать окончательные образцы параметров, а затем получить квантили преобразования, например:

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.25 за dq = 0.03, dj = 0.25, Eq=-0.52, Ej=1.18(из вашего сюжета). Но из-за высокой корреляции параметров это не самый безопасный подход.

Другие вопросы по тегам