Как сделать распространение ошибок, используя emcee
Я использую Emcee для того, чтобы проанализировать некоторые данные, связанные с SN 1a. Прежде чем заняться реальными данными, я начал с симулированных данных. Результаты, которые я получил, кажутся хорошими:
Теперь я хочу вычислить исходные значения некоторых величин, таких как
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
(из вашего сюжета). Но из-за высокой корреляции параметров это не самый безопасный подход.