{ "cells": [ { "metadata": {}, "cell_type": "markdown", "source": "# Simple notebook examples", "id": "2a9d32bbc3169760" }, { "cell_type": "markdown", "id": "570c64f1", "metadata": {}, "source": [ "This tutorial will teach you how to use breads to fit models to data by analytically marginalizing over linear parameters, enabling the evaluation of model probabilities without relying on computationally expensive MCMC methods. Through simple linear and Gaussian examples, you will learn how breads performs parameter estimation and how its grid-based approach compares to traditional posterior sampling techniques." ] }, { "cell_type": "markdown", "id": "fff45256", "metadata": {}, "source": [ "## Set-up" ] }, { "cell_type": "markdown", "id": "c9aca125", "metadata": {}, "source": [ "Import necessary modules from breads and packages" ] }, { "cell_type": "code", "execution_count": 1, "id": "de52fbe7", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/khorstman/opt/anaconda3/envs/breads-env/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", " from .autonotebook import tqdm as notebook_tqdm\n" ] } ], "source": [ "from breads.fit import fitfm\n", "from breads.instruments import Instrument\n", "from breads.grid_search import grid_search\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import emcee" ] }, { "cell_type": "markdown", "id": "f7034dd7", "metadata": {}, "source": [ "## Linear model fitting" ] }, { "cell_type": "markdown", "id": "d195ada8", "metadata": {}, "source": [ "First, we need to define the function for a line. Since the function for a line only contains linear parameters, no non-linear parameters are included. However, the `fitfm` function requires non-linear parameters, so we must include them in the definition of our line. \n", "\n", "The linear forward model function must return:\n", "\n", "d: Data as a 1d vector with bad pixels removed (no nans)\n", "\n", "M: Linear model as a matrix of shape (Nd,Np) with bad pixels removed (no nans). Nd is the size of the data vector and Np is the number of linear parameters.\n", "\n", "s: Noise vector (standard deviation) as a 1d vector matching d.\n", "\n", "See `breads.fm.template` for more information." ] }, { "cell_type": "code", "execution_count": 2, "id": "6f75c8bc", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", "def linear_fm_func(nonlin_paras, instrument: \"Instrument\", **fm_paras):\n", " \"\"\"\n", " Build a linear forward model for an Instrument instance.\n", " \n", " Parameters\n", " ----------\n", " nonlin_paras : array-like\n", " Non-linear parameters (not used in this simple linear model,but kept for consistency).\n", " \n", " instrument : Instrument\n", " An instance of the Instrument class containing wavelengths and data.\n", " \n", " Returns\n", " -------\n", " y : np.ndarray\n", " The dependent variable (instrument data flattened).\n", " M : np.ndarray\n", " The design matrix for linear fitting (wavelengths and constant term).\n", " s : np.ndarray or None\n", " Uncertainties from instrument.noise, if available.\n", " \"\"\"\n", "\n", " # Flatten the data for 1D linear fit\n", " y = instrument.data.flatten()\n", " x = instrument.wavelengths.flatten()\n", " \n", " s = instrument.noise.flatten()\n", " \n", " # Design matrix: linear term + constant\n", " M = np.vstack([x, np.ones_like(x)]).T\n", " \n", " return y, M, s" ] }, { "cell_type": "markdown", "id": "6d9b18f0", "metadata": {}, "source": [ "Next, we need to define our example data set. " ] }, { "cell_type": "code", "execution_count": 3, "id": "73142593", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/khorstman/breads/breads/instruments/instrument.py:55: UserWarning: when feeding data manually, ensure correct units. wavelengths in microns, bary_RV in km/s\n", " warn(\"when feeding data manually, ensure correct units. wavelengths in microns, bary_RV in km/s\")\n" ] } ], "source": [ "my_instrument = Instrument(\"example_instrument\")\n", "\n", "my_instrument.manual_data_entry(\n", " wavelengths=np.array([1,2,3,4,5]), \n", " data=np.array([2.1,3.5,6.1,9.2,10.2]), \n", " noise=np.ones(5)*0.3,\n", " bad_pixels=None,\n", " bary_RV=0\n", ")" ] }, { "cell_type": "markdown", "id": "bca59b9f", "metadata": {}, "source": [ "Finally, we need to use the `fitfm` function to return the best fit linear parameters." ] }, { "cell_type": "code", "execution_count": 4, "id": "ea368364", "metadata": {}, "outputs": [], "source": [ "results = fitfm(\n", " nonlin_paras=[],\n", " dataobj=my_instrument,\n", " fm_func=linear_fm_func,\n", " fm_paras={}\n", ")" ] }, { "cell_type": "code", "execution_count": 5, "id": "9ffc9c9c", "metadata": {}, "outputs": [], "source": [ "log_prob, log_prob_H0, rchi2, linparas, linparas_err = results" ] }, { "cell_type": "code", "execution_count": 6, "id": "b721d0e8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Slope (m): 2.189999999999999 ± 0.11986957920086994\n", "Intercept (b): -0.3499999999999976 ± 0.39756241798707526\n", "Reduced chi2: 2.548888888888885\n" ] } ], "source": [ "print(\"Slope (m):\", linparas[0], \"±\", linparas_err[0])\n", "print(\"Intercept (b):\", linparas[1], \"±\", linparas_err[1])\n", "print(\"Reduced chi2:\", rchi2)" ] }, { "cell_type": "code", "execution_count": 7, "id": "4dc85cb0", "metadata": {}, "outputs": [ { "data": { "image/png": "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zuPO27As6+fu2/CKK64wFixYUOJr7rzt/uxC6+iu2y89Pd1o0KCBsX79eqNz587GhAkTSp3XHbdjedbP3bbh5MmTjZYtW5Z5fqu2n0ft+SivzZs307Nnz2LTevXqxbZt28jNzbUolf21bt2aqKgounXrxoYNG6yOU2apqakAVKlSpdR53HkblmX9CrnbNszPz+fDDz8kMzOT9u3blziPO287KNs6FnK37Td27Fj69u1L9+7dLzqvO27H8qxfIXfahj/++CPVq1cnJiaGW2+9lcOHD5c6r1Xbz+UeLOdMycnJVKtWrdi0atWqkZeXx6lTp4iKirIomX1ERUUxb948rr76arKzs/nXv/5Ft27diI+P54YbbrA63gUZhsFDDz1Ex44dadasWanzues2LOv6uds23Lt3L+3btycrK4tKlSqxYsUKmjRpUuK87rrtyrOO7rb9AD788EN27NjB1q1byzS/u23H8q6fu23Da6+9ln/+8580bNiQEydO8Pzzz9OhQwf2799P1apVz5vfqu3n1eUDwGazFRsb/7vh61+nu6NGjRrRqFGjonH79u05duwYs2bNcsn/aP5s3Lhx7Nmzh6+++uqi87rjNizr+rnbNmzUqBG7du3i999/Z9myZdx1110kJCSU+uXsjtuuPOvobtvv2LFjTJgwgXXr1hEUFFTm97nLdryU9XO3bXjjjTcW/bl58+a0b9+eevXq8f777/PQQw+V+B4rtp9XH3aJjIwkOTm52LSUlBT8/PxKbIie4LrrruPHH3+0OsYFPfDAA6xatYoNGzZQs2bNC87rjtuwPOtXElfehgEBAdSvX5+2bdsyffp0WrZsyT/+8Y8S53XHbQflW8eSuPL22759OykpKVx99dX4+fnh5+dHQkICr7/+On5+fuTn55/3HnfajpeyfiVx5W34VxUrVqR58+al5rVq+3n1no/27duzevXqYtPWrVtH27Zt8ff3tyiVY+3cudPldoMWMgyDBx54gBUrVhAfH09MTMxF3+NO2/BS1q8krrwN/8owDLKzs0t8zZ223YVcaB1L4srbr1u3buddGTFy5EgaN27M448/jq+v73nvcafteCnrVxJX3oZ/lZ2dzYEDB+jUqVOJr1u2/Rx6OquTpaenGzt37jR27txpAMbs2bONnTt3Gj///LNhGIbxxBNPGH/729+K5j98+LARHBxs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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "model = linparas[0] * my_instrument.wavelengths + linparas[1]\n", "\n", "plt.errorbar(\n", " my_instrument.wavelengths, \n", " my_instrument.data, \n", " yerr=my_instrument.noise, \n", " fmt='o', \n", " label='Data'\n", ")\n", "\n", "plt.plot(my_instrument.wavelengths, model, label='Linear Fit')\n", "plt.xlabel(\"Wavelength\")\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "c44947e5", "metadata": {}, "source": [ "## Gaussian model fitting" ] }, { "cell_type": "markdown", "id": "830fa6c1", "metadata": {}, "source": [ "Now, we will define a a gaussian model with both linear and non-linear parameters. To keep it simple, we will fix sigma, or the standard deviation, so we only need to worry about one non-linear parameter. \n", "\n", "The gaussian function now has two parameters:\n", "\n", "mu (mean): Non-linear\n", "\n", "A (amplitude): Linear" ] }, { "cell_type": "code", "execution_count": 20, "id": "db8bc4b0", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", "def gaussian_mu_only_fm_func(nonlin_paras, instrument, **fm_paras):\n", " \"\"\"\n", " Linear forward model for a Gaussian with fixed sigma, fitting only mu.\n", " \n", " Parameters\n", " ----------\n", " nonlin_paras : list or array\n", " [mu] - the Gaussian center\n", " \n", " instrument : Instrument\n", " Instrument instance containing wavelengths, data, and noise\n", " \n", " fm_paras : dict\n", " Additional parameters, must include 'sigma'\n", " \n", " Returns\n", " -------\n", " y : np.ndarray\n", " The dependent variable (instrument data flattened).\n", " M : np.ndarray\n", " The design matrix for linear fitting (gaussian).\n", " s : np.ndarray or None\n", " Uncertainties from instrument.noise, if available.\n", " \"\"\"\n", " # Extract mu and sigma\n", " mu = nonlin_paras[0]\n", " sigma = fm_paras[\"sigma\"]\n", "\n", " x = instrument.wavelengths.flatten()\n", " y = instrument.data.flatten()\n", " s = instrument.noise.flatten()\n", "\n", " # Gaussian basis (linear in amplitude)\n", " A = np.exp(-0.5 * ((x - mu) / sigma) ** 2)\n", " M = A[:, None] \n", "\n", " return y, M, s" ] }, { "cell_type": "markdown", "id": "97cbbb83", "metadata": {}, "source": [ "Next, we define the example gaussian data set." ] }, { "cell_type": "code", "execution_count": 21, "id": "6003ad85", "metadata": {}, "outputs": [ { "data": { "image/png": "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lzV16lRryZIldpcUUx588EFr8uTJdpcR8+bMmWPdfffdfutuvvlma968eTZVFJskWa+88opvuaOjw0pPT7fWrl3rW9fc3Gy53W5r48aNYa/H8R2L1tZWVVRUaNasWX7rZ82apXfeecemqmKf1+uVJKWmptpcSWxavHix5syZoxkzZthdSkzatm2bxo8fr7/9279VWlqaxowZo+eff97usmLO5MmT9dZbb+mTTz6RJB06dEhvv/22brjhBpsri23V1dWqq6vzOy4mJCRo6tSpETkuRvxLyEw7ceKE2tvbNXDgQL/1AwcOVF1dnU1VxTbLsrRs2TJNnjxZ2dnZdpcTc7Zu3arKykqVl5fbXUrM+vTTT1VUVKRly5bpoYceUllZmX7yk58oISFBP/jBD+wuL2Y8+OCD8nq9GjlypOLi4tTe3q7HH39cd9xxh92lxbTOY9/ZjoufffZZ2D/f8cGi07e/gt2yLKNfy47/d++99+r999/X22+/bXcpMaempkZLlizRm2++qcTERLvLiVkdHR0aP3681qxZI0kaM2aMjhw5oqKiIoKFQS+99JJKSkq0ZcsWXXnllaqqqtLSpUs1aNAg3XXXXXaXF/PsOi46Plj0799fcXFxZ3Qn6uvrz0hrCN19992nbdu2af/+/Ro8eLDd5cSciooK1dfXa9y4cb517e3t2r9/vzZs2KCWlhbFxcXZWGFs8Hg8ysrK8lt3xRVX6Le//a1NFcWmn/70p1q+fLluv/12SdKoUaP02WefqbCwkGARRunp6ZK+7lx4PB7f+kgdFx1/jUV8fLzGjRunXbt2+a3ftWuXJk6caFNVsceyLN177716+eWXtXv3bmVmZtpdUky67rrr9MEHH6iqqsr3GD9+vObOnauqqipChSGTJk0643bpTz75RJdeeqlNFcWmpqYm9ejhf5iJi4vjdtMwy8zMVHp6ut9xsbW1Vfv27YvIcdHxHQtJWrZsmb7//e9r/PjxmjBhgjZt2qTjx49r4cKFdpcWMxYvXqwtW7botddeU3Jysq9D5Ha71bt3b5urix3JyclnXLfSp08f9evXj+tZDLr//vs1ceJErVmzRrfeeqvKysq0adMmbdq0ye7SYkp+fr4ef/xxXXLJJbryyiv13nvvaf369br77rvtLs3xTp06pX//93/3LVdXV6uqqkqpqam65JJLtHTpUq1Zs0YjRozQiBEjtGbNGiUlJenOO+8Mf3Fhv+8kQp599lnr0ksvteLj462xY8dyG6Rhks762Lx5s92lxTxuNw2P7du3W9nZ2VZCQoI1cuRIa9OmTXaXFHMaGhqsJUuWWJdccomVmJhoDR061Hr44YetlpYWu0tzvD179pz1/8l33XWXZVlf33JaUFBgpaenWwkJCda1115rffDBBxGpja9NBwAAxjj+GgsAABA9CBYAAMAYggUAADCGYAEAAIwhWAAAAGMIFgAAwBiCBQAAMIZgAQAAjCFYAAjZypUrdfXVV9tdho/L5dKrr75qdxlAt0SwABxk48aNSk5OVltbm2/dqVOn1KtXL02ZMsVv2wMHDsjlcumTTz6JdJkRE22BBgDBAnCU3NxcnTp1SgcPHvStO3DggNLT01VeXq6mpibf+r1792rQoEG67LLL7CgVQDdFsAAc5PLLL9egQYO0d+9e37q9e/fqxhtv1LBhw/TOO+/4rc/NzVVJSYnGjx+v5ORkpaen684771R9fb0kqaOjQ4MHD9bGjRv9PqeyslIul0uffvqpJMnr9epHP/qR0tLSlJKSounTp+vQoUPnrHXz5s264oorlJiYqJEjR+q5557zPXfs2DG5XC69/PLLys3NVVJSkkaPHq0//OEPfu/x/PPPKyMjQ0lJSfre976n9evXq2/fvpKk4uJirVq1SocOHZLL5ZLL5VJxcbHvtSdOnND3vvc9JSUlacSIEdq2bdsF72cAwSNYAA4zbdo07dmzx7e8Z88eTZs2TVOnTvWtb21t1R/+8Afl5uaqtbVVq1ev1qFDh/Tqq6+qurpa8+fPlyT16NFDt99+u371q1/5fcaWLVs0YcIEDR06VJZlac6cOaqrq9Prr7+uiooKjR07Vtddd51Onjx51hqff/55Pfzww3r88cf14Ycfas2aNfrHf/xHvfjii37bPfzww3rggQdUVVWlyy67THfccYdvmOf3v/+9Fi5cqCVLlqiqqkozZ87U448/7nvtbbfdpr//+7/XlVdeqdraWtXW1uq2227zPb9q1Srdeuutev/993XDDTdo7ty5XdYLwKCIfIcqAGM2bdpk9enTx/rqq6+shoYGq2fPntYXX3xhbd261Zo4caJlWZa1b98+S5L15z//+YzXl5WVWZKsxsZGy7Isq7Ky0nK5XNaxY8csy7Ks9vZ26+KLL7aeffZZy7Is66233rJSUlKs5uZmv/cZNmyY9Ytf/MKyLMsqKCiwRo8e7XsuIyPD2rJli9/2q1evtiZMmGBZlmVVV1dbkqwXXnjB9/yRI0csSdaHH35oWZZl3XbbbdacOXP83mPu3LmW2+32LX/7cztJsh555BHf8qlTpyyXy2Xt3LnzjG0BmEXHAnCY3NxcnT59WuXl5Tpw4IAuu+wypaWlaerUqSovL9fp06e1d+9eXXLJJRo6dKjee+893Xjjjbr00kuVnJysadOmSZKOHz8uSRozZoxGjhypX//615Kkffv2qb6+XrfeeqskqaKiQqdOnVK/fv100UUX+R7V1dX685//fEZ9//mf/6mamhrdc889ftv/0z/90xnbX3XVVb6fPR6PJPmGaT7++GPl5OT4bf/t5XP55nv36dNHycnJvvcGED497S4AQGCGDx+uwYMHa8+ePfryyy81depUSVJ6eroyMzP1+9//Xnv27NH06dN1+vRpzZo1S7NmzVJJSYkGDBig48eP6/rrr1dra6vvPefOnastW7Zo+fLl2rJli66//nr1799f0tfXYXg8Hr/rOjp1Xu/wTR0dHZK+Hg75zne+4/dcXFyc33KvXr18P7tcLr/XW5blW9fJsqwL2UVnvHfn+3e+N4DwIVgADpSbm6u9e/fqyy+/1E9/+lPf+qlTp+qNN97Qu+++qwULFuijjz7SiRMntHbtWmVkZEiS3x0lne6880498sgjqqio0L/927+pqKjI99zYsWNVV1ennj17asiQIeetbeDAgbr44ov16aefau7cuUH/jiNHjlRZWZnfum/XHh8fr/b29qA/A4B5BAvAgXJzc7V48WJ99dVXvo6F9HWwWLRokZqbm5Wbm6vExETFx8frmWee0cKFC3X48GGtXr36jPfLzMzUxIkTdc8996itrU033nij77kZM2ZowoQJuummm7Ru3Tpdfvnl+vzzz/X666/rpptu0vjx4894v5UrV+onP/mJUlJSNHv2bLW0tOjgwYP68ssvtWzZsgv6He+77z5de+21Wr9+vfLz87V7927t3LnTr4sxZMgQVVdXq6qqSoMHD1ZycrISEhIC2ZUADOMaC8CBcnNz9T//8z8aPny4Bg4c6Fs/depUNTY2atiwYcrIyNCAAQNUXFys3/zmN8rKytLatWv15JNPnvU9586dq0OHDunmm29W7969fetdLpdef/11XXvttbr77rt12WWX6fbbb9exY8f8PvubfvjDH+qFF15QcXGxRo0apalTp6q4uFiZmZkX/DtOmjRJGzdu1Pr16zV69GiVlpbq/vvvV2Jiom+bW265RXl5ecrNzdWAAQN814kAsI/LCmTQEgBs9Hd/93f66KOPdODAAbtLAdAFhkIARK0nn3xSM2fOVJ8+fbRz5069+OKLfhNtAYg+dCwARK1bb71Ve/fuVWNjo4YOHar77rtPCxcutLssAOdAsAAAAMZw8SYAADCGYAEAAIwhWAAAAGMIFgAAwBiCBQAAMIZgAQAAjCFYAAAAYwgWAADAmP8F8cS7A9hQ1uYAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "# Set random seed for reproducibility\n", "np.random.seed(42)\n", "\n", "# Generate Gaussian data\n", "x = np.linspace(0, 10, 30)\n", "y = 5.0 * np.exp(-0.5 * ((x - 5.2) / 0.8) ** 2) + np.random.normal(0, 0.2, x.size)\n", "s = np.ones_like(x) * 0.2\n", "\n", "# Create an Instrument instance\n", "my_instrument = Instrument(\"example_instrument\")\n", "my_instrument.manual_data_entry(\n", " wavelengths=x, \n", " data=y, \n", " noise=s, \n", " bad_pixels=None,\n", " bary_RV=0\n", ")\n", "\n", "# Plot the instrument data\n", "plt.figure()\n", "plt.errorbar(my_instrument.wavelengths, my_instrument.data, yerr=my_instrument.noise, fmt='o', label='Data')\n", "plt.xlabel(\"Wavelength\")\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "b56845f1", "metadata": {}, "source": [ "Finally, we will use the `grid_search` function of breads to find the best value of mu based on the probability of the model marginalized over the linear parameters and plot both our model and data." ] }, { "cell_type": "code", "execution_count": 22, "id": "f8c6a8ab", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Fixed sigma\n", "sigma_fixed = 0.8\n", "\n", "# Grid of mu values\n", "mu_grid = np.linspace(4.5, 6.0, 200)\n", "\n", "log_prob, log_prob_H0, rchi2, linparas, linparas_err = grid_search(\n", " para_vecs=[mu_grid],\n", " dataobj=my_instrument,\n", " fm_func=gaussian_mu_only_fm_func,\n", " fm_paras={\"sigma\": sigma_fixed},\n", " numthreads=None,\n", " bounds=None\n", ")\n", "\n", "# Plot log probability vs mu\n", "plt.figure()\n", "plt.plot(mu_grid, log_prob, label=\"Log probability\")\n", "plt.xlabel(\"mu values\")\n", "plt.ylabel(\"Log probability\")\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "c7600edb", "metadata": {}, "source": [ "### Grid-based approach versus MCMC Sampling" ] }, { "cell_type": "markdown", "id": "9498d488", "metadata": {}, "source": [ "We can now compare the 'grid_search' function, which produces the probabilty of the model marginalized over the linear parameters, to a Markov Chain Monte Carlo (MCMC) simulation posterior distribution. Unlike approaches that rely on computationally expensive samplers like emcee to explore parameter space, breads leverages analytic marginalization to recover equivalent posterior information in less time than running an MCMC chain." ] }, { "cell_type": "code", "execution_count": 14, "id": "71403f31", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|████████████████████████████████████| 2000/2000 [00:05<00:00, 379.25it/s]\n" ] }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def log_likelihood(mu_array, instrument, sigma):\n", " \"\"\"\n", " Returns log-likelihood for a proposed mu using the Gaussian FM function.\n", " \"\"\"\n", " mu = mu_array[0] # extract scalar mu\n", " \n", " # Gaussian FM function returns y, M (design matrix), s\n", " y_obs, M, s = gaussian_mu_only_fm_func([mu], instrument, sigma=sigma)\n", " \n", " # Solve for linear amplitude A using least squares\n", " amp, residuals, rank, svals = np.linalg.lstsq(M, y_obs, rcond=None)\n", " model = M @ amp # predicted Gaussian values\n", " \n", " # Compare model to observed data\n", " chi2 = np.sum(((y_obs - model)/s)**2)\n", " \n", " # Log-likelihood\n", " return -0.5 * chi2\n", "\n", "# MCMC setup\n", "ndim = 1 # only mu is free\n", "nwalkers = 50\n", "nsteps = 2000\n", "\n", "# Start walkers near the approximate mu\n", "mu_init = 5.2\n", "p0 = mu_init + 1e-2 * np.random.randn(nwalkers, ndim)\n", "sampler = emcee.EnsembleSampler(nwalkers, ndim, log_likelihood, args=[my_instrument, sigma_fixed])\n", "\n", "\n", "# Run MCMC\n", "sampler.run_mcmc(p0, nsteps, progress=True)\n", "samples = sampler.get_chain(flat=True)\n", "\n", "# Plot posterior for mu\n", "plt.figure(figsize=(8,5))\n", "\n", "# Plot MCMC posterior as histogram\n", "mu_samples = samples[:,0]\n", "\n", "# Compute histogram\n", "hist_vals, bin_edges = np.histogram(mu_samples, bins=50, density=True)\n", "\n", "# Normalize so the max is 1 (to match grid-search)\n", "hist_vals /= np.max(hist_vals)\n", "\n", "# Bin centers for plotting\n", "bin_centers = 0.5 * (bin_edges[:-1] + bin_edges[1:])\n", "\n", "plt.figure(figsize=(8,5))\n", "plt.bar(bin_centers, hist_vals, width=bin_edges[1]-bin_edges[0], alpha=0.7, label='MCMC posterior (normalized)')\n", "\n", "# Normalize grid-search probabilities for comparison\n", "grid_prob = np.exp(log_prob - np.max(log_prob)) # exponentiate and normalize\n", "plt.plot(mu_grid, grid_prob, color='red', lw=2, label='Grid-search (normalized)')\n", "\n", "plt.xlabel(\"mu\")\n", "plt.ylabel(\"Probability density\")\n", "plt.title(\"MCMC posterior vs Grid-search\")\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 15, "id": "59851c6b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Best-fit mu: 5.21608040201005\n" ] } ], "source": [ "imax = np.nanargmax(log_prob)\n", "mu_best = mu_grid[imax]\n", "\n", "print(\"Best-fit mu:\", mu_best)" ] }, { "cell_type": "code", "execution_count": 16, "id": "0e21732c", "metadata": {}, "outputs": [], "source": [ "results = fitfm(\n", " nonlin_paras=[mu_best],\n", " dataobj=my_instrument, \n", " fm_func=gaussian_mu_only_fm_func,\n", " fm_paras={\"sigma\": sigma_fixed}\n", ")" ] }, { "cell_type": "code", "execution_count": 17, "id": "b5d548aa", "metadata": {}, "outputs": [], "source": [ "log_prob, log_prob_H0, rchi2, linparas, linparas_err = results" ] }, { "cell_type": "code", "execution_count": 18, "id": "a712465a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Amplitude A: 4.770126399307184 ± 0.08753796912863519\n", "Reduced chi2: 0.6205713578261557\n" ] } ], "source": [ "A = linparas[0]\n", "A_err = linparas_err[0]\n", "\n", "print(\"Amplitude A:\", A, \"±\", A_err)\n", "print(\"Reduced chi2:\", rchi2)" ] }, { "cell_type": "code", "execution_count": 19, "id": "de06abaa", "metadata": {}, "outputs": [ { "data": { "image/png": "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hQULFmT55ywikl0KkiKSL7Rp04aVK1em3V65ciVt2rShdevWafsTExPZsGEDbdu2JTExkXHjxrFjxw7mz59PeHg4/fr1A8BqtfLggw8ye/bsdM/xzTff0KxZMypWrIhhGHTv3p2TJ0+yaNEitm7dSoMGDWjfvj3nz5/PsMbPPvuMV199lTfffJO9e/cyfvx4/u///o8vv/wy3XGvvvoqw4cPZ/v27VStWpWHHnoordv+jz/+4Pnnn+eFF15g+/btdOzYkTfffDPtsQ888AD/+c9/qFmzJpGRkURGRvLAAw+k3T927Fj69OnDzp076datG3379s20XhGR22aIiOQDn376qVGkSBEjKSnJiI6ONlxdXY1Tp04Z3377rdG8eXPDMAxj9erVBmAcOnTohsdv2rTJAIxLly4ZhmEY27ZtMywWixEREWEYhmGkpKQYZcqUMT766CPDMAxj+fLlhp+fnxEfH5/uPJUqVTI++eQTwzAMY/To0UbdunXT7gsJCTG++eabdMePGzfOaNasmWEYhhEeHm4Axueff552/99//20Axt69ew3DMIwHHnjA6N69e7pz9O3b1/D390+7ff3zpgKM1157Le12TEyMYbFYjMWLF99wrIiII6hFUkTyhbZt2xIbG8vmzZtZu3YtVatWJTAwkNatW7N582ZiY2NZtWoV5cqVo2LFivz111/cfffdlC9fHl9fX9q0aQPA0aNHAahfvz7Vq1dnzpw5AKxevZrTp0/Tp08fALZu3UpMTAzFixfHx8cn7Ss8PJxDhw7dUN+ZM2c4duwYTz31VLrj33jjjRuOr1OnTtp2cHAwQFq3+/79+2nSpEm646+/fTPXnrtIkSL4+vqmnVtExNFczS5ARCQrKleuTNmyZVm5ciUXLlygdevWAAQFBREaGsoff/zBypUradeuHbGxsXTq1IlOnToxa9YsSpYsydGjR+ncuTOJiYlp5+zbty/ffPMNL7/8Mt988w2dO3emRIkSgH0cZXBwcLpxmalSxytey2azAfbu7aZNm6a7z8XFJd1tNze3tG2LxZLu8YZhpO1LZRhGVn5EN5w79fyp5xYRcTQFSRHJN9q2bcuqVau4cOECI0aMSNvfunVrli5dysaNG3niiSfYt28fZ8+e5a233iIkJAQg3RXfqR5++GFee+01tm7dyg8//MD06dPT7mvQoAEnT57E1dWVChUq3LK2UqVKUaZMGQ4fPkzfvn1z/BqrV6/Opk2b0u27vnZ3d3dSUlJy/BwiIo6iICki+Ubbtm0ZOHAgSUlJaS2SYA+S/fv3Jz4+nrZt2+Lp6Ym7uztTpkzh+eefZ/fu3YwbN+6G84WGhtK8eXOeeuopkpOTufvuu9Pu69ChA82aNaNXr15MnDiRatWqceLECRYtWkSvXr1o1KjRDecbM2YMQ4YMwc/Pj65du5KQkMCWLVu4cOECw4YNy9JrHDx4MK1atWLy5Mn06NGDFStWsHjx4nStlBUqVCA8PJzt27dTtmxZfH198fDwyM6PUkTEITRGUkTyjbZt2xIXF0flypUpVapU2v7WrVtz6dIlKlWqREhICCVLlmTmzJl8//33hIWF8dZbbzFp0qQMz9m3b1927NjBvffei5eXV9p+i8XCokWLaNWqFU8++SRVq1blwQcfJCIiIt1zX+vpp5/m888/Z+bMmdSuXZvWrVszc+ZMQkNDs/waW7Rowccff8zkyZOpW7cuS5Ys4cUXX8TT0zPtmPvuu48uXbrQtm1bSpYsmTbOU0Qkr1mM7Ay+ERGRPPfMM8+wb98+1q5da3YpIiLpqGtbRMTJTJo0iY4dO1KkSBEWL17Ml19+mW5icxERZ6EWSRERJ9OnTx9WrVrFpUuXqFixIoMHD+b55583uywRkRsoSIqIiIhIjuhiGxERERHJEQVJEREREckRBUkRERERyREFSRERERHJEQVJEREREckRBUkRERERyREFSRERERHJEQVJEREREckRBUkRERERyZH/B4Jt3BgJgMj2AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mu_fit, sigma_fit = mu_best, sigma_fixed\n", "\n", "# Compute the Gaussian model\n", "model = A * np.exp(-0.5 * ((my_instrument.wavelengths - mu_fit) / sigma_fit) ** 2)\n", "\n", "# Plot data, model, and residuals\n", "plt.figure(figsize=(8,5))\n", "plt.errorbar(\n", " my_instrument.wavelengths,\n", " my_instrument.data,\n", " yerr=my_instrument.noise,\n", " fmt='o',\n", " label='Data'\n", ")\n", "\n", "plt.plot(my_instrument.wavelengths, model, color='tab:orange', label='Gaussian model')\n", "plt.plot(my_instrument.wavelengths, my_instrument.data - model, color='tab:green', label='Residuals')\n", "plt.xlabel(\"Wavelength\")\n", "plt.ylabel(\"\")\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "id": "550ba1f5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "ae74e75f", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python (breads)", "language": "python", "name": "breads-env" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.18" } }, "nbformat": 4, "nbformat_minor": 5 }