{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Performance of cost functions\n", "\n", "This is not really a tutorial, but more of a benchmark of the builtin cost functions.\n", "\n", "We test the performance of the cost functions shipped with iminuit. We check that they produce unbiased results with proper variance. To do that, we generate normal distributed data many times and fit a normal distribution to each independent data set. The bias is computed from the averages of these reconstructed parameters. We also compute the mean of the estimated variance for each data set, which should converge to 1.\n", "\n", "Since we do the fit many times, we do not use implementations of the pdf and cdf of a normal distribution from `scipy.stats`, but Numba-accelerated versions from the `numba-stats` package. For the binned fits, we compute histograms of the data with $3 + n/10$ equidistant bins, where $n$ is the sample size.\n", "\n", "Disclaimer: This tutorial is targeted at experts, please read the code to understand what is going on." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Maximum-likelihood fits\n", "\n", "Here we check that the different maximum-likelihood cost functions produce asymptotically unbiased results with the expected variance." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from matplotlib import pyplot as plt\n", "from iminuit import Minuit\n", "from iminuit.cost import (\n", " UnbinnedNLL,\n", " BinnedNLL,\n", " ExtendedUnbinnedNLL,\n", " ExtendedBinnedNLL,\n", " LeastSquares,\n", ")\n", "from argparse import Namespace\n", "import numba as nb\n", "import math\n", "from numba_stats import norm\n", "import joblib" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "n_tries = 100 # increase this to get less scattering\n", "\n", "n_pts = np.array((10, 30, 100, 300, 1000, 3000, 10000))\n", "\n", "truth = Namespace(mu=0, sigma=1)\n", "\n", "\n", "# function that runs random experiments with sample size n\n", "@joblib.delayed\n", "def compute(n):\n", " rng = np.random.default_rng(n)\n", " np.random.seed(n)\n", " u_nll = []\n", " b_nll = []\n", " e_u_nll = []\n", " e_b_nll = []\n", " for i_try in range(n_tries):\n", " while True:\n", " k = 2 * rng.poisson(n)\n", " x = rng.normal(truth.mu, truth.sigma, size=k)\n", " x = x[np.abs(x) < 2]\n", " x = x[:k]\n", " xrange = np.array((-2.0, 2.0))\n", " nh, xe = np.histogram(x, bins=3 + n // 10, range=xrange)\n", " m = [\n", " # model must be a normalized pdf\n", " Minuit(\n", " UnbinnedNLL(\n", " x,\n", " lambda x, mu, sigma: (\n", " norm.pdf(x, mu, sigma) / np.diff(norm.cdf(xrange, mu, sigma))\n", " ),\n", " ),\n", " mu=truth.mu,\n", " sigma=truth.sigma,\n", " ),\n", " # model must be a function that returns the integral over the scaled pdf and the scaled pdf\n", " Minuit(\n", " ExtendedUnbinnedNLL(\n", " x,\n", " lambda x, n, mu, sigma: (\n", " n * np.diff(norm.cdf(xrange, mu, sigma)),\n", " n * norm.pdf(x, mu, sigma),\n", " ),\n", " ),\n", " n=n,\n", " mu=truth.mu,\n", " sigma=truth.sigma,\n", " ),\n", " # model must be a normalized cdf up to an arbitrary additive constant (only differences are used)\n", " Minuit(\n", " BinnedNLL(\n", " nh,\n", " xe,\n", " lambda x, mu, sigma: (\n", " norm.cdf(x, mu, sigma) / np.diff(norm.cdf(xrange, mu, sigma))\n", " ),\n", " ),\n", " mu=truth.mu,\n", " sigma=truth.sigma,\n", " ),\n", " # model must be a scaled cdf up to an arbitrary additive constant (only differences are used)\n", " Minuit(\n", " ExtendedBinnedNLL(\n", " nh, xe, lambda x, n, mu, sigma: n * norm.cdf(x, mu, sigma)\n", " ),\n", " n=n,\n", " mu=truth.mu,\n", " sigma=truth.sigma,\n", " ),\n", " ]\n", " for mi in m:\n", " mi.limits[\"sigma\"] = (1e-3, None)\n", " mi.limits[\"mu\"] = (-2, 2)\n", " if \"n\" in mi.parameters:\n", " mi.limits[\"n\"] = (0, None)\n", "\n", " # only accept a random data set when all fits converged ok\n", " all_good = True\n", " for mi in m:\n", " mi.migrad()\n", " mi.hesse()\n", " if not mi.valid or not mi.accurate:\n", " all_good = False\n", " break\n", " if all_good:\n", " break\n", " print(f\"{n} {i_try} need to re-try {[(mi.valid, mi.accurate) for mi in m]}\")\n", "\n", " # store parameter deviations and estimated variances for each pseudo-experiment\n", " u_nll.append(\n", " (\n", " m[0].values[\"mu\"] - truth.mu,\n", " m[0].errors[\"mu\"] ** 2,\n", " m[0].values[\"sigma\"] - truth.sigma,\n", " m[0].errors[\"sigma\"] ** 2,\n", " )\n", " )\n", " e_u_nll.append(\n", " (\n", " m[1].values[\"n\"] - n,\n", " m[1].errors[\"n\"] ** 2,\n", " m[1].values[\"mu\"] - truth.mu,\n", " m[1].errors[\"mu\"] ** 2,\n", " m[1].values[\"sigma\"] - truth.sigma,\n", " m[1].errors[\"sigma\"] ** 2,\n", " )\n", " )\n", " b_nll.append(\n", " (\n", " m[2].values[\"mu\"] - truth.mu,\n", " m[2].errors[\"mu\"] ** 2,\n", " m[2].values[\"sigma\"] - truth.sigma,\n", " m[2].errors[\"sigma\"] ** 2,\n", " )\n", " )\n", " e_b_nll.append(\n", " (\n", " m[3].values[\"n\"] - n,\n", " m[3].errors[\"n\"] ** 2,\n", " m[3].values[\"mu\"] - truth.mu,\n", " m[3].errors[\"mu\"] ** 2,\n", " m[3].values[\"sigma\"] - truth.sigma,\n", " m[3].errors[\"sigma\"] ** 2,\n", " )\n", " )\n", "\n", " # means over pseudo-experiments are computed here\n", " return (\n", " np.mean(u_nll, axis=0),\n", " np.mean(e_u_nll, axis=0),\n", " np.mean(b_nll, axis=0),\n", " np.mean(e_b_nll, axis=0),\n", " )\n", "\n", "\n", "unbinned_nll = []\n", "extended_unbinned_nll = []\n", "binned_nll = []\n", "extended_binned_nll = []\n", "\n", "result = joblib.Parallel(-1)(compute(n) for n in n_pts)\n", "\n", "for a,b,c,d in result:\n", " unbinned_nll.append(a)\n", " extended_unbinned_nll.append(b)\n", " binned_nll.append(c)\n", " extended_binned_nll.append(d)\n", "\n", "unbinned_nll = np.transpose(unbinned_nll)\n", "extended_unbinned_nll = np.transpose(extended_unbinned_nll)\n", "binned_nll = np.transpose(binned_nll)\n", "extended_binned_nll = np.transpose(extended_binned_nll)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We plot the measured bias as a point and the mean variance as an error bar. The deviations go down with $n^{-{1/2}}$, where $n$ is the sample size. We undo this for the plots by multiplying deviations with $n^{1/2}$." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABG8AAALECAYAAAC2WB3mAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB3tElEQVR4nO3dd3hUZf738c+kk5ACMTQJXdlFShQEGxIWFOzo2hAV0GURQUVld2EtYNk9opFVkYeiKC4WYHFdFdtPUKyACCYSFSQKGggkQGQSEkg9zx8xI0MKKVPuTN6v65rrypz5zjn3zBzOfPnMKQ7btm0BAAAAAADASEH+HgAAAAAAAABqRngDAAAAAABgMMIbAAAAAAAAgxHeAAAAAAAAGIzwBgAAAAAAwGCENwAAAAAAAAYjvAEAAAAAADAY4Q0AAAAAAIDBCG8AAAAAAAAMRngDNDPJycnq3bv3cet27twph8OhJUuWeH9QjbBkyRI5HA7t3LnT30MBAAAByuFwaNasWf4eRq3Wrl0rh8OhtWvX+nsoALyA8AYw0KxZs+RwOLR///5qH+/du7eSk5N9O6gmrvI9bdu2rQoLC6s83qVLF1188cVu0xwOh6ZMmVLrfOsahgEAAHNU/vhz9K1NmzYaOnSo3nnnHX8Pz6sqX3tERIR2795d5fHqepvq+qRjjRs3Ti1btvToWAH8JsTfAwBgps6dO+vw4cMKDQ3191A8KicnR/Pnz9fdd9/t76EAAAA/e/DBB9W1a1fZtq3s7GwtWbJEF154od588023sOLw4cMKCQms/zoVFRXpkUce0dy5c/09FAB1wJ43AKpV+YtMcHCwv4fiUUlJSXrsscd0+PBhfw8FAAD42QUXXKDrr79eN9xwg6ZNm6ZPPvlEoaGheuWVV9zqIiIiAi68SUpK0jPPPKOsrCx/DwVAHRDeAAGg8hjnFStW6B//+Ic6duyoiIgIDRs2TBkZGdU+Z9OmTTrrrLPUokULde3aVQsWLHB7vLpz3lTuDrt7926NGjVKLVu2VEJCgqZNm6aysrIqz01JSdGiRYvUvXt3hYeH6/TTT9fGjRurjGXr1q268sor1bp1a0VERGjAgAF64403qtR98803+sMf/qAWLVqoY8eOevjhh1VeXl6v9+r+++9Xdna25s+fX6/nAQCAwBcXF6cWLVpUCWqOPedN5eHYGRkZGjdunOLi4hQbG6vx48dXOTy78jDs//3vf+rdu7fCw8N1yimn6N13362y/N27d+umm25S27ZtXXXPPfdclbpdu3Zp1KhRioqKUps2bXTnnXeqqKioXq/173//u8rKyvTII4/U63kA/COw4mOgmXvkkUcUFBSkadOmyel06tFHH9WYMWO0YcMGt7pffvlFF154oa6++mqNHj1aK1as0KRJkxQWFqabbrqp1mWUlZVpxIgRGjRokFJSUrR69Wo9/vjj6t69uyZNmuRW+/LLLys/P18TJ06Uw+HQo48+qiuuuEI//vij63Csb775RmeffbZOPPFETZ8+XVFRUVqxYoVGjRqlV199VZdffrkkae/evRo6dKhKS0tddYsWLVKLFi3q9R4NHjxYf/jDH/Too49q0qRJ9X4+AAAIHE6nU/v375dt28rJydHcuXN16NAhXX/99XV6/tVXX62uXbvKsixt3rxZzz77rNq0aaPZs2e71X366af673//q1tvvVXR0dF66qmn9Mc//lE///yz4uPjJUnZ2dk644wzXGFPQkKC3nnnHd18883Ky8vT1KlTJVUcwjVs2DD9/PPPuv3229WhQwctXbpUH3zwQb1ee9euXXXjjTfqmWee0fTp09WhQ4d6PR+AbxHeAAHkyJEjSk1NVVhYmCSpVatWuuOOO5Senu524rmsrCw9/vjjuuuuuyRJEydO1KBBgzRjxgzdcMMNtZ7n5siRI7rmmmt03333SZJuueUWnXbaaVq8eHGV8Obnn3/W9u3b1apVK0lSz549ddlll+m9995zHUd+xx13qFOnTtq4caPCw8MlSbfeeqvOOecc/e1vf3OFN7Nnz9a+ffu0YcMGDRw4UJI0duxYnXTSSfV+n2bOnKkhQ4ZowYIFuvPOO+v9fAAAEBiGDx/udj88PFzPPfeczjvvvDo9/9RTT9XixYtd9w8cOKDFixdXCW++++47ffvtt+revbskaejQoerXr59eeeUV18UR7rnnHpWVlWnLli2uQOeWW27R6NGjNWvWLE2cOFEtWrTQokWL9P3332vFihW66qqrJEkTJkxQv3796v3677nnHv373//W7Nmz9eSTT9b7+QB8h8OmgAAyfvx4V3AjVexlIkk//vijW11ISIgmTpzouh8WFqaJEycqJydHmzZtOu5ybrnlFrf7gwcPrrIMSbrmmmtcwU1148nNzdUHH3ygq6++Wvn5+dq/f7/279+vAwcOaMSIEdq+fbvrKghvv/22zjjjDFdwI0kJCQkaM2bMccd7rHPPPVdDhw7Vo48+yrlvAABoxubNm6f3339f77//vl588UUNHTpUf/rTn/Tf//63Ts+vric6cOCA8vLy3KYPHz7cFdxIUt++fRUTE+PqiWzb1quvvqpLLrlEtm27eqL9+/drxIgRcjqd2rx5s6SKnqh9+/a68sorXfOLjIzUn//853q//m7duumGG27QokWLtGfPnno/H4DvEN4ATZTD4agyrVOnTm73K4OTX375xW16hw4dFBUV5Tbt5JNPllRxvpraREREKCEhocpyjl1GXcaTkZEh27Z13333KSEhwe02c+ZMSRVXh5Kkn376qdq9bHr27FnreGsya9Ys7d27t8q5fgAAQPMxcOBADR8+XMOHD9eYMWP01ltvqVevXpoyZYqKi4uP+/y69l7H1lXWVtbt27dPBw8e1KJFi6r0ROPHj5fk3hP16NGjSi/Y0J7o3nvvVWlpKee+AQzHYVOAgSIiIiSpxr1CCgsLXTVHq+nKULZte2xs9bn61PHGU3my4WnTpmnEiBHV1vbo0aOeI6ybc889V8nJyXr00Uer/GoGAACap6CgIA0dOlRPPvmktm/frlNOOaXW+rr2XnXtia6//nqNHTu22tq+ffvWOpaG6tatm66//notWrRI06dP98oyADQe4Q1goM6dO0uStm3bpsTERLfHCgsLlZmZqfPPP7/B88/KylJBQYHb3jfff/+9JKlLly4Nnm99devWTZIUGhpa5ZjzY3Xu3Fnbt2+vMn3btm0NXv6sWbOUnJyshQsXNngeAAAgsJSWlkqSDh065LNlJiQkKDo6WmVlZXXqidLT02XbttveN43pie699169+OKLVc7VA8AcHDYFGGjYsGEKCwvT/Pnzq1wKe9GiRSotLdUFF1zQ4PmXlpa6BRbFxcVauHChEhIS1L9//wbPt77atGnjCk+qO8563759rr8vvPBCrV+/Xl988YXb4y+99FKDlz9kyBAlJydr9uzZOnLkSIPnAwAAAkNJSYn+7//+T2FhYfr973/vs+UGBwfrj3/8o1599VWlp6dXefzYnigrK0srV650TSssLNSiRYsavPzu3bvr+uuv18KFC7V3794GzweA97DnDWCgNm3a6P7779e9996rc889V5deeqkiIyP1+eef65VXXtH555+vSy65pMHz79Chg2bPnq2dO3fq5JNP1vLly5WamqpFixbVeqUpb5g3b57OOecc9enTRxMmTFC3bt2UnZ2tdevWadeuXUpLS5Mk/fWvf9XSpUs1cuRI3XHHHa5LhXfu3Flff/11g5c/c+ZMDR06tMbHv/zySz388MNVpicnJ+ucc86RVNFQVVfTtWvXBp1QGQAA+MY777yjrVu3Sqo4p8zLL7+s7du3a/r06YqJifHpWB555BF9+OGHGjRokCZMmKBevXopNzdXmzdv1urVq5Wbmyup4spSTz/9tG688UZt2rRJ7du319KlSxUZGdmo5d9zzz1aunSptm3bVu3hYhkZGdX2O6eeeqouuugiSRXhV3U1rVu31q233tqo8QHNHeENYKh77rlHXbp00dNPP60HH3xQpaWl6tq1qx544AH97W9/U1BQw3eca9WqlV544QXddttteuaZZ9S2bVs9/fTTmjBhggdfQd306tVLX375pR544AEtWbJEBw4cUJs2bXTqqafq/vvvd9W1b99eH374oW677TY98sgjio+P1y233KIOHTro5ptvbvDyk5OTNWTIEH300UfVPr5hwwZt2LChyvSHHnrIFd7k5OS4Lp1+tGHDhhHeAABgsKN7jYiICP3ud7/T/Pnz3a7K6Stt27bVF198oQcffFD//e9/9f/+3/9TfHy8TjnlFLfDmSIjI7VmzRrddtttmjt3riIjIzVmzBhdcMEFGjlyZIOX36NHD11//fV64YUXqn1827Zt1fY7N998syu8KS4urrame/fuhDdAIzlsT57JFAAAAAAAAB7FOW8AAAAAAAAMRngDAAAAAABgMMIbAAAAAAAAgxHeAAAAAAAAGIzwBgAAAAAAwGCENwAAAAAAAAYL8fcAalNeXq6srCxFR0fL4XD4ezgAAKAGtm0rPz9fHTp0UFAQvw35E/0TAABNQ336J6PDm6ysLCUmJvp7GAAAoI4yMzPVsWNHfw+jWaN/AgCgaalL/2R0eBMdHS2p4oXExMR4bsbFBdLjPSv+vnubFBbluXkDANAM5eXlKTEx0fXdDf/xWv8EAAA8qj79k9HhTeWuvjExMR4Ob4Kl8F93I46JIbwBAMBDOEzH/7zWPwEAAK+oS//EQekAAAAAAAAGI7wBAAAAAAAwGOENAAAAAACAwQhvAAAAAAAADEZ4AwAAAAAAYDDCGwAAAAAAAIMR3gAAAAAAABiM8AYAAAAAAMBghDcAAAAAAAAGI7wBAAAAAAAwGOENAAAAAACAwQhvAAAAAAAADEZ4AwAAAAAAYDDCGwAAAAAAAIMR3gAAAAAAABiM8AYAAAAAAMBghDcAAAAAAAAGI7wBAAAAAAAwGOENAAAAAACAwQhvAAAAAAAADEZ4AwAAAAAAYDCfhTePPPKIHA6Hpk6d6qtFAgAAAAAANHk+CW82btyohQsXqm/fvr5YHAAAAAAAQMDwenhz6NAhjRkzRs8884xatWrl7cUBAAAAAAAEFK+HN5MnT9ZFF12k4cOHH7e2qKhIeXl5bjcAAADUjP4JAIDA59XwZtmyZdq8ebMsy6pTvWVZio2Ndd0SExO9OTwAAIAmj/4JAIDA57XwJjMzU3fccYdeeuklRURE1Ok5M2bMkNPpdN0yMzO9NTwAAICAQP8EAEDgC/HWjDdt2qScnByddtpprmllZWX6+OOP9fTTT6uoqEjBwcFuzwkPD1d4eLi3hgQAABBw6J8AAAh8Xgtvhg0bpi1btrhNGz9+vH73u9/pb3/7W5XgBgAAAAAAAFV5LbyJjo5W79693aZFRUUpPj6+ynQAAAAAAABUz+tXmwIAAAAAAEDDeW3Pm+qsXbvWl4sDAAAAAABo8tjzBgAAAAAAwGCENwAAAAAAAAYjvAEAAAAAADAY4Q0AAAAAAIDBCG8AAAAAAAAMRngDAAAAAABgMMIbAAAAAAAAgxHeAAAAAAAAGIzwBgAAAAAAwGCENwAAAAAAAAYjvAEAAAAAADAY4Q0AAAAAAIDBCG8AAAAAAAAMRngDAAAAAABgMMIbAAAAAAAAgxHeAAAAAAAAGIzwBgAAAAAAwGCENwAAAAAAAAYjvAEAAAAAADAY4Q0AAAAAAIDBCG8AAAAAAAAMRngDAAAAAABgMMIbAAAA1K64QJoVW3ErLvD3aAAAaHYIbwAAAAAAAAxGeAMAAAAAAGAwwhsAAAAAAACDEd4AAAAAAAAYjPAGAAAAAADAYIQ3AAAAAAAABiO8AQAAAAAAMBjhDQAAAAAAgMEIbwAAAAAAAAxGeAMAAAAAAGAwwhsAAAAAAACDEd4AAAAAAAAYjPAGAAAAAADAYIQ3AAAAAAAABiO8AQAAAAAAMBjhDQAAAAAAgMEIbwAAAAAAAAxGeAMAAAAAAGAwwhsAAAAAAACDEd4AAAAAAAAYjPAGAAAAAADAYIQ3AAAAAAAABvNqeGNZlk4//XRFR0erTZs2GjVqlLZt2+bNRQIAAAAAAAQUr4Y3H330kSZPnqz169fr/fffV0lJic4//3wVFBR4c7EAAAAAAAABI8SbM3/33Xfd7i9ZskRt2rTRpk2bdO6553pz0QAAAAAAAAHBq+HNsZxOpySpdevW1T5eVFSkoqIi1/28vDyfjAsAAKCpon8CACDw+eyExeXl5Zo6darOPvts9e7du9oay7IUGxvruiUmJvpqeAAAAE0S/RMAAIHPZ+HN5MmTlZ6ermXLltVYM2PGDDmdTtctMzPTV8MDAABokuifAAAIfD45bGrKlClatWqVPv74Y3Xs2LHGuvDwcIWHh/tiSAAAAAGB/gkAgMDn1fDGtm3ddttteu2117R27Vp17drVm4sDAAAAAAAIOF4NbyZPnqyXX35Zr7/+uqKjo7V3715JUmxsrFq0aOHNRQMAAAAAAAQEr57zZv78+XI6nUpOTlb79u1dt+XLl3tzsQAAAAAAAAHD64dNAQAAAAAAoOF8drUpAAAANE2FxaXV/g0AAHyD8AYAAAAAAMBghDcAAAAAAAAGI7wBAAAAAAAwWLMMbzhuGwAAAAAANBXNMrwBAAAAAABoKghvAAAAAAAADEZ4AwAAAAAAYDDCGwAAAAAAAIMR3gAAAAAAABiM8AYAAAAAAMBghDcAAAAAAAAGI7wBAAAAAAAwGOENAAAAAACAwQhvAAAAAAAADEZ4AwAAAAAAYDDCGwAAAAAAAIMR3gAAAAAAABiM8AYAAAAAAMBgIf4eQF0UFxfLtm05HA5JUllZmcrKyhQUFKSQkBC3OkkKDQ09fu2vL922bde0mmpLSkpk27ZCQkIUFFSRd5WXl6u0tFQOh0OhoaFG1ZaWlqq8vFzBwcEKDg6ud61t2yopKZEkhYWFeaW2us+oPrWN+uzrUVvd+15dbWFxqfrc/7YcklJnjVTLiDC/fPaNXU988dk3dj3x1Wff2PWkqX32pq0ngbaNMOWz9+Y2ovJ9gzm81T8Vl5SoRR3ma8J6zLaRbaO/t42mrCf0T2wj6lLLNsLs/qlJhDePP/647r33XkVFRUmSPvvsM3344Yc69dRTdemll7rqUlJSVFJSojvuuENxcXGSpI0bN+q9995Tnz59dMUVV7hqn9SfVOiI1PgDuYqKrqhNTU3VqlWr1LNnT1177bWu2nnz5snpdOpPf/qTTjzxRElSenq6XnvtNXXr1k033HCDq/aZZ57Rvn37NHbsWHXp0kWS9P3332v58uVKTEzUTTfd5KpdsmSJsrKyNHr0aJ188smSpB07dujFF19U27Ztdcstt7hqX3rpJf3000+68sordcopp0iSdu3apeeff16tW7fWbbfd5qpdsWKFtm/frssuu0xJSUmSpJycHC1cuFDR0dG66667XLWvvfaavv32W11wwQUaOHCgJCk3N1dPP/20wsPDNX36dFftqlWrlJaWpuHDh+vss8+WJOXn5+tf//qXgoKCdN9997lq33vvPX355ZcaMmSIkpOTJUlFRUWaPXu2JOnee+91rcxr1qzRunXrdOaZZ+r888+XVPGPwbIsSdLf/vY3RURESJI++eQTffTRRxowYIAuuugi1/Jmz56t8vJy3XnnnYqJiZEkrV+/XqtXr1a/fv00atQoV+2cOXNUVFSkKVOmKD4+XpK0adMmvfPOO+rVq5euuuoqV+3cuXOVn5+viRMnql27dpKkLVu26PXXX9dJJ52k6667zlU7KvxbxQQVKSurj07u1lWS9N1332nlypXq3Lmzxo0b56pdvHixsrOzdf3116t79+6SpIyMDL3yyivq0KGDJkyY4KpdunSpMjMzdc011+h3v/udJOnnn3/WCy+8oISEBN16662u2mXLlunHH3/U5Zdfrr59+0qS9uzZo2effVaxsbGaOnWqq3blypXatm2bLr74YvXv31+StG/fPs2fP1+RkZH6y1/+4qp94403tGXLFo0YMUJnnHGGJMnpdOrJJ59UaGio/v73v7tq3377bX311VcaOnSozj33XElSYWGhUlJSJEkzZ8501a5evVobNmzQOeeco2HDhkmq2DhWfvYzZsxwbeDWrl2rTz/9VIMGDdLIkSNd86isnTZtmme3EU8+qcLCQk2aNElt2rSRxDaCbUTjthELFixQbm6uxo8fr06dOkkKrG3Exo0bBbN4rX96ah7bxmO3jcUFyv1nLz3tuIlto+q+bSwsLtV9/3hcMUFFGn3DjfRP9E+Bu40Q/RP9U+P7Jw6bAuBVhcWlOu2h9/09DAAAgCaD/gnAsRz20ccNGSYvL0+xsbHat2+f4uPj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P2VnZ+vBBx/U/fffrz//+c8aPHiwJOmss86SJH3wwQe64IIL1L9/f1eD8vzzz+sPf/iDPvnkEw0cONBt+VdffbW6du0qy7K0efNmPfvss2rTpo1mz57tqvnTn/6kF198Udddd53OOussffDBB7rooouqvL7s7GydccYZrnOhJCQk6J133tHNN9+svLw8TZ06VZJ0+PBhDRs2TD///LNuv/12dejQQUuXLtUHH3zgsfe6Oo888oiCgoI0bdo0OZ1OPfrooxozZow2bNjgVvfLL7/owgsv1NVXX63Ro0drxYoVmjRpksLCwnTTTTfVuoyysjKNGDFCgwYNUkpKilavXq3HH39c3bt316RJk9xqX375ZeXn52vixIlyOBx69NFHdcUVV+jHH390HY71zTff6Oyzz9aJJ56o6dOnKyoqSitWrNCoUaP06quv6vLLL5ck7d27V0OHDlVpaamrbtGiRfXee2bw4MH6wx/+oEcffVSTJk1i7xsAQJNCrzVVkud6rauvvlpdunSRZVlav369nnrqKf3yyy/VhivHqgxAZs6cqZ07d+qJJ57QlClTtHz5cre6jIwMXXnllbr55ps1duxYPffccxo3bpz69++vU045RZJUWFioIUOGaPfu3Zo4caI6deqkzz//XDNmzNCePXv0xBNPSJJs29Zll12mTz/9VLfccot+//vf67XXXtPYsWPr9bpjYmJ055136v7772fvG8AGmpHnn3/ellTtLTw83K12y5YtdlhYmP2nP/3J/uWXX+wTTzzRHjBggF1SUuKq2bhxoy3Jfv75592eW15ebp900kn2iBEj7PLyctf0wsJCu2vXrvZ5553nmjZz5kxbkn3TTTe5zePyyy+34+PjXfdTU1NtSfatt97qVnfdddfZkuyZM2e6pt188812+/bt7f3797vVXnvttXZsbKxdWFho27ZtP/HEE7Yke8WKFa6agoICu0ePHrYk+8MPP6zl3fxt7Pv27av28VNOOcUeMmSI6/6HH35oS7J///vf20VFRa7pTz75pC3J3rJli2vakCFDbEn2448/7ppWVFRkJyUl2W3atLGLi4tt27btHTt2VPkMxo4da0uyH3zwQbfxnHrqqXb//v1d9yufGx8fb+fm5rqmv/7667Yk+80333RNGzZsmN2nTx/7yJEjrmnl5eX2WWedZZ900kmuaVOnTrUl2Rs2bHBNy8nJsWNjY21J9o4dO6p9ryod/Z5+9NFHtiR7zpw5rsc7d+5sX3TRRW7PkWRPnjy51vkOGTLEPuWUU2qtAQCgsei1vNNrXXrppW7Tb731VluSnZaW5prWuXNne+zYsa77lZ/F8OHD3d6jO++80w4ODrYPHjzo9lxJ9scff+yalpOTY4eHh9t33323a9pDDz1kR0VF2d9//73beKZPn24HBwfbP//8s23btv2///3PlmQ/+uijrprS0lJ78ODB1X6ex6rsGf/zn//YBw8etFu1auX2HowdO9aOiopye05dep3j9a6AyThsCs3SvHnz9P7777vd3nnnHbea3r1764EHHtCzzz6rESNGaP/+/XrhhRcUEnL8HdZSU1O1fft2XXfddTpw4ID279+v/fv3q6CgQMOGDdPHH39cZdfSW265xe3+4MGDdeDAAeXl5UmS3n77bUnS7bff7lZX+ctOJdu29eqrr+qSSy6RbduuZe/fv18jRoyQ0+nU5s2bXfNs3769rrzyStfzIyMj9ec///m4r7Exxo8fr7CwMNf9yl/SfvzxR7e6kJAQTZw40XU/LCxMEydOVE5OTrVXHjhWde/pscuQpGuuuUatWrWqcTy5ubn64IMPdPXVVys/P9/1fh44cEAjRozQ9u3btXv3bkkV7+kZZ5zh9mtfQkKCxowZc9zxHuvcc8/V0KFD9eijj+rw4cP1fj4AAP5Cr+XZXmvy5Mlu92+77Ta3Mdfmz3/+sxwOh+v+4MGDVVZWpp9++smtrlevXq4eSKroX3r27OnWO/3nP//R4MGD1apVK7fXPXz4cJWVlenjjz92jSskJMRtb+fg4GDXuOsjNjZWU6dO1RtvvKGvvvqq3s8HAgWHTaFZGjhwYJ1OoveXv/xFy5Yt0xdffKF//vOf6tWrV53mv337dkmqdddQp9PpFhh06tTJ7fHKx3755RfFxMTop59+UlBQkLp37+5W17NnT7f7+/bt08GDB7Vo0SItWrSo2mXn5ORIkn766Sf16NHD7Qu9unk2xrHzlmp/rUfr0KGDoqKi3KadfPLJkirOV3PGGWfUuNyIiAglJCRUWc6xy6jLeDIyMmTbtu677z7dd9991S4vJydHJ554on766ScNGjSoyuMNfU9nzZqlIUOGaMGCBbrzzjsbNA8AAHyNXsuzvdZJJ53kdr979+4KCgrSzp07j/vcuvZdx9ZV1h5dt337dn399ddVeqxKR7/u9u3bV7mcd0P7oTvuuEP/+te/NGvWLL3++usNmgfQ1BHeALX48ccfXc3Bli1b6vy8yl96HnvssRova3nsl1lwcHC1dbZt13m5Ry/7+uuvr7Gh6du3b73mWZPKqzzVtFdIYWFhtVeC8tRrrU1Ny6hPbeV4Kt/TadOmacSIEdXW1vfSp3V17rnnKjk5WY8++miVXwwBAGjq6LUaprofx2pS19ddl7ry8nKdd955+utf/1ptbeWPbJ5WuffNrFmz2PsGzRbhDVCD8vJyjRs3TjExMZo6dar++c9/6sorr9QVV1zhqqnpi7PyF5uYmBgNHz7cI+Pp3LmzysvL9cMPP7j9arFt2za3usqrI5SVlR132Z07d1Z6erps23Z7LcfOs7bnV9YnJia6PVZYWKjMzEydf/75dZpXdbKyslRQUOC29833338vqeKqCL7SrVs3SVJoaGid3tPKJvRodX1PqzNr1iwlJydr4cKFDZ4HAACmodequ+3bt6tr166u+xkZGSovL/dpPyRVvO+HDh2q0+tes2aNDh065BaiNaYfmjp1qp544gk98MADiouLa/B8gKaKc94ANZgzZ44+//xzLVq0SA899JDOOussTZo0ye3KCZWhwrGXPezfv7+6d++ulJQUHTp0qMq8j708Y11ccMEFkqSnnnrKbXrlWf0rBQcH649//KNeffVVpaen17rsCy+8UFlZWVq5cqVrWmFhYY27AB9r2LBhCgsL0/z586scV75o0SKVlpa6xt0QpaWlboFFcXGxFi5cqISEBPXv37/B862vNm3auMKTPXv2VHn82Pd0/fr1+uKLL9wef+mllxq8/CFDhig5OVmzZ8+ucllQAACaKnqtups3b57b/blz57qN2VeuvvpqrVu3Tu+9916Vxw4ePKjS0lJJFa+7tLRU8+fPdz1eVlbmGndDVO598/rrrys1NbXB8wGaKva8QbP0zjvvaOvWrVWmn3XWWerWrZu+++473XfffRo3bpwuueQSSdKSJUuUlJSkW2+9VStWrJBU8etDXFycFixYoOjoaEVFRWnQoEHq2rWrnn32WV1wwQU65ZRTNH78eJ144onavXu3PvzwQ8XExOjNN9+s15iTkpI0evRo/b//9//kdDp11llnac2aNcrIyKhS+8gjj+jDDz/U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9lpX7bx58+R0OvWnP/1JJ554oiQpPT1dr732mrp166YbbrjBVfvMM89o3759Gjt2rLp06SJJ+v7777V8+XIlJibqpptuctUuWbJEWVlZGj16tE4++WRJ0o4dO/Tiiy+qbdu2uuWWW1y1L730kn766SddeeWVOuWUUyRJu3bt0vPPP6/WrVvrtttuc9WuWLFC27dv12WXXaakpCRJUk5OjhYuXKjo6GjdddddrtrXXntN3377rS644AINHDhQkpSbm6unn35a4eHhmj59uqt21apVSktL0/Dhw3X22WdLkvLz8/Wvf/1LQUFBuu+++1y17733nr788ksNGTJEycnJkqSioiLNnj1bknTvvfe6VuY1a9Zo3bp1OvPMM3X++edLqvjHYFmWJOlvf/ubIiIiJEmffPKJPvroIw0YMEAXXXSRa3mzZ89WeXm57rzzTsXExEiS1q9fr9WrV6tfv34aNWqUq3bOnDkqKirSlClTFB8fL0natGmT3nnnHfXq1UtXXXWVq3bu3LnKz8/XxIkT1a5dO0nSli1b9Prrr+ukk07Sdddd56odFf6tYoKKlJXVRyd36ypJ+u6777Ry5Up17txZ48aNc9UuXrxY2dnZuv7669W9e3dJUkZGhl555RV16NBBEyZMcNUuXbpUmZmZuuaaa/S73/1OkvTzzz/rhRdeUEJCgm699VZX7bJly/Tjjz/q8ssvV9++fSVJe/bs0bPPPqvY2FhNnTrVVbty5Upt27ZNF198sfr37y9J2rdvn+bPn6/IyEj95S9/cdW+8cYb2rJli0aMGKEzzjhDkuR0OvXkk08qNDRUf//73121b7/9tr766isNHTpU5557riSpsLBQKSkpkqSZM2e6alevXq0NGzbonHPO0bBhwyRVbBwrP/sZM2a4NnBr167Vp59+qkGDBmnkyJGueVTWTps2zbPbiCefVGFhoSZNmqQ2bdpIYhvBNqJx24gFCxYoNzdX48ePV6dOnSQF1jZi48aNglm81j89NY9t47HbxuIC5f6zl5523MS2UXXfNhYWl+q+fzyumKAijb7hRvon+qfA3UaI/on+qfH9E4dNAfCqwuJSnfbQ+/4eBgAAQJNB/wTgWA776OOGDJOXl6fY2Fjt27dP8fHxHttVq/CQUyEp3SRJJXf/4NrzJpB31WKXPg6b8tdnX1hcql73v6sQlevLe4cr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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(2, 2, figsize=(14, 8), sharex=True, sharey=True)\n", "\n", "plt.sca(ax[0, 0])\n", "plt.title(\"Unbinned NLL\")\n", "plt.errorbar(\n", " n_pts,\n", " n_pts ** 0.5 * unbinned_nll[0],\n", " np.sqrt(n_pts * unbinned_nll[1]),\n", " fmt=\"o\",\n", " label=r\"$\\sqrt{n}\\,\\Delta\\mu$\",\n", ")\n", "plt.errorbar(\n", " n_pts,\n", " n_pts ** 0.5 * unbinned_nll[2],\n", " np.sqrt(n_pts * unbinned_nll[3]),\n", " fmt=\"s\",\n", " label=r\"$\\sqrt{n}\\,\\Delta\\sigma$\",\n", ")\n", "\n", "plt.sca(ax[0, 1])\n", "plt.title(\"Binned NLL\")\n", "plt.errorbar(\n", " n_pts,\n", " n_pts ** 0.5 * binned_nll[0],\n", " np.sqrt(n_pts * binned_nll[1]),\n", " fmt=\"o\",\n", " label=r\"$\\sqrt{n}\\,\\Delta\\mu$\",\n", ")\n", "plt.errorbar(\n", " n_pts,\n", " n_pts ** 0.5 * binned_nll[2],\n", " np.sqrt(n_pts * binned_nll[3]),\n", " fmt=\"s\",\n", " label=r\"$\\sqrt{n}\\,\\Delta\\sigma$\",\n", ")\n", "\n", "plt.sca(ax[1, 0])\n", "plt.title(\"Extended Unbinned NLL\")\n", "plt.errorbar(\n", " n_pts,\n", " n_pts ** 0.5 * extended_unbinned_nll[2],\n", " np.sqrt(n_pts * extended_unbinned_nll[3]),\n", " fmt=\"o\",\n", " label=r\"$\\sqrt{n}\\,\\Delta\\mu$\",\n", ")\n", "plt.errorbar(\n", " n_pts,\n", " n_pts ** 0.5 * extended_unbinned_nll[4],\n", " np.sqrt(n_pts * extended_unbinned_nll[5]),\n", " fmt=\"s\",\n", " label=r\"$\\sqrt{n}\\,\\Delta\\sigma$\",\n", ")\n", "\n", "plt.sca(ax[1, 1])\n", "plt.title(\"Extended binned NLL\")\n", "plt.errorbar(\n", " n_pts,\n", " n_pts ** 0.5 * extended_binned_nll[2],\n", " np.sqrt(n_pts * extended_binned_nll[3]),\n", " fmt=\"o\",\n", " label=r\"$\\sqrt{n}\\,\\Delta\\mu$\",\n", ")\n", "plt.errorbar(\n", " n_pts,\n", " n_pts ** 0.5 * extended_binned_nll[4],\n", " np.sqrt(n_pts * extended_binned_nll[5]),\n", " fmt=\"s\",\n", " label=r\"$\\sqrt{n}\\,\\Delta\\sigma$\",\n", ")\n", "\n", "plt.ylim(-5, 5)\n", "plt.legend()\n", "plt.semilogx();\n", "for i in (0, 1):\n", " ax[1, i].set_xlabel(r\"$n_\\mathrm{pts}$\")\n", "for axi in ax.flat:\n", " for y in (-1, 1):\n", " axi.axhline(y, ls=\":\", color=\"0.5\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Least-squares fits\n", "\n", "We do the same as before, but this time we use a least-squares fit of $x,y$ scattered data and vary the residual function. Other functions than the identity can be used to reduce the pull of large outliers, turning the ordinary least-squares fit into a robust fit." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10000 17 need to re-try [(True, True), (True, True), (False, False)]\n", "10000 69 need to re-try [(True, True), (True, True), (False, False)]\n" ] } ], "source": [ "n_tries = 100 # increase this to 500 to get less scattering\n", "\n", "truth = Namespace(a=1, b=2)\n", "\n", "n_pts = np.array((10, 30, 100, 300, 1000, 3000, 10000))\n", "\n", "\n", "@joblib.delayed\n", "def compute(n):\n", " rng = np.random.default_rng(n)\n", " x = np.linspace(0, 1, n)\n", "\n", " linear = []\n", " soft_l1 = []\n", " arctan = []\n", " for i_try in range(n_tries):\n", "\n", " def model(x, a, b):\n", " return a + b * x\n", "\n", " while True:\n", " y = model(x, 1, 2)\n", " ye = 0.1\n", " y += rng.normal(0, ye, len(y))\n", "\n", " m = [\n", " Minuit(LeastSquares(x, y, ye, model), a=0, b=0),\n", " Minuit(LeastSquares(x, y, ye, model, loss=\"soft_l1\"), a=0, b=0),\n", " Minuit(LeastSquares(x, y, ye, model, loss=np.arctan), a=0, b=0),\n", " ]\n", "\n", " all_good = True\n", " for mi in m:\n", " mi.migrad()\n", " mi.hesse()\n", " if not mi.valid or not mi.accurate:\n", " all_good = False\n", " break\n", " if all_good:\n", " break\n", " print(f\"{n} {i_try} need to re-try {[(mi.valid, mi.accurate) for mi in m]}\")\n", "\n", " linear.append(\n", " (\n", " m[0].values[\"a\"] - truth.a,\n", " m[0].values[\"b\"] - truth.b,\n", " m[0].errors[\"a\"] ** 2,\n", " m[0].errors[\"b\"] ** 2,\n", " )\n", " )\n", " soft_l1.append(\n", " (\n", " m[1].values[\"a\"] - truth.a,\n", " m[1].values[\"b\"] - truth.b,\n", " m[1].errors[\"a\"] ** 2,\n", " m[1].errors[\"b\"] ** 2,\n", " )\n", " )\n", " arctan.append(\n", " (\n", " m[2].values[\"a\"] - truth.a,\n", " m[2].values[\"b\"] - truth.b,\n", " m[2].errors[\"a\"] ** 2,\n", " m[2].errors[\"b\"] ** 2,\n", " )\n", " )\n", "\n", " return [\n", " (*np.mean(t, axis=0), *np.var(np.array(t)[:,:2], axis=0))\n", " for t in (linear, soft_l1, arctan)\n", " ]\n", "\n", "linear = []\n", "soft_l1 = []\n", "arctan = []\n", "\n", "for l, s, a in joblib.Parallel(-1)(compute(n) for n in n_pts):\n", " linear.append(l)\n", " soft_l1.append(s)\n", " arctan.append(a)\n", "\n", "linear = np.transpose(linear)\n", "soft_l1 = np.transpose(soft_l1)\n", "arctan = np.transpose(arctan)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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oXr37q1LLrlEzz77rL799ls999xzatSokUaNGlXma3j06FFdccUVio2N1YQJExQTE6N9+/bp008/tfUxDEP9+vXTihUrNHz4cLVu3VpLlizR/fffr0OHDumFF15QbGys3nvvPT3++OM6deqUUlNTJUlNmjRxentypxtvvFHJyclKTU3V5s2b9eabbyouLs72tyFJI0aM0Lvvvqvrr79e48eP1/r165Wamqpff/1Vn332md3ydu3apUGDBun//u//NHLkSDVt2tT2WGpqqiIiIjRhwgTt3r1bL7/8skJCQhQUFKSTJ09q6tSpWrdunWbPnq3k5GRNnjzZba8DvBf7gLKxD6j8PkAqKhpWq1ZN48aNU7Vq1bR8+XJNnjxZWVlZeuaZZ+z6/vHHH7ryyit1880365ZbblHt2rVVWFioq6++WsuWLdPNN9+sMWPG6M8//9TSpUu1bds29erVy2H8S5cu1X//+18NGzZM8fHx2r59u2bNmqXt27dr3bp1slgsdjGUJ2+X5eTJk+rTp4+uu+463XjjjZo/f74efPBBtWjRQldeeaWkom21e/fu2r17t+666y4lJyfr448/1tChQ5WRkaExY8bYLbO07arYTTfdpAsvvFBPPvmkvvzySz322GOqWbOmXn/9dfXo0UNPPfWU3n//fd133326+OKL1bVr1/Oug8cYgA975513DEnGjz/+WOrjw4cPN+rUqWMcP37crv3mm282oqOjjZycHMMwDKOgoMDIzc2163Py5Emjdu3axu23325rGzNmjBEVFWUUFBSUGdPHH39sSDJWrFhRrnV44YUXDEnGsWPHyuwzY8YMQ5Ixb948W1t2drbRuHHjEmMlJSUZt912W4lldOvWzejWrZvtfnnXee/evYYkIyoqyjh69Khd/549exotWrQwzpw5Y2uzWq1Gp06djCZNmtjaWrVqZfTt27fM9QMC3flymWGQz87mi/ls9OjRRu3atW33x40bZ3Tt2tWIi4szXnvtNcMwDOOPP/4wLBaL8eKLL9r63XbbbUZSUpLt/rFjxwxJxpQpU0qMcdtttxmSjOnTp9u1t2nTxmjbtq3D+D777LPzboOff/65Icl47LHH7Nqvv/56w2KxGLt377a1devWzfj73/9u18/Z7WnKlCnn3Z7O5ui1Od8YZ28nhmEY1157rXHBBRfY7m/ZssWQZIwY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u+++q3/961+69tpr1ahRI/3555964403FBUVZSueXHPNNbrsssv00EMPad++fWrVqpW++eYbLViwQGPHji3xvpzL2e2p2PPPP19i+wgKCtKkSZMkSe+9957279+vnJwcSdKqVav02GOPSZJuvfVWl3xL3KpVK912222aNWuW7VSPDRs26N1339WAAQN02WWXVXoMgH2APfYBJZm1D+jUqZNq1Kih2267Tffcc48sFovee+89p06nGjJkiObMmaNx48Zpw4YN6tKli7Kzs/Xtt9/qn//8p/r37+8w/q5du+rpp59Wfn6+EhMT9c033zh1BJSr3XHHHXr99dc1dOhQbdq0SQ0aNND8+fP1ww8/aMaMGSXmAwwYJl/lDTBV8WVPy7odPHjQSE9PN0aPHm3Uq1fPCAkJMeLj442ePXsas2bNsi3HarUaTzzxhJGUlGSEhYUZbdq0MRYtWlTi0pnz5883rrjiCiMuLs4IDQ016tevb/zf//2fceTIEbu43njjDaNhw4ZGcHDweS9/umzZMqN///5GQkKCERoaaiQkJBiDBg0y/vOf/9j1279/v9GvXz8jMjLSqFWrljFmzBhj8eLFpS7/ueeeMxITE42wsDDj0ksvNTZu3FjikqflXefiS1M+88wzpca/Z88eY8iQIUZ8fLwREhJiJCYmGldffbUxf/58W5/HHnvMaN++vRETE2NEREQYzZo1Mx5//HG7yxgDgaw8ucwwDPKZH+SzuLg4Q5KRnp5ua1u9erUhyejSpUuJ/ueug2EYxpo1a4y2bdsaoaGhdpdDvu2224yqVauWWEbxZYQd2bx5szFo0CCjfv36RlhYmBEXF2dcffXVxsaNG+36/fnnn8a9995rJCQkGCEhIUaTJk2MZ555xnaJ5mLdunUz/v73v5cYx5ntqTju0m7BwcF2Y5XV73yXHy8e49zLjhf/Te7du9fWlp+fb0ybNs1ITk42QkJCjHr16hkTJ060u7y1YRRdery0y3yvWLHCkGR8/PHHpY517iXcy4oN/od9APsAT+8DDMMwfvjhB6NDhw5GRESEkZCQYDzwwAPGkiVLSrwvZeV3wzCMnJwc46GHHrLlyfj4eOP666839uzZc974f//9d+Paa681YmJijOjoaOOGG24wDh8+bNfn7PUpT94uTVnxl/Zap6enG8OGDTNq1aplhIaGGi1atDDe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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(2, 3, figsize=(14, 8), sharex=True, sharey=False)\n", "\n", "for k, (title, func) in enumerate((\n", " (\"Least-squares\", linear),\n", " (\"Least-squares with soft L1 norm\", soft_l1),\n", " (\"Least-squares with arctan norm\", arctan),\n", ")):\n", " ax[0, k].set_title(title)\n", " for i, x in enumerate(\"ab\"):\n", " ax[0, k].errorbar(\n", " n_pts * 0.95 + 0.1 * i,\n", " np.sqrt(n_pts) * func[0 + i],\n", " np.sqrt(n_pts * func[4 + i]),\n", " fmt=\"so\"[i],\n", " label=f\"$\\sqrt{{n}}\\,\\Delta {x}$\",\n", " )\n", " ax[1, k].plot(\n", " n_pts * 0.95 + 0.1 * i,\n", " func[2 + i] / func[4 + i],\n", " \"so\"[i],\n", " label=f\"$\\sqrt{{n}}\\,\\Delta {x}$\",\n", " )\n", " ax[0, k].legend()\n", "plt.semilogx()\n", "for i in range(3):\n", " ax[1, i].axhline(1, ls=\"--\", color=\"0.5\")\n", " ax[0, i].set_ylim(-2, 2)\n", " ax[1, i].set_ylim(0.7, 3)\n", "ax[0, 0].set_ylabel(\"bias and variance\")\n", "ax[1, 0].set_ylabel(\"estimated variance / true variance\")\n", "fig.supxlabel(r\"$n_\\mathrm{pts}$\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The normal least-squares fit has a smallest variance, which is equal to the minimum variance for this problem given by the Cramer-Rao bound. The robust fits use less information to achieve robustness, hence the variance is larger. The loss from the soft L1 norm in this case is nearly negligible, but for the arctan norm it is noticable.\n", "\n", "**Beware**: The variance estimate obtained from the fit is wrong for robust least-squares, since the robust least-squares is not even asymptotically a maximum-likelihood estimator. The estimate is significantly larger than the actual variance for the soft_l1 and arctan norms in this case." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.8.14 ('venv': venv)", "language": "python", "name": "python3" }, "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.8" }, "vscode": { "interpreter": { "hash": "bdbf20ff2e92a3ae3002db8b02bd1dd1b287e934c884beb29a73dced9dbd0fa3" } } }, "nbformat": 4, "nbformat_minor": 4 }