Подбор вероятностных данных с верхними пределами и асимметричными ошибками
Я хочу использовать emcee
( http://dfm.io/emcee/current/) пакет для подгонки некоторых данных к различным моделям. Данные имеют этот формат:
# Energy dN/dE DeltaEnergy- DeltaEnergy+ Delta dN/dE- Delta dN/dE+
1.733589e-01 3.589066e-14 7.335888e-02 1.271741e-01 0.000000e+00 0.000000e+00
5.210007e-01 4.923808e-14 2.204677e-01 3.822003e-01 0.000000e+00 0.000000e+00
1.565779e+00 1.155390e-13 6.625782e-01 1.148638e+00 0.000000e+00 0.000000e+00
4.705684e+00 6.044048e-14 1.991267e+00 3.452038e+00 5.439188e-14 5.439188e-14
1.414214e+01 1.340533e-13 5.984414e+00 1.037451e+01 9.279249e-14 9.279249e-14
4.250179e+01 2.162381e-13 1.798514e+01 3.117884e+01 1.745667e-13 1.745667e-13
1.277319e+02 5.191010e-13 5.405129e+01 9.370272e+01 0.000000e+00 0.000000e+00
3.838766e+02 1.420706e-12 1.624420e+02 2.816076e+02 0.000000e+00 0.000000e+00
1.153676e+03 5.254703e-12 4.881918e+02 8.463239e+02 0.000000e+00 0.000000e+00
Как видите, ошибки в энергии (переменная x) асимметричны, а в dN/dE (переменная y) - нет.
Тем не менее, когда ошибка в dN / dE установлена в 0, это означает, что это просто верхний предел.
Модели являются вариациями степенного закона, т. Е.
у = А * (х / х0) ** а
Где A - амплитуда, x0 - нормализация и индекс степенного закона. Вариация - степенной закон экспоненциальной отсечки,
y = A * (x/x0) ** a * exp (x/xcut)
Где сейчас xcut - это значение отсечения.
Что мне нужно?
Мне нужен код, который принимает эти данные и, используя emcee
, учитывая начальный вектор параметров (A_in, x0_in, a_in)
исследует пространство параметров, чтобы найти вероятность каждого набора параметров, пока не найдет наиболее подходящие параметры (думаю, максимизация вероятности).
Он также должен построить точки соответствия с функцией наилучшего соответствия, а также corner_plot
и выведите значение наиболее подходящих параметров и логарифмическую вероятность для сравнения с другими моделями.