{ "cells": [ { "cell_type": "markdown", "id": "9501cd6f-d051-4682-9f72-ce3aa151a3c5", "metadata": {}, "source": [ "# Agresti & Finlay (2009): Robust Regression\n", "\n", "Here, we will demonstrate robust regression using data from *Statistical Methods for Social Sciences*, 3rd Edition by Alan Agresti and Barbara Finlay. We will model violent crime as a function of poverty and percent of population that are single parents. Note that this analysis is all at the state-level for the United States. This applied example is based on the [tutorial](https://stats.oarc.ucla.edu/r/dae/robust-regression/) provided by UCLA Advanced Research Computing. The data come from the 2005 *Statistical Abstract of the United States*, with a copy of the data available [here](https://users.stat.ufl.edu/~aa/social/data.html).\n", "\n", "## Setup" ] }, { "cell_type": "code", "execution_count": 1, "id": "839482ad-83a4-4b8e-9873-e69440dbb5f9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Versions\n", "NumPy: 2.3.5\n", "SciPy: 1.16.3\n", "pandas: 2.3.3\n", "Matplotlib: 3.10.8\n", "Delicatessen: 4.1\n" ] } ], "source": [ "import numpy as np\n", "import scipy as sp\n", "import pandas as pd\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "\n", "import delicatessen as deli\n", "from delicatessen import MEstimator\n", "from delicatessen.estimating_equations import ee_regression, ee_robust_regression\n", "from delicatessen.utilities import robust_loss_functions\n", "\n", "print(\"Versions\")\n", "print(\"NumPy: \", np.__version__)\n", "print(\"SciPy: \", sp.__version__)\n", "print(\"pandas: \", pd.__version__)\n", "print(\"Matplotlib: \", mpl.__version__)\n", "print(\"Delicatessen:\", deli.__version__)" ] }, { "cell_type": "code", "execution_count": 2, "id": "7dc0eaf9-9f3b-454e-8167-8105b00726d2", "metadata": {}, "outputs": [], "source": [ "d = pd.read_stata(\"data/crime.dta\")\n", "d['intercept'] = 1\n", "d['crime_std'] = (d['crime'] - np.mean(d['crime'])) / np.std(d['crime'], ddof=1)" ] }, { "cell_type": "code", "execution_count": 3, "id": "c415179c-e055-4254-8017-1fb7bd8fcffb", "metadata": {}, "outputs": [], "source": [ "X = np.asarray(d[['intercept', 'poverty', 'single']])\n", "y = np.asarray(d['crime_std'])" ] }, { "cell_type": "markdown", "id": "620eddaa-200a-409a-90a6-df5c16c04f52", "metadata": {}, "source": [ "Let's examine the outcome variable to see if there are substantial outliers" ] }, { "cell_type": "code", "execution_count": 4, "id": "c3fd9472-9183-4271-a8cc-c9870b874964", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnQAAAHWCAYAAAD+VRS3AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAGzpJREFUeJzt3QuQVmX9wPGHiy6ogOANSBC8pCmKd/OS6ciIRKbWNFrUEDaaiilZKmupkRVojUM5hGaj2IyK1gg6kpShaBZe8I4lSt7IRLzuipdV4fznOdPuf5eLAr7v7v7Yz2fmdX3f97Dn8Ozh7Pc95z3n7VQURZEAAAirc1svAAAAn4ygAwAITtABAAQn6AAAghN0AADBCToAgOAEHQBAcIIOACC4rqmdWbFiRfrvf/+bevTokTp16tTWiwMAUHX5cx7eeuut1L9//9S5c+f4QZdjbsCAAW29GAAArW7x4sVp2223jR90ec9c41+oZ8+ebb04AABVV19fX+7Qauyg8EHXeJg1x5ygAwA6kk7r+XYzJ0UAAAQn6AAAghN0AADBCToAgOAEHQBAcIIOACA4QQcAEJygAwAITtABAAQn6AAAghN0AADBCToAgOAEHQBAcOscdHfffXc6+uijU//+/VOnTp3SzJkzWzxfFEW64IILUr9+/VL37t3TsGHD0tNPP13JZQYA4JME3dtvv52GDh2apkyZstrnL7nkkvTrX/86XX755em+++5Lm266aRo+fHh677331nVWAACsha5pHY0YMaK8rU7eOzd58uT0ox/9KB1zzDHlY7///e/TNttsU+7JO+GEE9Z1dgAAtOZ76J599tm0ZMmS8jBro169eqUDDjggzZs3b7V/pqGhIdXX17e4AQBQxT10HyXHXJb3yDWX7zc+t7KJEyemCRMmVHIxOrRB42e1ynyemzSyVeYDAAQ4y7W2tjbV1dU13RYvXtzWiwQA0HGDrm/fvuXXl19+ucXj+X7jcyurqalJPXv2bHEDAKCNgm7w4MFluM2ZM6fpsfyeuHy264EHHljJWQEAsL7voVu2bFlatGhRixMhHnnkkdSnT580cODANG7cuPTTn/407bTTTmXgnX/++eU164499th1nRUAANUIuvnz56fDDz+86f5ZZ51Vfh09enSaNm1aOuecc8pr1Z188snpzTffTIccckiaPXt26tat27rOCgCAtdCpyBePa0fyIdp8qZN8goT30607Z7kCQDyftH/a/CxXAAA+GUEHABCcoAMACE7QAQAEJ+gAAIITdAAAwQk6AIDgBB0AQHCCDgAgOEEHABCcoAMACE7QAQAEJ+gAAIITdAAAwQk6AIDgBB0AQHCCDgAgOEEHABCcoAMACE7QAQAEJ+gAAIITdAAAwQk6AIDgBB0AQHCCDgAgOEEHABCcoAMACE7QAQAEJ+gAAIITdAAAwQk6AIDgBB0AQHCCDgAgOEEHABBc17ZeAPgog8bPapUBem7SSD8IAMKyhw4AIDhBBwAQnKADAAhO0AEABCfoAACCE3QAAMEJOgCA4AQdAEBwgg4AIDhBBwAQnKADAAhO0AEABCfoAACCE3QAAMEJOgCA4AQdAEBwgg4AIDhBBwAQnKADAAhO0AEABCfoAACCE3QAAMEJOgCA4AQdAEBwgg4AIDhBBwAQnKADAAhO0AEABCfoAACCE3QAAMEJOgCA4AQdAEBwgg4AIDhBBwAQnKADAAiu4kG3fPnydP7556fBgwen7t27px122CFddNFFqSiKSs8KAICUUtdKj8LFF1+cpk6dmq655pq02267pfnz56cxY8akXr16pTPOOMOgAwC096D7xz/+kY455pg0cuTI8v6gQYPS9ddfn+6///5KzwoAgGoccj3ooIPSnDlz0lNPPVXef/TRR9M999yTRowYsdrpGxoaUn19fYsbAABtuIdu/PjxZZTtsssuqUuXLuV76n72s5+lUaNGrXb6iRMnpgkTJqQN3aDxs9p6EQCADVTF99DdeOON6dprr03XXXddeuihh8r30v3yl78sv65ObW1tqqura7otXry40osEALBBq/geurPPPrvcS3fCCSeU93fffff0/PPPl3viRo8evcr0NTU15Q0AgHayh+6dd95JnTu3/Lb50OuKFSsqPSsAAKqxh+7oo48u3zM3cODA8rIlDz/8cLr00kvTiSeeaMABACIE3WWXXVZeWPi0005LS5cuTf3790/f+c530gUXXFDpWQEAUI2g69GjR5o8eXJ5AwCg+nyWKwBAcIIOACA4QQcAEJygAwAITtABAAQn6AAAghN0AADBCToAgOAEHQBAcIIOACA4QQcAEJygAwAITtABAAQn6AAAghN0AADBCToAgOAEHQBAcIIOACA4QQcAEJygAwAITtABAAQn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lelramrKW3Obb775Os0zD5Sgaz3Gu/UZc+O9IbN+G+8NWc91aJT12TNXtZMiNt5447TPPvukOXPmtNjrlu8feOCBlZ4dAECHV5VDrvkQ6ujRo9O+++6b9t9//zR58uT09ttvl2e9AgAQIOiOP/749Morr6QLLrggLVmyJO25555p9uzZq5wo8UnlQ7X5WncrH7KlOox36zPmxntDZv023huymlZulE7F+p4fCwBAu+CzXAEAghN0AADBCToAgOAEHQBAcKGDbsqUKWnQoEGpW7du6YADDkj3339/Wy9SOD/+8Y/LT+Rofttll12ann/vvffS2LFjy0/u2GyzzdJXvvKVVS4a/cILL6SRI0emTTbZJG299dbp7LPPTh9++GEb/G3ap7vvvjsdffTR5dW/8/jOnDmzxfP5vKR8Rni/fv1S9+7dy889fvrpp1tMkz89ZdSoUeXFKfOFt7/97W+nZcuWtZjmscceS5/73OfKfw/56uSXXHJJ6og+bry/9a1vrbLOH3XUUS2mMd5rJ39043777Zd69OhR/ts/9thj08KFC1tMU6ltyNy5c9Pee+9dnjG44447pmnTpqWOZm3G+7DDDltl/T7llFNaTGO8187UqVPTHnvs0XRh4Hwt3dtuu639rttFUNOnTy823njj4qqrriqeeOKJ4qSTTio233zz4uWXX27rRQvlwgsvLHbbbbfipZdearq98sorTc+fcsopxYABA4o5c+YU8+fPLz772c8WBx10UNPzH374YTFkyJBi2LBhxcMPP1z86U9/Krbccsuitra2jf5G7U8ekx/+8IfFTTfdlM8oL2bMmNHi+UmTJhW9evUqZs6cWTz66KPFl770pWLw4MHFu+++2zTNUUcdVQwdOrS49957i7/97W/FjjvuWHzta19rer6urq7YZpttilGjRhULFiworr/++qJ79+7FFVdcUXQ0Hzfeo0ePLsez+Tr/+uuvt5jGeK+d4cOHF1dffXW5zj3yyCPFF77whWLgwIHFsmXLKroNeeaZZ4pNNtmkOOuss4p//vOfxWWXXVZ06dKlmD17dtGRrM14f/7zny9/HzZfv/P2oZHxXnu33HJLMWvWrOKpp54qFi5cWJx33nnFRhttVI5/e1y3wwbd/vvvX4wdO7bp/vLly4v+/fsXEydObNPlihh0ORRW58033yxX3j/84Q9Nj/3rX/8qf0nOmzevvJ9X0M6dOxdLlixpmmbq1KlFz549i4aGhlb4G8SycmCsWLGi6Nu3b/GLX/yixbjX1NSUUZblf+T5zz3wwANN09x2221Fp06dihdffLG8/5vf/Kbo3bt3izE/99xzi5133rnoyNYUdMccc8wa/4zxXn9Lly4tx/yuu+6q6DbknHPOKV94Nnf88ceXgdORrTzejUF35plnrvHPGO9PJm9nf/e737XLdTvkIdf3338/Pfjgg+WhqUadO3cu78+bN69Nly2ifHgvH57afvvty8N6eRdxlsf4gw8+aDHO+XDswIEDm8Y5f919991bXDR6+PDh5YcSP/HEE23wt4nl2WefLS++3XyM82f55bcQNB/jfJg1f/JKozx9Xufvu+++pmkOPfTQ8qP3mv8c8uGYN954o1X/ThHkQxz58MfOO++cTj311PTaa681PWe8119dXV35tU+fPhXdhuRpmn+Pxmk6+vZ+5fFudO2115afqz5kyJBUW1ub3nnnnabnjPf6Wb58eZo+fXr5qVf50Gt7XLer8kkR1fbqq6+Wg7vyJ0/k+08++WSbLVdEORzy8fr8i+2ll15KEyZMKN+HtWDBgjI0ciDkmFh5nPNzWf66up9D43N8tMYxWt0YNh/jHB/Nde3atdyIN59m8ODBa/w59O7d24/if/L75b785S+X4/Xvf/87nXfeeWnEiBHlBrRLly7Gez3lz+weN25cOvjgg8uQaFz3KrENWdM0+Rfju+++W773tKNZ3XhnX//619N2221XvkjP76s999xzyxd2N910U/m88V43jz/+eBlw+f1y+X1yM2bMSLvuumt65JFH2t26HTLoqJz8i6xRfvNnDry8Mbjxxhs75EaSDd8JJ5zQ9P/51XNe73fYYYdyr90RRxzRpssWWX5zeH4heM8997T1onTo8T755JNbrN/5ZKu8XucXL3k9Z93knR053vLe0D/+8Y/l59TfddddqT0Kecg170rOr6RXPpsk3+/bt2+bLdeGIL/a+PSnP50WLVpUjmU+vP3mm2+ucZzz19X9HBqf46M1jtFHrcv569KlS1s8n8+Symdi+jl8cvmtBnmbktd5471+Tj/99HTrrbemO++8M2277bZNj1dqG7KmafKZhx3xheeaxnt18ov0rPn6bbzXXt4Ll8883WeffcqzjIcOHZp+9atftct1u3PUAc6DO2fOnBa7n/P9vGuU9ZcvhZFfyeVXdXmMN9pooxbjnHfd5/fYNY5z/pp3STcPjttvv71cGfNuaT5aPuyX/0E3H+O8qz2/N675GOeNRn7PRqM77rijXOcbN9Z5mny5jvyejuY/h/zq0uHWj/af//ynfA9dXueN97rJ553kuMiHofI6ufJh/0ptQ/I0zb9H4zQdbXv/ceO9OnnvUtZ8/Tbe6y9vdxsaGtrnul0EvmxJPhNw2rRp5VlpJ598cnnZkuZnk/Dxvv/97xdz584tnn322eLvf/97eXp1Pq06nz3VeFp2Pi3+jjvuKE/LPvDAA8vbyqdlH3nkkeVp9PlU66222splS5p56623ylPW8y3/k7v00kvL/3/++eebLluS192bb765eOyxx8ozMFd32ZK99tqruO+++4p77rmn2GmnnVpctiSfcZUvW/LNb36zPKU+//vIp8J3xMuWfNR45+d+8IMflGeh5XX+r3/9a7H33nuX4/nee+81fQ/jvXZOPfXU8pI7eRvS/DIZ77zzTtM0ldiGNF7a4eyzzy7PJJwyZUqHvGzJx433okWLip/85CflOOf1O29Ttt9+++LQQw9t+h7Ge+2NHz++PIM4j2XeNuf7+eoCf/nLX9rluh026LJ8vZY8mPl6dPkyJvkaXaybfHp0v379yjH81Kc+Vd7PG4VGOSpOO+208lTtvNIdd9xx5Qakueeee64YMWJEed2zHIM5Ej/44AM/iv+58847y7BY+ZYvn9F46ZLzzz+/DLL8IuWII44or3nU3GuvvVYG3GabbVae8j5mzJgyTprL17A75JBDyu+Rf5Y5FDuijxrv/Isvb1zzRjVfcmC77bYrr9m18gtB4712VjfO+ZavlVbpbUj+ue65557ltipHSvN5dBQfN94vvPBCGW99+vQptwP5epU5FJpfhy4z3mvnxBNPLLcReZ3L24y8bW6Mufa4bnfK/1n/nY8AALS1kO+hAwDg/wk6AIDgBB0AQHCCDgAgOEEHABCcoAMACE7QAQAEJ+gAAIITdAAAwQk6AIDgBB0AQHCCDgAgxfZ/+kghcmC0ZbcAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist(d['crime'], bins=20)\n", "plt.tight_layout()" ] }, { "cell_type": "code", "execution_count": 5, "id": "8e838f8c-219f-4269-a2cf-3ba99891dff8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " state crime\n", "50 dc 2922\n" ] } ], "source": [ "print(d.loc[d['crime'] == np.max(d['crime']), ['state', 'crime']])" ] }, { "cell_type": "markdown", "id": "2cf1f267-a1f2-435a-91ab-a0e84bfd8d5d", "metadata": {}, "source": [ "So in this data set, Washington DC has a quite substantial crime rate relative to other locations. This indicates there is a substantial outlier, and our subsequent results may depend on how DC is handled in the analysis.\n", "\n", "## Linear Regression\n", "\n", "To start, let's model crime rate (`crime`) as a function of poverty (`poverty`) and single parent percentage (`single`). This can be easily done in `delicatessen` by constructing the estimating functons using the `ee_regression` " ] }, { "cell_type": "code", "execution_count": 6, "id": "b6b398c9-d569-4f84-b8b8-ea2158b9adf9", "metadata": {}, "outputs": [], "source": [ "def psi_ols(theta):\n", " return ee_regression(theta, X=X, y=y, model='linear')" ] }, { "cell_type": "code", "execution_count": 7, "id": "204497bd-ec9c-4d3a-8d53-00be5f3bc498", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "==============================================================\n", " Estimation Method: M-estimator\n", "--------------------------------------------------------------\n", "No. Observations: 51 | No. Parameters: 3\n", "Solving algorithm: lm | Max Iterations: 5000\n", "Solving tolerance: 1e-09 | Allow P-Inverse: 1\n", "Derivative Method: approx | Deriv Approx: 1e-09\n", "Small N Correction: None | Distribution: Z-stat\n", "==============================================================\n", " Theta StdErr Z-score LCL UCL P-value S-value \n", "--------------------------------------------------------------\n", " -4.49 0.63 -7.17 -5.72 -3.26 0.00 40.25 \n", " 0.02 0.02 0.64 -0.03 0.06 0.52 0.94 \n", " 0.38 0.06 6.54 0.26 0.49 0.00 33.89 \n", "==============================================================\n" ] } ], "source": [ "estr = MEstimator(psi_ols, init=[0, 0, 0])\n", "estr.estimate()\n", "estr.print_results()" ] }, { "cell_type": "markdown", "id": "a7f5eeb3-b8e9-4c53-800e-7196aad5ebae", "metadata": {}, "source": [ "To understand our results a bit more, we can plot the residuals" ] }, { "cell_type": "code", "execution_count": 8, "id": "fda0893e-888d-4b50-8167-2429ef461923", "metadata": {}, "outputs": [ { "data": { "image/png": "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cxwAwC4EO8Ay8bi0GgAgOgh2gGXidWk1AEDkOS7YTZkyRRo0aCDly5eXTp06yTfffOP32BkzZkhSUlKhTR8H2Ea7VZctWyZz586V/fv3B/QYPY7uWACwi6OC3ZtvvikjR46UsWPHyrp166RNmzbSu3dv+fXXX/0+Ruu9aMuEe/vll1+ies5ApOlECP1jp0ePHnLTTTfJiBEjAlqDVo/TxzGRAgDs4ahg99xzz8nQoUPl9ttvlxYtWkhWVpZUrFhR/vWvf/l9jLbS1apVy7PVrFkzqucMxGL2a6AtccySBQC7OCbY5efny9q1a6VXr16efaVKlTK3V65c6fdxR48elfr160tqaqqkpaXJDz/8UOTr5OXlmQrPBTfAabNf3YpruWOWLADYxTHB7uDBg+aDzLvFTW/v27fP52OaNm1qWvPeeecdef311+X06dPSpUuXImcMTpw40Szb4d40EAJOnP2q9N/M3XffXeQxzJIFAHs4JtiFonPnznLrrbdK27ZtpVu3bqbbqnr16jJ16lS/j8nIyDBrsbk3LQsBxKNAZ7XqcIRwPh8AwIIlxf7880+pUKGCxEq1atVMt5L3jD+9rWPnAlG2bFlp166dbN261e8xycnJZgPiXe3atQM6rnHjxmF9PgCAw1vsNm3aJF27dpVYKleunLRv316WLl3q2addq3pbW+YCod1S3333HR9gKFQeRL86seyH/pvUtV/9tcjpfh1KcNdddwV0XKz/jQMAohDslixZIn369JHMzEyJNS11Mm3aNHnttddM2Bw2bJgcO3bMzJJV2u2qXalujz76qHzyySeybds2Ux5l4MCBptzJkCFDYvguEG/lQfSrE8t+aAv25MmTzffeoc19W//d6h9FgRwXSIkUAIDDg92ePXtk8eLF8ve//11i7frrr5dnnnlGxowZY8bNrV+/3pybe0LFzp07C40T+v333015lObNm8tVV11lZrh+9dVXplQKEpO/8iBOLfvRv39/mTdvntStW7fQfm2h0/16fzDHAQCcLclVVK0EmDCos2N1IoUWO4ZzaXertsz5m0mqrVcadLZv3+641it9bzpLVv+w0bFy2q3q6z0EehwAwJlZJORgp3Xl9ANQB2aXKRPwHAzHIdjZQ8fSabdrcbKzs6V79+5ROScAAMKZRYIud3L8+HEZPHiwWfHhggsuMN2f6t5775Unnngi2KcDoibQch6U/QAAOFXQwU4nJ2zYsMG0fpQvX96zX1eA0LVcgXgVaDkPyn4AABIm2C1atEheeOEFM5mi4Aw7bb37+eefw31+QNTLg1D2AwCQMMHuwIEDUqNGjTP2a9mRQCvcA/FcHoTJBACAhAl2HTp0kA8++OCMD8RXXnkl4ELBQKxQ9gMAYLOgp7NOmDDBFCz+8ccf5eTJk6YFRL/X+nDLly+PzFkCYQ53aWlplP0AAFgnpHInOpZOZ8DqJIqjR4/KhRdeKA899JC0atVKbEO5EwAAYH0du0RBsIM3ivwCAOI1i4RcWfjXX3812+nTpwvtb926dahPCcQ9XXJs+PDhhVav0Jm2OiSBZbkAALEWdLBbu3atDBo0SDZt2iTejX06kUJbMwCb15n1/r13rzPLmqsAgFgLuiu2TZs2ZhkxHVNXs2bNM8pG1K9fX2zipK7YeOsijLfzKQmb15kFACRwV+y2bdtk/vz50qRJk5KcIyzvIoy38ykpDaj+Qp3Sv49ycnLMcawzCwBwTB27nj17mtmwiL8uQu/g4e4i1PsT+XzCgXVmAQBWdsUePHjQjLHr2LGjtGzZUsqWLVvo/r59+4pN4r0rNt66COPtfMJF10bu0aNHscd9+umn5n2Fs/vZpi5tAECclTt577335JZbbjEvcsaTWTh5It6DXaCBIzs7OypdhPF2PuEOrNrq6OufjP7un3vuuVK+fHlzTLi6n23r0gYARDaLBN0Ve++998rAgQNN64GWOim42RbqnCDeugjj7Xyitc6shr1Dhw4VCnUl7X62sUsbABBZQQc7/fAaMWKEmRGL2NOuuXAeZ9v5BEr/KNHWxrlz55qvvv5I8bfOrN4+77zzfD6vu3UvPT09qD989FhtqfPVOhjqcwIA7Bd0V6yOr9MxPkOGDJFEEO9dsYF0EYZzTFtx472ifT7hEGx3p/c10Nu9evUKa/ezrV3aAIA4K3dy/vnnS0ZGhnzxxRdmbVjvyRP33Xdf8GeMEncRatecu0vQzd1lmJmZGZYQFUgAiub5xKrosJ57wTClrXzh7n62tUsbABBhriA1aNDA79awYUOXbY4cOaKf+OZrPJs/f74rJSXFnKt7S01NNfvD9fxJSUmFnl833aeb9+tE+nzC4eTJk2eco/d703PW44qSnZ3t9zkKbnpcoCLxnAAA+7NI0F2xiSbeu2KjURYj1BIm+fn58uKLL8rPP/9sViu56667pFy5chIvAu3ufOSRR0z9Rn/XMxLdz07s0gYAxEEWiUbSdDKntNhFUiitR75a7PR2PLXYzZkzJ6D3Fcj5u1s0vVs1/bVoBiISzwkAsDuLBDTGbuTIkfLYY4/JWWedZb4vynPPPRdUCkX8C3a8Vyjj1mIh2Jm5RZ2/e8asrzGIOqYwlPcbiecEANgtoK5Y7a5auHChVK1a1Qwa967j5XmypCT57LPPxCZO6oqNVBduMDM09bFOWXmiuO7OUM4/Et3hrDwBAIktN5IrTyQa24NdIDNdgxnvpaHGSWU63K2LKph/CvFy/gAA++VGauWJv/76S8qUKSPff/99Sc8RcSDQlQ2KW3WhYAkTp5Xp8Fd02CnnDwBAyMFOa9bVq1ePavdxLJAVFEJZ2cBfANKWuoJjzpy48oSe+44dO0wrnM6Addr5AwAQclfsq6++alpyZs2aZRY9t52TumKDWUEh1JUNbFx5oiCnnz8AwD4RXXnihRdekK1bt0qdOnWkfv36ZqZsQevWrQv+jFFiwc5EDbXL1HvVBW9OW3nCtvMHACS2oINdv379InMmCFlx3aoaSLRbNS0tzRNIItll6vQyHdE6f2a7AgDCjVmxFnTFhtKtGo0ux3gMLsGcUyTPP5hucwBAYsuNZFfs6tWr5fTp09KpU6dC+1etWmU+9Dp06BD8GaNEQulWjUaXY3HdttEWbJiK1Pk7pYAzAMDyWbHq7rvvlpycnDP264eS3ofoC7VbNdCZrolU2iXSgp2NDABARLtizz77bNm4caM0atSo0H7tsmvdurX88ccfYhMndMWWtFs1HrtMI3F94mE1jFBnIwMAEldupAoUq+TkZNm/f/8Z+zUUaPFiRF8wBYT9PV5DxI033mi+2hTqlIZWf6FOaRjWVmg9LtKcVsAZAOAsQQe7K664QjIyMkxqdDt8+LA8/PDDcvnll4f7/BCgROpWdXKYcmIBZwCAxV2x2t136aWXyqFDh6Rdu3Zm3/r166VmzZqyZMkSSU1NFZs4oSs2kbpVY9X9Ga7rSgFkAEAks0hI5U6OHTsms2fPlg0bNkiFChXM2DrtxtMlx2zjtGCH8IepcJcmcU/kUL5mIyd6CysAIMrBLpEQ7OwQapjyV5qkpCHMV1jU1m4nFHAGAEQXwS5GFxPxLdgwFenZtHSbAwACQbALI4KdXYIJU5QmAQBYufLEiRMnZNiwYTJ9+vRwnSMQE8GsJhFPs2kBAAhLuZOffvpJLr74YmnZsqXEgylTppjusfLly5tlzb755psij3/77belWbNm5vhWrVrJhx9+GLVzhbNRmgQAYF2wmz9/vqlbN2rUKIm1N998U0aOHCljx46VdevWSZs2baR3797y66+/+jz+q6++MrN1Bw8eLN9++63069fPbN9//33Uzx3Oo920OobOu+izm+7XMXp6HAAA8aDYWbH5+flSrlw5iQfaQnfRRRfJCy+8YG6fPn3afLDee++9Mnr06DOOv/76601plvfff9+zT1sf27ZtK1lZWQG9JmPsEhulSQAAVi0pFi+hTgPm2rVrpVevXp59pUqVMrdXrlzp8zG6v+DxSlv4/B2v8vLyzAUsuCFxsaIHAMBJHLO468GDB82MRl3hoiC9vXnzZp+P2bdvn8/jdb8/EydOlHHjxoXprO2Q6GU5NNylpaUl9DUAADiDY4JdtOh4Qh3H56YtdpFcJi3eQ1O4V12Ihkhc02Bm0wIAECuOCXbVqlUzH6779+8vtF9v16pVy+djdH8wx6vk5GSzRUO8hyZ/qy7o0ly6Px6Xvor3awoAQCQVO8bOuyXk888/l8OHD0u06Vi/9u3by9KlSz37dPKE3u7cubPPx+j+gserJUuW+D0+FqHJe1UDd2jS+2NJf9YakHzNrXHvS09PN8d5P04L+86dO9d89b4/ka8pAAAR5wpScnKya9u2ba5YeOONN8zrz5gxw/Xjjz+67rjjDlfVqlVd+/btM/ffcsstrtGjR3uO//LLL11lypRxPfPMM65Nmza5xo4d6ypbtqzru+++C/g1jxw5oinGfA2XkydPulJSUszz+tqSkpJcqamp5rhYyc7O9nt+BTc9zm3+/PlnvC+9rfsjzQnXNBh6nnpt58yZY7465bwBAOEXTBYJqsVOaaHibdu2SSxo+ZJnnnlGxowZY0qWrF+/XhYvXuyZILFz585CqwB06dJF5syZIy+//LKpeaddh4sWLYp5sWUd/+Vv/VF3i1hOTo45LlaCXXUh1NaycLXwOeGaBkqvlRbh7tGjh9x0003mq96mxREAUKxgU+NHH33katu2reu9995z7dmzx6THgpttItFip60wgbSG6XFOaLELtbUsnC18TrimgdD3rtfL1zXULRqtnwCABGqxu+qqq2TDhg3St29fMyj9nHPOMVvVqlXNV9ixVFUwqy6E0loW7vFwTrimkRrXCABAyLNis7Ozg30I/IQmDTG+PsQ1NOn9sVyqSmcg60xSDVl6PgXP0x32MjMzzXHBdtsWF2D0+TXAaO24QMuUOOGaFieYgEzpFQBAWIJdt27dgn0IShCa4mHVBV/lQ/T83OVDgm0ti0SAcco1LUqwARkAAG9Bd8UqLXfy7LPPypAhQ8w2adIks34Z7FuqSs9jx44dpqVWJ6Lo1+3btxc6v2C6bSMZYJxyTW3uTgYAxFaSDrQL5gFr1qwx661WqFBBOnbsaPatXr1a/vzzT/nkk0/kwgsvlERdeNfGlScC5R4zp3y1lhUMVjr7VWd6FkdDZChdjk69pnreOvu1uO5kDdZOeD8AgOhnkaCDnX5INmnSRKZNmyZlyvxfT+7JkydNy52WQdECxjaJdLCzia9VH6pXry4333yzGS/nDlgEmPAEZABAYsiNZLDTlrpvv/1WmjVrVmj/jz/+KB06dJDjx4+LTQh2obWWvfPOOzJ79mw5cOCAz6W9ohlgnNaC5ysga1d2wXGNAIDEkRtEsAt6jJ0+oRYC9qaD3StVqhTs08EyGph+++03E+AKhjrvUibRGg/nxGK/gYxrBAAgLC129913nyxcuNCsAKErO6gvv/xSHnjgAbn22mtNq4JNaLELjrub1d+sV+9xYpFsTXO3Cnr/itOtCQBwkoh2xebn55sQl5WVZcbWqbJly8qwYcPkiSeekOTkZLFJIge7UEJXpCdGRCpgAgCQMF2xGzdulNOnT5vvy5UrZ7rZfv/9d7NWq27a9aYlT2wLdYks1C7MeKnFVpK1Y8O1fi0AANEWULBr166dHDx40HzfqFEjOXTokFSsWFFatWplNv0e8S2YsFKS5b7ipRZbqAHTiWPyAAAIKtjpOrDaZaV0ULe79Q7OEExYKel6pcEWK46UUAJmuNevBQAg2gIaY3fHHXfIzJkzzYegzojVD25/45K0lp1NnD7GLtgJBOEYIxcPtdiCrZXHmDwAgA1ZJKC1Yl9++WXzQbx161YzK3bo0KGUNnGA4lrfNNxo65sWD3YH9XCMkQt0jdlIT/Z47rnn5Prrrw9o7dhIrF8LAEC0BRTs1JVXXmm+rl271nxgU7Mu/oUSVsI1Rk7DmwbGaBUG9lXUV4Pk/fffb8YVFhcw42XSRzxwWkFnAEAIwc5t+vTpwT4EMRJKWHGPkSuuCzOQMXIaBqLRuuWvu1nfg9ZbfOutt6RatWpFBpVAA+3+/ftNULQ18PgLyO4VQwAA8S3oOnaJxslj7EIdLxcPY+QCFa6xccWNyVPusXi2Bp54KOhMayEAlDCLaLCDf0eOHNFPOfPVaU6ePOlKSUlxJSUlmffgven+1NRUc5y3+fPnm8cWPF6P1f3xJDs72+d78970uOLoe9Nr4u96+bp+usXbNSnJ70pR79Xf70q4+Pqd09s2XF8AiFYWCXqtWDiHtjBpi5LyLj/iawKBE9crDefYOH/r1/pr6Quk/ItTlKSgczhQagYAwoNgZzl/YUW7EYvrWnOPkbvxxhvN13gcTxbugsjegVZXVCkqtEU68ERLLCePlLR2IgAgyMkT7777rgSqb9++AR+L6Ij2DNVoCudkD1+TPnSiRCLMlo3liiGUmgGAKAe7fv36BfRk+iHKX9XxKVozVGPV3ayD/gOpVxeseFkizYkBOVCUmgGAKHfF6hJigWyEusQVzFq08dTdXJx4WSItnsdjllSihGcAiAbKnVhc7iTRap9FqlRGMOVfAj2HeC3r4etnqcE10iuGBLP8GwAkmtwgskhIwe7YsWOyfPlys25sfn5+oft0yTGbEOziv/ZZvASeQANuvARhf2IROp1UOxEArAp23377rVx11VVy/PhxE/DOPfdcOXjwoFSsWFFq1Kgh27ZtE5sQ7CJfHNgpigo8gQbcRAnCTmktBABJ9GCnA/DPP/98ycrKMi+yYcMGKVu2rAwcOND8p2zbf8AEu/CvbJGoAXfr1q3SuHHjhAnCoYjXLmoAcEoWCXqt2PXr18vUqVOlVKlS5j/cvLw8adSokTz11FMyaNAg64Id/GM2Y3DlOl588cWAiwDbHIQTcfY2AERL0MFOW+c01CntetVxds2bNzdJUj+UkDiYzRhcwP3555/juiYerWUAkIDBrl27drJ69Wr529/+Jt26dZMxY8aYMXazZs2Sli1bRuYsEZdiWfvMiQFXu2HD+XzhFO8TOgAAEVpSbMKECZ4PnvHjx8s555wjw4YNkwMHDsjLL78c7NPBwWJZ+yyeBFrr7q677orLmnis0woA9qCOXTGYPFE8ZjMGXq4j3sp6JNrMZgCwPYsE3WIHeNMgsmPHDjP7dc6cOearBoFE6sILdPWLSK6SEel1WgEAFo6xa9iwod+uJGVbHTvEbjaj0wbzayhLS0sr9pwDPS4amNkMAAke7NLT0wvd/uuvv0zR4sWLF8sDDzwQznNDAnPqYP5AA268lPVgZjMA2CVsY+ymTJkia9askenTp4tNGGMXfazOED2s0woA8S8mY+z69Okj8+fPD9fTIYGDhrbU+fp7w71PW431OJQcM5sBwC5hC3Y68FvXjQVKgsH80RdvEzoAAFEuUFxw8oS2ouzbt8/UsdMlk4CSYDB/bMTThA4AQBSDXb9+/Qrd1uXFqlevbgaCN2vWrASnAjCYP5biZUIHACB0FCguBpMnoovB/AAAhJ5FygT6hIEq7gWBQAbz6+oM2uXva3WGRFimDACAiE2eqFq1qlkTNpAtUn777Te5+eabTXDU8xk8eLAcPXq0yMdot5KGgYLbnXfeGbFzRHgwmB8AgNAE1GKnS0S56dJRo0ePlttuu006d+5s9q1cuVJee+01mThxokSKhjod1L1kyRJTFPn222+XO+64wyxhVZShQ4fKo48+6rldsWLFiJ0jwofB/AAARGGMXc+ePWXIkCFy4403FtqvAevll1+WZcuWSbht2rRJWrRoIatXr5YOHTqYfbrSxVVXXWVWJqhTp47fFru2bduarrtQMcYOQCIsiQcgQQsUa+ucO1wVpPu++eabYJ8u4NfU7teCr9urVy8zI3fVqlVFPnb27NlSrVo1admypWRkZMjx48cjco6Ivw9V/SNj7ty55isFjRHt1VMaNGggPXr0kJtuusl81du6HwAiKehgl5qaKtOmTTtj/yuvvGLuiwStk1ejRo1C+8qUKWMKIut9/uh/qK+//rrpStZQN2vWLBk4cGCRr5WXl2eSccENzsKHKmL9+6eTfwquc6x2795t9hPuAMRVHbtJkybJtddeKx999JF06tTJ7NOWup9++inoJcV0rN6TTz5ZbDdsqHQMnlurVq1Md4h2Jf/888/SuHFjn4/RcYLjxo0L+TURn+vMuj9UWUkBsVwSTydw6ZJ4WgyablkAcVPHLicnR1566SXZvHmzud28eXMz2zTYFjtdreLQoUNFHtOoUSPT6jZq1Cj5/fffPftPnjwp5cuXl7ffflv+8Y9/BPR6x44dk7PPPtuMz+vdu7ffFjvd3LTFTt9XIP3aiI8aeN4tJW76oarLZG3fvp0PVUSEdvtrt2txtBeBYtAAYlbHzpsGnQkTJkhJ6YoVuhVHZ98ePnxY1q5dK+3btzf7PvvsMzl9+rSn1TAQ69evN1+15c6f5ORks8HudWb5UEUksCQegFgLKNht3LjRTD7QyQr6fVFat24t4aYtgldeeaUpXZKVlWXKndxzzz1yww03eGbEalebdrPOnDlTOnbsaLpbdaauzpw977zzzHmPGDFCLr300oicI2KPD1XEWlF/NIZyHABEJNhpyRD3BAb93ntFADfdH6nZhzq7VcOchjcNmDrO7/nnn/fcr2Fvy5Ytnlmv5cqVk08//dSUOtEuWG1l1Mc88sgjETk/xB4fqog1LWmi3f36h6a//yP1fj0OAGI2xu6XX36RevXqmf+U9Pui1K9fX2xCHTvnYJ1ZxNMEHuVrSTwm8ACIZBYJafJEIiHYOQsfqoiX30OdHVtwzKf2GmgPgq6qAgBxU6BYlw774IMPPLcffPBBUzy4S5cuxbbmAZHGOrOIl99DXX5RZ7/qWF/9qrOxCXUAIi3oFrumTZuaUieXXXaZWRFCx7zpX6Hvv/++KRpsW/FNWuycieWcAAC2iGi5Ey0X0aRJE/P9okWLzFgSLQR8ySWXUEICcUOLv1LSBACQaILuitUCv+6iwp988olcfvnl5nstFvznn3+G/wwBAAAQkKBb7DTIDRkyRNq1ayf//ve/TZ049cMPP5iq/wAAAHBIi92UKVPMShC6HJiuDavFf5WuCnHjjTdG4hwBAAAQAMqdFIPJEwAAwNpyJ0rX2hw4cKApcaIV1tWsWbPkiy++CO2MAQAAUGJBBzvtfu3du7dUqFBB1q1bJ3l5eWa/psgJEyaU/IwAAAAQnWD3+OOPS1ZWlkybNk3Kli3r2a/lTjToAQAAwCGzYrds2SKXXnrpGfu17/fw4cPhOi8A8KDgNABEqMWuVq1asnXr1jP26/i6Ro0aBft0AFAkXc1GSyn16NFDbrrpJvNVb9u2yg0AxCTYDR061CxuvWrVKklKSpI9e/bI7Nmz5f7775dhw4aF5aQAQGl409Vtdu3aVeiC6KQt3U+4A4ASljvRw3WSxMSJE+X48eNmX3Jysgl2jz32mNiGcidA7LpftWXOO9S56R+WKSkpsn37drOEHADYKpgsEnIdu/z8fNMle/ToUWnRooVZakyXFNPZsjYh2AGxsWzZMtPtWpzs7GzWBQZgtdxI17FT5cqVM4GuY8eOZnbsc889Jw0bNgz16QCgkL1794b1OABIBAEHO61Xl5GRIR06dDCFiRctWmT2T58+3QS6SZMmyYgRIyJ5rgASSO3atcN6HAAkgoC7Yh966CGZOnWq9OrVS7766iuzVuztt98uX3/9tTz88MNy3XXXWTnOha5YILZj7HSihK//phhjByBR5AbRFRtwHbu3335bZs6cKX379pXvv/9eWrduLSdPnpQNGzaY/2CBSKOWWWLRPxQnT55sZr/q/zEFw537/5zMzEwr/6AEgIh3xerMtPbt25vvW7ZsaWbCatcroQ7RQC2zxNS/f3+ZN2+e1K1bt9B+nQ2r+/V+AEAIXbH6V/G+ffukevXq5nalSpVk48aN1k+YoCs2fmqZef+quv+oKOoDnlY+O/BzBJDIciNR7qRUqVLSp08f01Kn3nvvPbnsssvkrLPOKnScbQVDCXbOrWWmv4taTLvgY/VY7d6jpQcAkNBj7AYNGlTo9sCBA0M/QyBAK1as8BvqlP5dkpOTY47r3r17sa187hUL6MYDANgo4GCnZU0AJ9Qy01Y+banz1Rit+7SVLz09XdLS0hh4DwCwSsgFioF4rWUWTCsfAAA2IdghrnXt2tWMi/M3+1r3p6ammuPcWLEAAJCoCHZwRC0z5R3u/NUyY8UCAECiItjBulpmobTyAQBgg4DLnSQqyp04s5aZe1as8rViAbNiAQAJXccuURHsnMtXHTttqdOuW+rYAQCcgmAXo4uJ+MOKBQAAp4tIgWLAibSrtmDhYgAAbMbkCQAAAEsQ7AAAACxBsAMAALAEwQ4AAMASTJ6A1ZgVCwBIJAQ7JFQdO12RQpcoo44dAMBGdMXCSu6VJwqGOrV7926zX+8HAMA2BDtY2f2qLXW+FlVx70tPTzfHAQBgE4IdrKPryXq31HmHu5ycHHMcAAA2IdjBOnv37g3rcQAAOAXBDtapXbt2WI8DAMApHBPsxo8fL126dJGKFStK1apVA3qMdrmNGTPGfIBXqFBBevXqJT/99FPEzxWx1bVrVzP7NSkpyef9uj81NdUcBwCATRwT7PLz8+W6666TYcOGBfyYp556Sp5//nnJysqSVatWyVlnnSW9e/eWEydORPRcEVulS5c2JU2Ud7hz387MzDTHAQBgE8cEu3HjxsmIESOkVatWAbfW6Yf3I488ImlpadK6dWuZOXOm7NmzRxYtWhTx80VsaZ26efPmSd26dQvt15Y83U8dOwCAjawtULx9+3bZt2+f6X51q1KlinTq1ElWrlwpN9xwg8/H5eXlmc0tNzc3KueL8NPwpqFeZ7/qRAntktfuV1rqAAC2sjbYaahTNWvWLLRfb7vv82XixImmdRB20BDXvXv3WJ8GAAD2d8WOHj3ajHkqatu8eXNUzykjI0OOHDni2bTeGQAAgBPEtMVu1KhRcttttxV5TKNGjUJ67lq1apmv+/fvL1TWQm+3bdvW7+OSk5PNBgAA4DQxDXbVq1c3WyQ0bNjQhLulS5d6gpyOl9PZscHMrAUAAHAKx8yK3blzp6xfv9581TU+9Xvdjh496jmmWbNmsnDhQvO9duPqeqCPP/64vPvuu/Ldd9/JrbfeKnXq1JF+/frF8J0AAAAk+OQJLTT82muveW63a9fOfM3OzvYMjt+yZYsZF+f24IMPyrFjx+SOO+6Qw4cPy9///ndZvHixlC9fPgbvAAAAILKSXFrwDX5p962WSdHAWLlyZa4UAACI2yzimK5YAAAAFI1gBwAAYAmCHQAAgCUIdgAAAJYg2AEAAFiCYAcAAGAJgh0AAIAlCHYAAACWINgBAABYgmAHAABgCYIdAACAJQh2AAAAliDYAQAAWIJgBwAAYAmCHQAAgCUIdgAAAJYg2AEAAFiCYAcAAGAJgh0AAIAlCHYAAACWINgBAABYgmAHAABgCYIdAACAJQh2AAAAliDYAQAAWIJgBwAAYAmCHQAAgCUIdgAAAJYg2AEAAFiCYAcAAGAJgh0AAIAlCHYAAACWINgBAABYgmAHAABgCYIdAACAJQh2AAAAliDYAQAAWIJgBwAAYAmCHQAAgCUIdgAAAJYg2AEAAFiCYAcAAGAJgh0AAIAlHBPsxo8fL126dJGKFStK1apVA3rMbbfdJklJSYW2K6+8MuLnCgAAEAtlxCHy8/Pluuuuk86dO8urr74a8OM0yE2fPt1zOzk5OUJnCAAAEFuOCXbjxo0zX2fMmBHU4zTI1apVK0JnBQAAED8c0xUbqmXLlkmNGjWkadOmMmzYMDl06FCRx+fl5Ulubm6hDQAAwAmsDnbaDTtz5kxZunSpPPnkk7J8+XLp06ePnDp1yu9jJk6cKFWqVPFsqampUT1nAAAARwa70aNHnzG5wXvbvHlzyM9/ww03SN++faVVq1bSr18/ef/992X16tWmFc+fjIwMOXLkiGfLyckJ+fUBAAASZozdqFGjzMzVojRq1Chsr6fPVa1aNdm6dav07NnT75g8JlgAAAAnimmwq169utmiZdeuXWaMXe3ataP2mgAAANHimDF2O3fulPXr15uvOkZOv9ft6NGjnmOaNWsmCxcuNN/r/gceeEC+/vpr2bFjhxlnl5aWJk2aNJHevXvH8J0AAAAkeLmTMWPGyGuvvea53a5dO/M1Oztbunfvbr7fsmWLGRenSpcuLRs3bjSPOXz4sNSpU0euuOIKeeyxx+hqBQAAVkpyuVyuWJ9EPNNyJzo7VgNj5cqVY306AAAgweQGkUUc0xULAACAohHsAAAALEGwAwAAsATBDgAAwBIEOwAAAEsQ7AAAACxBsAMAALAEwQ4AAMASBDsAAABLEOwAAAAsQbADAACwBMEOAADAEgQ7AAAASxDsAAAALEGwAwAAsATBDgAAwBIEOwAAAEsQ7AAAACxBsAMAALAEwQ4AAMASBDsAAABLEOwAAAAsQbADAACwBMEOAADAEgQ7AAAAS5SJ9QkAgNOcOnVKVqxYIXv37pXatWtL165dpXTp0rE+LQAg2AFAMBYsWCDDhw+XXbt2efalpKTI5MmTpX///lxMADFFVywABBHqBgwYUCjUqd27d5v9ej8AxBLBDgAC7H7VljqXy3XGfe596enp5jgAiBWCHQAEQMfUebfUeYe7nJwccxwAxArBDgACoBMlwnkcAEQCwQ4AAqCzX8N5HABEAsEOAAKgJU109mtSUpLP+3V/amqqOQ4AYoVgBwAB0Dp1WtJEeYc79+3MzEzq2QGIKYIdAARI69TNmzdP6tatW2i/tuTpfurYAYi1JJevufvwyM3NlSpVqsiRI0ekcuXKXBkArDwBIG6zCEuKAUAI3bLdu3fnugGIO3TFAgAAWIJgBwAAYAmCHQAAgCUIdgAAAJYg2AEAAFiCYAcAAGAJRwS7HTt2yODBg6Vhw4ZSoUIFady4sYwdO1by8/OLfNyJEyfk7rvvlvPOO0/OPvtsufbaa2X//v1RO28AAIBockSw27x5s5w+fVqmTp0qP/zwg0yaNEmysrLk4YcfLvJxI0aMkPfee0/efvttWb58uezZs4fK8AAAwFqOXXni6aeflpdeekm2bdvm836tzly9enWZM2eODBgwwBMQmzdvLitXrpSLL744oNdh5QkAABBLwWQRR7TY+aJv7txzz/V7/9q1a+Wvv/6SXr16efY1a9ZM6tWrZ4IdAACAbRy5pNjWrVvlf//3f+WZZ57xe8y+ffukXLlyUrVq1UL7a9asae7zJy8vz2wFUzIAAIATxDTYjR49Wp588skij9m0aZNpaXPbvXu3XHnllXLdddfJ0KFDw35OEydOlHHjxp2xn4AHAABiwZ1BAhk9F9MxdgcOHJBDhw4VeUyjRo1My5vSyQ+68LaOj5sxY4aUKuW/J/mzzz6Tnj17yu+//16o1a5+/fqSnp5uJlYE0mKnQbJFixYhvDsAAIDwycnJkZSUFDsmT2jA6tGjh7Rv315ef/11KV26dJHHuydPzJ0715Q5UVu2bDGtf8FMntDZuBooK1WqJElJSRJvCT41NdX8oIsbTAmut9Pw+831thm/31zvYGhU++OPP6ROnTpFNmo5ZoydhjptqdPWNh1Xpy19brVq1fIcoy10M2fOlI4dO5rZI1r7buTIkWaShQafe++9Vzp37hxwqFN6AYtLx7Gm741gx/W2Fb/fXG+b8fvN9Q6U5ppAOCLYLVmyxEyY0M07ZLkbHHUGrLbIHT9+3HOf1rvTYKYtdtq92rt3b3nxxRejfv4AAADR4JiuWJyJGnvRxfXmetuM32+ut81yg6gD53SOrWMHkeTkZLO0mn5F5HG9o4vrzfW2Gb/fXO9IocUOAADAErTYAQAAWIJgBwAAYAmCHQAAgCUIdpYYP368dOnSRSpWrHjG+rgouSlTpkiDBg2kfPny0qlTJ/nmm2+4rBHy+eefyzXXXGMKcWpR8EWLFnGtI0iXUbzoootMEfYaNWpIv379TOkoRMZLL70krVu39tSv09qqH330EZc7Cp544gnzf4quPmUzgp0l8vPzzfq5w4YNi/WpWOfNN980ha51BvK6deukTZs2pibir7/+GutTs9KxY8fMNdYwjchbvny53H333fL111+bmqFaE/SKK64wPweEn9Zi1YCxdu1aWbNmjVx22WWSlpYmP/zwA5c7glavXi1Tp041odp2zIq1jK6hq3+NHD58ONanYg1todMWjRdeeMGzzJwu5aYrmYwePTrWp2c1/et64cKFphUJ0aEr+2jLnQa+Sy+9lMseBbo60tNPP21WS0L4HT16VC688EKzQMHjjz8ubdu2lczMTGsvNS12QDEtofqXda9evf7/P5pSpcxtXXMYsI0WcHWHDUTWqVOn5I033jCto9oli8i4++675eqrry70/7jNHLGkGBArBw8eNP/51qxZs9B+vb158+aYnRcQCdoarS3+l1xyibRs2ZKLHCHfffedCXInTpyQs88+27RKt2jRgusdAW+88YYZQqNdsYmCFrs4pt182hVV1Ea4ABDOlo3vv//efBgicpo2bSrr16+XVatWmXHRgwYNkh9//JFLHmY5OTkyfPhwmT17tpn4lihosYtjo0aNkttuu63IYxo1ahS180lE1apVk9KlS8v+/fsL7dfbtWrVitl5AeF2zz33yPvvv29mJesAf0ROuXLlpEmTJub79u3bm9akyZMnm8H9CJ+1a9eaSW46vs5Ne2D0d1zHTOfl5Zn/321DsItj1atXNxti+x+w/se7dOlSzwB+7a7S2/pBCDidy+UyE4G0O3DZsmXSsGHDWJ9SwtH/UzRkILx69uxpur0Luv3226VZs2by0EMPWRnqFMHOEjt37pTffvvNfNW/SLSZX+lfhTqGA6HTUifaVdKhQwfp2LGjmU2lg531PwhEZgbb1q1bPbe3b99ufp91MH+9evW45BHofp0zZ4688847ppbdvn37zP4qVapIhQoVuN5hlpGRIX369DG/y3/88Ye59hqoP/74Y651mFWqVOmMsaJnnXWWnHfeeVaPISXYWWLMmDHy2muveW63a9fOfM3Ozpbu3bvH8Myc7/rrrzclIPQa64eeTpVfvHjxGRMqEB5a26tHjx6FgrXScK3lfBD+grnK+/+J6dOnFzsUBMHTrsFbb71V9u7da8Kz1lXTUHf55ZdzOREW1LEDAACwBLNiAQAALEGwAwAAsATBDgAAwBIEOwAAAEsQ7AAAACxBsAMAALAEwQ4AAMASBDsASHCLFi2St956S5xGVyR55plnzJJcAP4PwQ5AVOgqBu71dt0rHaSnp0f96uvyTUlJSXL48OGIvcaOHTvMa7iX9oulzZs3y8UXXyzly5c3q6b40rlzZ/nv//5vs1JNOOgKIVWrVpVIa9WqlSxfvlwef/zxiL8W4BQEOyDBw5YGEN3KlStn1hZ+9NFH5eTJkxF/7QULFshjjz0WN2HMVmPHjjXrY27ZskWWLl3q8xhdHu/999+Xe+65xyx1FY5l+P79739LpOki7m+++aZ89NFH8umnn0b89QAnYK1YIMFdeeWVZl3QvLw8+fDDD82i8GXLljWLlXvLz883ATAczj333LA8D4r2888/y9VXXy3169cv8rimTZvKDz/8UOLL+ddff0mFChXMFg0VK1aUlStXRuW1ACegxQ5IcMnJyVKrVi3zwT9s2DDp1auXvPvuu4W6T8ePHy916tQxH/4qJydH/vM//9N0t2lAS0tLM92PbqdOnZKRI0ea+8877zx58MEHxeVyFXpd765YDZYPPfSQpKammnPS1sNXX33VPG+PHj3MMeecc45puXMvTq9jqyZOnCgNGzY0QaJNmzYyb968Qq+jYfX888839+vzFDxPX2666SbT4uQdVqpVqyYzZ840txcvXix///vfPe/vP/7jP0yACqZrUse16Xsp6J133pELL7zQdJs2atRIxo0bV2Trqb5/bWFNSUkx10y7WvXc3PT5165da47R7//5z38W+d79vcZTTz1lfh76GvXq1TO/DwW7nLXVrFu3bua8Z8+efcb71dfVc/vXv/5lHn/22WfLXXfdZX5P9Ln1969GjRqe53XTFtohQ4ZI9erVpXLlynLZZZfJhg0bgn4PQCIh2AEoRAOQtsy5afedduMtWbLEdNdpyOndu7dUqlRJVqxYIV9++aX5oNaWP/fjnn32WfPhrh/kX3zxhfz222+ycOHCIq/0rbfeKnPnzpXnn39eNm3aJFOnTjXPq0Fv/vz55hg9D+0qnDx5srmtoU7DVlZWlmltGjFihAwcONCMu3IH0P79+8s111xjxrtpSBg9enSR53HzzTfLe++9J0ePHvXs+/jjj+X48ePyj3/8w9w+duyYCa5r1qwx16dUqVLmvpIM4tdrqddg+PDh8uOPP5r3r9fQO+wUpNdBr7VOINi4caP5ufTt21d++uknc79eqwsuuEBGjRplvr///vuDPi9tuX3iiSfkf/7nf8x5zZkzx3TdFqTXVM9bf256Dr5o8NUuUw2e+nPW0K4tibt27TI/ryeffFIeeeQRWbVqlecx1113nfz666/mcRpQNfT27NnT/D4B8MMFIGENGjTIlZaWZr4/ffq0a8mSJa7k5GTX/fff77m/Zs2arry8PM9jZs2a5WratKk53k3vr1Chguvjjz82t2vXru166qmnPPf/9ddfrpSUFM9rqW7durmGDx9uvt+yZYs255nX9yU7O9vc//vvv3v2nThxwlWxYkXXV199VejYwYMHu2688UbzfUZGhqtFixaF7n/ooYfOeK6C9FyrVavmmjlzpmefPt/111/v9zoeOHDAPOd3331nbm/fvt3c/vbbb83t6dOnu6pUqVLoMQsXLjTHuPXs2dM1YcKEQsfotdZr6U+dOnVc48ePL7Tvoosuct11112e223atHGNHTvWFYrc3Fzz+zBt2jSf97vfZ2ZmZqH93u9XX19/Vvp8br1793Y1aNDAderUKc8+/b2aOHGi+X7FihWuypUrm59zQY0bN3ZNnTo1pPcDJALG2AEJTlvhtGVMW+K0xUm7Igt22enMw4Lj6rQrbOvWrabFrqATJ06YVpkjR46Y1qFOnTp57itTpox06NDhjO5YN21N04Hw2p0XKD0HbUW7/PLLC+3XVsN27dqZ77UFqeB5uGeAFkXPVbuZtUvxlltuMa1z2kX6xhtveI7RFrExY8aY1qWDBw96Wup27twpLVu2lFDoddXWz4ItdNpVqddV36eOJSsoNzdX9uzZI5dcckmh/Xo7XN2Vev20i1xbyYqiP9viNGjQoNDvjLb66c9cWzsL7tMWOqXvQVtNtau7oD///LPIbm8g0RHsgASn485eeuklE950HJ0Gm4J0RmVB+mHbvn17E3y86VioUIQy0N7dVfrBBx9I3bp1C92nY8FKQrtjNWRqyNAuaD0/7Wp2065dHZM4bdo0c8002GmgK9iFXZCGF+9Qq0Ha+/3omDrtOvamY9diIdCfi/fviC86IacgHZvna587JOv1qF27tpkR7S0apVQApyLYAQlOP5R1YHygdJyTDpbXwe46oN0X/UDW1qxLL73U3NYJAO4xUr5oq6B+oOtYK5284c3dYqgtWG4tWrQwAU5byfy19DVv3twzEcTt66+/LvY9dunSxYztc5fS0LFe7hBy6NAhM9ZPQ13Xrl3NPh1HWBQNvH/88Ydp/XOHIO8ad3pt9HkD/VnotddQqa18Bd+/3u7YsaOEw9/+9jcT7nQcoY5PjCa9Hvv27TN/aGhrH4DAEOwABN2a9fTTT5uZsO4Zmb/88oupS6ezX/W2DqTXAfcaDJo1aybPPfdckTXo9IN70KBB8l//9V9m8oTObtXn1BYz7RbV1jFtzdFu46uuusqEDe3W08kAOmFCQ6HOUtVuYA02Gnr0+e68804zueCBBx4wwUTDpU5ICIR2SeukDK3HVrBwr87M1e7Bl19+2QRYDZbFTcjQ7mDtSn344YflvvvuM6HX+zy0a1dn1+qs0QEDBphWPu2O/P777/0W4NX3pXXqGjdubGadatkaDYy+WlNDoS2FOlNZf64arrWb98CBA2aiyuDBgyWSNOBrt7nOytaZszqzWbuetYVWJ6oE0v0LJCJmxQIIigaUzz//3AQQ7TbUVjH9kNexYO4WPJ2FqePTNFzph7OGMPeMUn+0O1gDjZbB0DA4dOhQ08KltKtVuyk1QOk4LC2kq7TAsc7W1Nmxeh7aXaof/Fr+ROk56oxaLS2iYVGD2oQJEwIOsDoLVF+74Dg2DVw63k5Dona/arDUoFsULQnz+uuvm9Ir2jqps0K9S4/obFINrp988olcdNFFZrWISZMmFVl/TkOizs7V663PqzNOtYVSA3W46PXV59fgqddYS8G4x8FFkgZ5vV7a6nv77bebYHfDDTeYwO89KxfA/5ekMygK3AYAAIBD0WIHAABgCYIdAACAJQh2AAAAliDYAQAAWIJgBwAAYAmCHQAAgCUIdgAAAJYg2AEAAFiCYAcAAGAJgh0AAIAlCHYAAACWINgBAACIHf4fpAWHhIxF4ckAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "yhat = np.dot(X, estr.theta)\n", "\n", "plt.plot(yhat, y - yhat, 'o', color='k')\n", "plt.xlabel(\"Predicted value of `crime`\")\n", "plt.ylabel(\"Residual for `crime`\")\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "id": "c47b0edd-5ac5-4eba-9a43-240a5af3d367", "metadata": {}, "source": [ "From this plot, we can see there are a few potential outliers. The problem with outliers is that they can have substantial influence on our results. The estimating equation is actually helpful for seeing why this is the case. For our linear regression model, we can the following stack of estimating functions\n", "$$ E[\\psi(O_i; \\theta)] = E\n", "\\begin{bmatrix} \n", " (Y_i - \\hat{Y}_i) \\\\\n", " (Y_i - \\hat{Y}_i) P_i \\\\\n", " (Y_i - \\hat{Y}_i) S_i \\\\\n", "\\end{bmatrix}\n", "= 0\n", "$$\n", "where $Y$ is the crime rate, $P$ is poverty, $S$ the proportion of single parents, and $\\hat{Y}_i = \\theta_0 + \\theta_1 P_i + \\theta_2 S_i$ is the predicted value of the crime rate from the model. Let's focus on the intercept to simplify our discussion. To solve this estimating equation, we want to find the values of $\\theta$ where\n", "$$ E[Y_i - \\hat{Y}_i] = 0 $$\n", "or we want to find where the mean of the residuals is zero. So, if there is a very large value of $Y$ (relative to the other observations) it can substantially influence the estimate of the final results. This view of the residuals (and outliers influence) helps to build intuition behind robust regression\n", "\n", "## Robust Regression\n", "\n", "The methods considered here all operate by limiting the influence of the residuals. Specifically, we specify a function $f$ that takes the residuals and returns values that are more 'well behaved'. To see how this works, let's plot how the residuals vary under different choices of $f$. Starting with linear regression, $f$ is simply the identity function, so let's plot that as a referent" ] }, { "cell_type": "code", "execution_count": 9, "id": "d4ce1bb6-49b2-4052-9932-3dff89b210e2", "metadata": {}, "outputs": [], "source": [ "resid = np.linspace(-3, 3, 100)" ] }, { "cell_type": "code", "execution_count": 10, "id": "e8f55aed-a5b6-48de-89c5-74a18835068b", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=[5, 5])\n", "plt.plot(resid, resid, '-', label='None')\n", "plt.legend()\n", "plt.xlabel(\"Residual\")\n", "plt.ylabel(\"Processed Residual\")\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "id": "8e5a05f4-55cd-4b5d-8bd7-19e51642908f", "metadata": {}, "source": [ "One of the first proposed robust function was by Huber, hence its name. The Huber robust function caps the maximum contribution to the estimating equations at a maximum for each observation. So, the contributions to the estimating function are capped at a user-set level `k`. Let's plot this function along with the identity function from before" ] }, { "cell_type": "code", "execution_count": 11, "id": "d222dd4a-ab32-4364-a94e-ae81e4f9abfd", "metadata": {}, "outputs": [], "source": [ "resid_h = robust_loss_functions(resid, loss='huber', k=1)" ] }, { "cell_type": "code", "execution_count": 12, "id": "eb9d2b43-d7a9-4dab-a974-aa4868a83820", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=[5, 5])\n", "plt.plot(resid, resid, '-', label='None')\n", "plt.plot(resid, resid_h, '-', label='None')\n", "plt.legend()\n", "plt.xlabel(\"Residual\")\n", "plt.ylabel(\"Processed Residual\")\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "id": "b2845e95-a7f3-4f26-b0f9-77f61035ce0d", "metadata": {}, "source": [ "So how much any observation can shift the solution is limited. There are many other ways to constrain the contributions to the loss function. Those implemented in `delicatessen` are shown in the following plot" ] }, { "cell_type": "code", "execution_count": 13, "id": "227b693b-3600-4ccb-ad46-301b7e74cf6c", "metadata": {}, "outputs": [], "source": [ "resid_a = robust_loss_functions(resid, loss='andrew', k=1)\n", "resid_t = robust_loss_functions(resid, loss='tukey', k=1)\n", "resid_f = robust_loss_functions(resid, loss='fair', k=1)\n", "resid_c = robust_loss_functions(resid, loss='cauchy', k=1)\n", "resid_u = robust_loss_functions(resid, loss='ullah', k=1)\n", "resid_w = robust_loss_functions(resid, loss='welsch', k=1)\n", "resid_hmpl = robust_loss_functions(resid, loss='hampel', k=2, a=0.667, b=1.333)" ] }, { "cell_type": "code", "execution_count": 14, "id": "dacd8c89-18cd-4f5f-9ba5-72e6e7e2360c", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=[5, 5])\n", "plt.plot(resid, resid, '-', label='None')\n", "plt.plot(resid, resid_h, '-', label='Huber')\n", "plt.plot(resid, resid_f, '-', label='Fair')\n", "plt.plot(resid, resid_c, '-', label='Cauchy')\n", "plt.plot(resid, resid_a, '-', label='Andrew')\n", "plt.plot(resid, resid_t, '-', label='Tukey')\n", "plt.plot(resid, resid_u, '-', label='Ullah')\n", "plt.plot(resid, resid_w, '-', label='Welsch')\n", "plt.plot(resid, resid_hmpl, '-', label='Hampel')\n", "plt.legend()\n", "plt.xlabel(\"Residual\")\n", "plt.xlim([-2, 2])\n", "plt.ylabel(\"Processed Residual\")\n", "plt.ylim([-2, 2])\n", "plt.tight_layout()" ] }, { "cell_type": "markdown", "id": "eed7921b-1213-4533-a881-b7677a67b205", "metadata": {}, "source": [ "So how contributions are constrained varies quite a bit between methods, with some placing a cap and others further shrinking the contributions of outliers to zero. For the functions underlying each of these robust functions, see the reference documentation for `robust_loss_functions` in Utilities.\n", "\n", "Also note that each robust loss functions has different recommendations for the tuning parameter `k`. Here, `k` is set to be equal for display purposes\n", "\n", "## Robust Regression\n", "\n", "Now we will illustrate each of the robust regression methods with the applied example. \n", "\n", "### Huber \n", "First, let's examine Huber robust regression. While `k=1.345` is commonly recommended, I chose a value of `k=1` based on our residual plot. " ] }, { "cell_type": "code", "execution_count": 15, "id": "94c76f43-63b9-4892-987c-727ce6757cb1", "metadata": {}, "outputs": [], "source": [ "def psi_huber(theta):\n", " return ee_robust_regression(theta, X=X, y=y, model='linear', \n", " loss='huber', k=1)" ] }, { "cell_type": "code", "execution_count": 16, "id": "667d5bb7-d184-4eb6-a09f-b1f19710d1aa", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "==============================================================\n", " Estimation Method: M-estimator\n", "--------------------------------------------------------------\n", "No. Observations: 51 | No. Parameters: 3\n", "Solving algorithm: lm | Max Iterations: 5000\n", "Solving tolerance: 1e-09 | Allow P-Inverse: 1\n", "Derivative Method: approx | Deriv Approx: 1e-09\n", "Small N Correction: None | Distribution: Z-stat\n", "==============================================================\n", " Theta StdErr Z-score LCL UCL P-value S-value \n", "--------------------------------------------------------------\n", " -4.67 0.53 -8.76 -5.71 -3.62 0.00 58.84 \n", " 0.02 0.02 0.96 -0.02 0.06 0.34 1.58 \n", " 0.39 0.05 7.73 0.29 0.49 0.00 46.42 \n", "==============================================================\n" ] } ], "source": [ "estr = MEstimator(psi_huber, init=[0, 0, 0])\n", "estr.estimate()\n", "estr.print_results()" ] }, { "cell_type": "markdown", "id": "9130aaf0-0664-4d07-b249-48a05f43f8a3", "metadata": {}, "source": [ "These results are broadly similar to linear regression. However, the intercept is slightly different and the standard errors are slightly smaller. \n", "\n", "### Fair\n", "\n", "Like Huber, the Fair robust function is monotonic. Unlike the Huber, it continually tapers the contributions and doesn't have a sharp 'hinge' point. Again, the same value of `k` was selected as for Huber" ] }, { "cell_type": "code", "execution_count": 17, "id": "a0416501-c50c-4f7a-805f-ec00252f19be", "metadata": {}, "outputs": [], "source": [ "def psi_fair(theta):\n", " return ee_robust_regression(theta, X=X, y=y, model='linear', \n", " loss='fair', k=1)" ] }, { "cell_type": "code", "execution_count": 18, "id": "4b698d8a-b4b7-4a0c-86c8-df0125c9e4a1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "==============================================================\n", " Estimation Method: M-estimator\n", "--------------------------------------------------------------\n", "No. Observations: 51 | No. Parameters: 3\n", "Solving algorithm: lm | Max Iterations: 5000\n", "Solving tolerance: 1e-09 | Allow P-Inverse: 1\n", "Derivative Method: approx | Deriv Approx: 1e-09\n", "Small N Correction: None | Distribution: Z-stat\n", "==============================================================\n", " Theta StdErr Z-score LCL UCL P-value S-value \n", "--------------------------------------------------------------\n", " -4.56 0.77 -5.89 -6.08 -3.04 0.00 27.95 \n", " 0.02 0.02 0.86 -0.02 0.06 0.39 1.36 \n", " 0.38 0.07 5.19 0.24 0.52 0.00 22.18 \n", "==============================================================\n" ] } ], "source": [ "estr = MEstimator(psi_fair, init=[0, 0, 0])\n", "estr.estimate()\n", "estr.print_results()" ] }, { "cell_type": "markdown", "id": "72c60c2e-010c-41bf-837d-6b3a355bb7ad", "metadata": {}, "source": [ "These results are quite similar to the others. However, the variance for the intercept is noticeably larger than the other methods considered thus far.\n", "\n", "### Cauchy\n", "\n", "As a transition to the next general category of robust functions, let's consider the Cauchy robust function. As shown in the plot, after a certain point the Cauchy function begins to reduce the influence of outliers. However, these are not shrunk to zero. Here, we are going to set `k=1` again. This choice has less clear of a motivation that the previous. To see how outliers are changed, see the previous plot" ] }, { "cell_type": "code", "execution_count": 19, "id": "69a525c6-c071-49f2-ad8e-74b509544033", "metadata": {}, "outputs": [], "source": [ "def psi_cauchy(theta):\n", " return ee_robust_regression(theta, X=X, y=y, model='linear', \n", " loss='cauchy', k=1)" ] }, { "cell_type": "code", "execution_count": 20, "id": "e6925f09-400b-4304-aa25-acf95460fd5c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "==============================================================\n", " Estimation Method: M-estimator\n", "--------------------------------------------------------------\n", "No. Observations: 51 | No. Parameters: 3\n", "Solving algorithm: lm | Max Iterations: 5000\n", "Solving tolerance: 1e-09 | Allow P-Inverse: 1\n", "Derivative Method: approx | Deriv Approx: 1e-09\n", "Small N Correction: None | Distribution: Z-stat\n", "==============================================================\n", " Theta StdErr Z-score LCL UCL P-value S-value \n", "--------------------------------------------------------------\n", " -4.67 0.95 -4.92 -6.54 -2.81 0.00 20.12 \n", " 0.02 0.02 1.00 -0.02 0.06 0.32 1.65 \n", " 0.39 0.09 4.32 0.21 0.56 0.00 15.96 \n", "==============================================================\n" ] } ], "source": [ "estr = MEstimator(psi_cauchy, init=[0, 0, 0])\n", "estr.estimate()\n", "estr.print_results()" ] }, { "cell_type": "markdown", "id": "f005db74-2deb-4a31-b483-71afafe4682d", "metadata": {}, "source": [ "These results are again similar but we see an increase in the standard error.\n", "\n", "### Andrew's Sine\n", "\n", "Next, is Andrew's Sine, which allows for the same maximum influence as for `k` as Huber. However, it varies smoothly and decreases outlier's impact to zero at high levels. Again, `k=1` is chosen here" ] }, { "cell_type": "code", "execution_count": 21, "id": "3549edb2-1eaf-4933-8905-e0cb9a83b1e9", "metadata": {}, "outputs": [], "source": [ "def psi_sine(theta):\n", " return ee_robust_regression(theta, X=X, y=y, model='linear', \n", " loss='andrew', k=1)" ] }, { "cell_type": "code", "execution_count": 22, "id": "4d429d3e-c891-4169-99b4-95fed5337c9b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "==============================================================\n", " Estimation Method: M-estimator\n", "--------------------------------------------------------------\n", "No. Observations: 51 | No. Parameters: 3\n", "Solving algorithm: lm | Max Iterations: 5000\n", "Solving tolerance: 1e-09 | Allow P-Inverse: 1\n", "Derivative Method: approx | Deriv Approx: 1e-09\n", "Small N Correction: None | Distribution: Z-stat\n", "==============================================================\n", " Theta StdErr Z-score LCL UCL P-value S-value \n", "--------------------------------------------------------------\n", " -2.32 0.41 -5.67 -3.13 -1.52 0.00 26.05 \n", " 0.02 0.02 0.80 -0.02 0.06 0.42 1.24 \n", " 0.18 0.05 3.61 0.08 0.28 0.00 11.68 \n", "==============================================================\n" ] } ], "source": [ "estr = MEstimator(psi_sine, init=[0, 0, 0])\n", "estr.estimate()\n", "estr.print_results()" ] }, { "cell_type": "markdown", "id": "5aae6413-0ad2-4514-8bb7-e2aac270844b", "metadata": {}, "source": [ "Here, we see a change in our coefficients. The coefficient for single-parents is fairly different. As a result, the intercept also shifts around a bit. This is the first method we've seen so far that led to a change in the coefficients\n", "\n", "### Welsch\n", "\n", "Next, consider the Welsch robust function. This function has a similar overall shape to Andrew's Sine but it's steepness and values change when set to the same `k`. Here, `k=1` is again chosen for convenience." ] }, { "cell_type": "code", "execution_count": 23, "id": "cc9e9af1-774a-42fc-9283-5b8d3ab41cff", "metadata": {}, "outputs": [], "source": [ "def psi_welsch(theta):\n", " return ee_robust_regression(theta, X=X, y=y, model='linear', \n", " loss='welsch', k=1)" ] }, { "cell_type": "code", "execution_count": 24, "id": "b3d3c53f-6039-4a27-bb65-6abb6f8e6cef", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "==============================================================\n", " Estimation Method: M-estimator\n", "--------------------------------------------------------------\n", "No. Observations: 51 | No. Parameters: 3\n", "Solving algorithm: lm | Max Iterations: 5000\n", "Solving tolerance: 1e-09 | Allow P-Inverse: 1\n", "Derivative Method: approx | Deriv Approx: 1e-09\n", "Small N Correction: None | Distribution: Z-stat\n", "==============================================================\n", " Theta StdErr Z-score LCL UCL P-value S-value \n", "--------------------------------------------------------------\n", " -4.78 0.68 -7.07 -6.11 -3.46 0.00 39.20 \n", " 0.02 0.02 1.10 -0.02 0.07 0.27 1.89 \n", " 0.39 0.06 6.18 0.27 0.52 0.00 30.51 \n", "==============================================================\n" ] } ], "source": [ "estr = MEstimator(psi_welsch, init=[0, 0, 0])\n", "estr.estimate()\n", "estr.print_results()" ] }, { "cell_type": "markdown", "id": "85c6d85d-18c4-480b-a856-ed074e565a43", "metadata": {}, "source": [ "These results are similar to the others\n", "\n", "### Ullah\n", "\n", "Next is the Ullah robust loss function. It again shares a similar shape to the previous two functions. " ] }, { "cell_type": "code", "execution_count": 25, "id": "da561bd1-d4e2-48d7-9562-a8e3f1cf099c", "metadata": {}, "outputs": [], "source": [ "def psi_ullah(theta):\n", " return ee_robust_regression(theta, X=X, y=y, model='linear', \n", " loss='ullah', k=1)" ] }, { "cell_type": "code", "execution_count": 26, "id": "87d76876-16a8-498d-8a23-e5339db873b9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "==============================================================\n", " Estimation Method: M-estimator\n", "--------------------------------------------------------------\n", "No. Observations: 51 | No. Parameters: 3\n", "Solving algorithm: lm | Max Iterations: 5000\n", "Solving tolerance: 1e-09 | Allow P-Inverse: 1\n", "Derivative Method: approx | Deriv Approx: 1e-09\n", "Small N Correction: None | Distribution: Z-stat\n", "==============================================================\n", " Theta StdErr Z-score LCL UCL P-value S-value \n", "--------------------------------------------------------------\n", " -4.11 0.87 -4.72 -5.82 -2.40 0.00 18.69 \n", " 0.02 0.02 1.14 -0.02 0.06 0.26 1.97 \n", " 0.33 0.09 3.70 0.16 0.51 0.00 12.18 \n", "==============================================================\n" ] } ], "source": [ "estr = MEstimator(psi_ullah, init=[0, 0, 0])\n", "estr.estimate()\n", "estr.print_results()" ] }, { "cell_type": "markdown", "id": "ca489dc0-e157-4933-8eaa-7008580f36ce", "metadata": {}, "source": [ "Results are fairly similar to many of the other methods\n", "\n", "### Tukey's Biweight\n", "\n", "Next, we consider Tukey's biweight robust function. As shown in the previous plot, this function substantially reduces the influence of observations when set to the same value of `k` as other robust functions. When running this example, small values of `k` produce massive standard errors. Further, this model was quite sensitive to the intial starting values (not shown). These suggest some instability from the double square in the function. Here, `k=5` since this limited the extreme behavior" ] }, { "cell_type": "code", "execution_count": 27, "id": "e862cd26-332e-4d6c-b6e7-ba7d0541e8a3", "metadata": {}, "outputs": [], "source": [ "def psi_tukey(theta):\n", " return ee_robust_regression(theta, X=X, y=y, model='linear', \n", " loss='tukey', k=5)" ] }, { "cell_type": "code", "execution_count": 28, "id": "d066a171-d369-4df4-9413-b9b5fa9a92de", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "==============================================================\n", " Estimation Method: M-estimator\n", "--------------------------------------------------------------\n", "No. Observations: 51 | No. Parameters: 3\n", "Solving algorithm: lm | Max Iterations: 5000\n", "Solving tolerance: 1e-09 | Allow P-Inverse: 1\n", "Derivative Method: approx | Deriv Approx: 1e-09\n", "Small N Correction: None | Distribution: Z-stat\n", "==============================================================\n", " Theta StdErr Z-score LCL UCL P-value S-value \n", "--------------------------------------------------------------\n", " -4.55 0.65 -7.03 -5.82 -3.28 0.00 38.79 \n", " 0.02 0.02 0.76 -0.03 0.06 0.45 1.16 \n", " 0.38 0.06 6.44 0.26 0.50 0.00 32.92 \n", "==============================================================\n" ] } ], "source": [ "estr = MEstimator(psi_tukey, init=[0, 0, 0])\n", "estr.estimate()\n", "estr.print_results()" ] }, { "cell_type": "markdown", "id": "01dfcfcc-be6f-4dd3-9d09-e59af6c39f0f", "metadata": {}, "source": [ "After this bit of tuning, the results are quite similar to the other approaches.\n", "\n", "### Hampel\n", "\n", "The final robust function considered is the Hampel robust function. Like the most recent robust functions considered, it decreases contributions to estimation beyond a certain point. Unlike the previous, this function has straight lines for the contributions. Therefore, it mimics the Huber robust function until a set point. Then it decreases that function down to zero linearly. \n", "\n", "Unlike the previous functions, the Hampel robust loss function takes 3 parameters. Here, `k` is the point that the influence of observations goes down to zero, `lower` sets the first hinge, or plateau, and `upper` sets the upper limit on the influence of observations" ] }, { "cell_type": "code", "execution_count": 29, "id": "3fc8c97b-9720-449c-9a86-b46c9ec85593", "metadata": {}, "outputs": [], "source": [ "def psi_hampel(theta):\n", " return ee_robust_regression(theta, X=X, y=y, model='linear', \n", " loss='hampel', k=2, lower=1/3, upper=4/3)" ] }, { "cell_type": "code", "execution_count": 30, "id": "edfb8a96-b06b-41a3-a7d5-e6ee9ddee44a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "==============================================================\n", " Estimation Method: M-estimator\n", "--------------------------------------------------------------\n", "No. Observations: 51 | No. Parameters: 3\n", "Solving algorithm: lm | Max Iterations: 5000\n", "Solving tolerance: 1e-09 | Allow P-Inverse: 1\n", "Derivative Method: approx | Deriv Approx: 1e-09\n", "Small N Correction: None | Distribution: Z-stat\n", "==============================================================\n", " Theta StdErr Z-score LCL UCL P-value S-value \n", "--------------------------------------------------------------\n", " -3.61 0.97 -3.72 -5.50 -1.71 0.00 12.31 \n", " 0.02 0.02 1.02 -0.02 0.07 0.31 1.70 \n", " 0.28 0.11 2.58 0.07 0.50 0.01 6.67 \n", "==============================================================\n" ] } ], "source": [ "estr = MEstimator(psi_hampel, init=[0, 0, 0])\n", "estr.estimate()\n", "estr.print_results()" ] }, { "cell_type": "markdown", "id": "38e71f1c-5372-4420-8d9a-320974c30977", "metadata": {}, "source": [ "Here, results for single parent lie between Huber and Andrew's Sine. \n", "\n", "This completes the illustration of robust linear regression using `delicatessen`. The `robust_loss_functions` can be used to compute these quantities so users are able to construct their own robust estimating functions." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.13.7" } }, "nbformat": 4, "nbformat_minor": 5 }