{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "\n", "**This is a fixed-text formatted version of a Jupyter notebook**\n", "\n", "- Try online [![Binder](https://static.mybinder.org/badge.svg)](https://mybinder.org/v2/gh/gammapy/gammapy-webpage/v0.17?urlpath=lab/tree/mcmc_sampling.ipynb)\n", "- You can contribute with your own notebooks in this\n", "[GitHub repository](https://github.com/gammapy/gammapy/tree/master/tutorials).\n", "- **Source files:**\n", "[mcmc_sampling.ipynb](../_static/notebooks/mcmc_sampling.ipynb) |\n", "[mcmc_sampling.py](../_static/notebooks/mcmc_sampling.py)\n", "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Fitting and error estimation with MCMC\n", "\n", "## Introduction\n", "\n", "The goal of Markov Chain Monte Carlo (MCMC) algorithms is to approximate the posterior distribution of your model parameters by random sampling in a probabilistic space. For most readers this sentence was probably not very helpful so here we'll start straight with and example but you should read the more detailed mathematical approaches of the method [here](https://www.pas.rochester.edu/~sybenzvi/courses/phy403/2015s/p403_17_mcmc.pdf) and [here](https://github.com/jakevdp/BayesianAstronomy/blob/master/03-Bayesian-Modeling-With-MCMC.ipynb).\n", "\n", "### How does it work ?\n", "\n", "The idea is that we use a number of walkers that will sample the posterior distribution (i.e. sample the Likelihood profile).\n", "\n", "The goal is to produce a \"chain\", i.e. a list of $\\theta$ values, where each $\\theta$ is a vector of parameters for your model.
\n", "If you start far away from the truth value, the chain will take some time to converge until it reaches a stationary state. Once it has reached this stage, each successive elements of the chain are samples of the target posterior distribution.
\n", "This means that, once we have obtained the chain of samples, we have everything we need. We can compute the distribution of each parameter by simply approximating it with the histogram of the samples projected into the parameter space. This will provide the errors and correlations between parameters.\n", "\n", "\n", "Now let's try to put a picture on the ideas described above. With this notebook, we have simulated and carried out a MCMC analysis for a source with the following parameters:
\n", "$Index=2.0$, $Norm=5\\times10^{-12}$ cm$^{-2}$ s$^{-1}$ TeV$^{-1}$, $Lambda =(1/Ecut) = 0.02$ TeV$^{-1}$ (50 TeV) for 20 hours.\n", "\n", "The results that you can get from a MCMC analysis will look like this :\n", "\n", "\n", "\n", "On the first two top panels, we show the pseudo-random walk of one walker from an offset starting value to see it evolve to a better solution.\n", "In the bottom right panel, we show the trace of each 16 walkers for 500 runs (the chain described previsouly). For the first 100 runs, the parameter evolve towards a solution (can be viewed as a fitting step). Then they explore the local minimum for 400 runs which will be used to estimate the parameters correlations and errors.\n", "The choice of the Nburn value (when walkers have reached a stationary stage) can be done by eye but you can also look at the autocorrelation time.\n", "\n", "### Why should I use it ?\n", "\n", "When it comes to evaluate errors and investigate parameter correlation, one typically estimate the Likelihood in a gridded search (2D Likelihood profiles). Each point of the grid implies a new model fitting. If we use 10 steps for each parameters, we will need to carry out 100 fitting procedures. \n", "\n", "Now let's say that I have a model with $N$ parameters, we need to carry out that gridded analysis $N*(N-1)$ times. \n", "So for 5 free parameters you need 20 gridded search, resulting in 2000 individual fit. \n", "Clearly this strategy doesn't scale well to high-dimensional models.\n", "\n", "Just for fun: if each fit procedure takes 10s, we're talking about 5h of computing time to estimate the correlation plots. \n", "\n", "There are many MCMC packages in the python ecosystem but here we will focus on [emcee](https://emcee.readthedocs.io), a lightweight Python package. A description is provided here : [Foreman-Mackey, Hogg, Lang & Goodman (2012)](https://arxiv.org/abs/1202.3665)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import astropy.units as u\n", "from astropy.coordinates import SkyCoord\n", "from gammapy.irf import load_cta_irfs\n", "from gammapy.maps import WcsGeom, MapAxis\n", "from gammapy.modeling.models import (\n", " ExpCutoffPowerLawSpectralModel,\n", " GaussianSpatialModel,\n", " SkyModel,\n", ")\n", "from gammapy.datasets import MapDataset\n", "from gammapy.makers import MapDatasetMaker\n", "from gammapy.data import Observation\n", "from gammapy.modeling.sampling import (\n", " run_mcmc,\n", " par_to_model,\n", " plot_corner,\n", " plot_trace,\n", ")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import logging\n", "\n", "logging.basicConfig(level=logging.INFO)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simulate an observation\n", "\n", "Here we will start by simulating an observation using the simulate_dataset method." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "irfs = load_cta_irfs(\n", " \"\$GAMMAPY_DATA/cta-1dc/caldb/data/cta/1dc/bcf/South_z20_50h/irf_file.fits\"\n", ")\n", "\n", "observation = Observation.create(\n", " pointing=SkyCoord(0 * u.deg, 0 * u.deg, frame=\"galactic\"),\n", " livetime=20 * u.h,\n", " irfs=irfs,\n", ")" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SkyModel\n", "\n", " Name : source\n", " Datasets names : None\n", " Spectral model type : ExpCutoffPowerLawSpectralModel\n", " Spatial model type : GaussianSpatialModel\n", " Temporal model type : None\n", " Parameters:\n", " index : 2.000 \n", " amplitude : 3.00e-12 1 / (cm2 s TeV)\n", " reference (frozen) : 1.000 TeV \n", " lambda_ : 0.050 1 / TeV \n", " alpha (frozen) : 1.000 \n", " lon_0 : 0.000 deg \n", " lat_0 : 0.000 deg \n", " sigma : 0.200 deg \n", " e (frozen) : 0.000 \n", " phi (frozen) : 0.000 deg \n", "\n", "\n" ] } ], "source": [ "# Define sky model to simulate the data\n", "spatial_model = GaussianSpatialModel(\n", " lon_0=\"0 deg\", lat_0=\"0 deg\", sigma=\"0.2 deg\", frame=\"galactic\"\n", ")\n", "\n", "spectral_model = ExpCutoffPowerLawSpectralModel(\n", " index=2,\n", " amplitude=\"3e-12 cm-2 s-1 TeV-1\",\n", " reference=\"1 TeV\",\n", " lambda_=\"0.05 TeV-1\",\n", ")\n", "\n", "sky_model_simu = SkyModel(\n", " spatial_model=spatial_model, spectral_model=spectral_model, name=\"source\"\n", ")\n", "print(sky_model_simu)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# Define map geometry\n", "axis = MapAxis.from_edges(\n", " np.logspace(-1, 2, 30), unit=\"TeV\", name=\"energy\", interp=\"log\"\n", ")\n", "geom = WcsGeom.create(\n", " skydir=(0, 0), binsz=0.05, width=(2, 2), frame=\"galactic\", axes=[axis]\n", ")\n", "\n", "empty_dataset = MapDataset.create(geom=geom, name=\"dataset-mcmc\")\n", "maker = MapDatasetMaker(selection=[\"background\", \"edisp\", \"psf\", \"exposure\"])\n", "dataset = maker.run(empty_dataset, observation)\n", "dataset.models.append(sky_model_simu)\n", "dataset.fake()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "