{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Demo for the DoWhy causal API\n", "We show a simple example of adding a causal extension to any dataframe. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os, sys\n", "sys.path.append(os.path.abspath(\"../../../\"))" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import dowhy.datasets\n", "import dowhy.api\n", "\n", "import numpy as np\n", "import pandas as pd\n", "\n", "from statsmodels.api import OLS" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
W0v0y
00.230046False0.328777
1-0.625509True3.794958
2-2.600417False-5.214096
30.146942False1.361876
4-0.919551False-2.228864
............
995-0.063647False0.117779
996-1.962547False-4.034488
997-0.089728True5.780041
998-0.334302True3.872871
999-2.410448False-4.524930
\n", "

1000 rows × 3 columns

\n", "
" ], "text/plain": [ " W0 v0 y\n", "0 0.230046 False 0.328777\n", "1 -0.625509 True 3.794958\n", "2 -2.600417 False -5.214096\n", "3 0.146942 False 1.361876\n", "4 -0.919551 False -2.228864\n", ".. ... ... ...\n", "995 -0.063647 False 0.117779\n", "996 -1.962547 False -4.034488\n", "997 -0.089728 True 5.780041\n", "998 -0.334302 True 3.872871\n", "999 -2.410448 False -4.524930\n", "\n", "[1000 rows x 3 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = dowhy.datasets.linear_dataset(beta=5,\n", " num_common_causes=1,\n", " num_instruments = 0,\n", " num_samples=1000,\n", " treatment_is_binary=True)\n", "df = data['df']\n", "df['y'] = df['y'] + np.random.normal(size=len(df)) # Adding noise to data. Without noise, the variance in Y|X, Z is zero, and mcmc fails.\n", "#data['dot_graph'] = 'digraph { v ->y;X0-> v;X0-> y;}'\n", "\n", "treatment= data[\"treatment_name\"][0]\n", "outcome = data[\"outcome_name\"][0]\n", "common_cause = data[\"common_causes_names\"][0]\n", "df" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING:dowhy.causal_model:Causal Graph not provided. DoWhy will construct a graph based on data inputs.\n", "INFO:dowhy.causal_graph:If this is observed data (not from a randomized experiment), there might always be missing confounders. Adding a node named \"Unobserved Confounders\" to reflect this.\n", "INFO:dowhy.causal_model:Model to find the causal effect of treatment ['v0'] on outcome ['y']\n", "INFO:dowhy.causal_identifier:Common causes of treatment and outcome:['W0', 'U']\n", "WARNING:dowhy.causal_identifier:If this is observed data (not from a randomized experiment), there might always be missing confounders. Causal effect cannot be identified perfectly.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARN: Do you want to continue by ignoring any unobserved confounders? (use proceed_when_unidentifiable=True to disable this prompt) [y/n] y\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:dowhy.causal_identifier:Instrumental variables for treatment and outcome:[]\n", "INFO:dowhy.do_sampler:Using WeightingSampler for do sampling.\n", "INFO:dowhy.do_sampler:Caution: do samplers assume iid data.\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# data['df'] is just a regular pandas.DataFrame\n", "df.causal.do(x=treatment,\n", " variable_types={treatment: 'b', outcome: 'c', common_cause: 'c'},\n", " outcome=outcome,\n", " common_causes=[common_cause]).groupby(treatment).mean().plot(y=outcome, kind='bar')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "WARNING:dowhy.causal_model:Causal Graph not provided. DoWhy will construct a graph based on data inputs.\n", "INFO:dowhy.causal_graph:If this is observed data (not from a randomized experiment), there might always be missing confounders. Adding a node named \"Unobserved Confounders\" to reflect this.\n", "INFO:dowhy.causal_model:Model to find the causal effect of treatment ['v0'] on outcome ['y']\n", "INFO:dowhy.causal_identifier:Common causes of treatment and outcome:['W0', 'U']\n", "WARNING:dowhy.causal_identifier:If this is observed data (not from a randomized experiment), there might always be missing confounders. Causal effect cannot be identified perfectly.\n", "INFO:dowhy.causal_identifier:Continuing by ignoring these unobserved confounders because proceed_when_unidentifiable flag is True.\n", "INFO:dowhy.causal_identifier:Instrumental variables for treatment and outcome:[]\n", "INFO:dowhy.do_sampler:Using WeightingSampler for do sampling.\n", "INFO:dowhy.do_sampler:Caution: do samplers assume iid data.\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAETCAYAAAAmkv2xAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAOzklEQVR4nO3df4zkdX3H8eeLu4VrIpG4t1Z6P1gSLk2waXu4ObX+USg1/KiRkNIKCYoiucRIq6n/oCZnQ//Rf6xaiOQsBM4YoKAxZ3tqMJoof0BvOU6Uo9aTaG4vqOtBwauecty7f+ycbJfdm5nduZ27zz4fycaZ+X7uO28SfPK9z8zspKqQJJ3+zhj2AJKkwTDoktQIgy5JjTDoktQIgy5JjTDoktSI1cN64rVr19b4+Piwnl6STkuPPfbYL6pqbL5jQwv6+Pg4k5OTw3p6STotJfnJQsfccpGkRhh0SWqEQZekRgxtD12ShuXFF19kamqKI0eODHuUBa1Zs4b169czMjLS858x6JJWnKmpKc4++2zGx8dJMuxxXqGqOHToEFNTU5x//vk9/zm3XCStOEeOHGF0dPSUjDlAEkZHR/v+G4RBl7QinaoxP24x8xl0SWqEe+iNGL/lP4Y9gjSvH3/8r4Y9QleD/v/PsP6ZvUKXpGW2bds2PvWpT/3u/kc/+lE+/elPL/m8Bl2SltmNN97Ijh07ADh27Bj33Xcf119//ZLP65aLJC2z8fFxRkdHefzxx/nZz37G5s2bGR0dXfJ5DbokDcFNN93E3XffzU9/+lNuvPHGgZzTLRdJGoKrr76ar33ta+zevZvLLrtsIOf0Cl2ShuDMM8/kkksu4ZxzzmHVqlUDOadBl7TiDeNthseOHeORRx7hgQceGNg53XKRpGW2b98+LrjgAi699FI2bdo0sPN6hS5Jy+zCCy/k6aefHvh5vUKXpEYYdEkrUlUNe4QTWsx8Bl3SirNmzRoOHTp0ykb9+O9DX7NmTV9/ruseepI1wLeBszrrH6yqj81ZcxawA3gDcAh4R1X9uK9JJGmZrF+/nqmpKaanp4c9yoKOf2NRP3p5UfQ3wF9U1eEkI8DDSb5aVY/MWvNe4LmquiDJtcAngHf0NYkkLZORkZG+vgnodNF1y6VmHO7cHen8zP17ylXAPZ3bDwKX5lT/7fGS1Jie9tCTrEqyF/g58FBVPTpnyTrgAEBVHQWeB5b+m2YkST3rKehV9VJV/SmwHtiS5I8W82RJtiaZTDJ5Ku9dSdLpqK93uVTV/wDfAi6fc+ggsAEgyWrg1cy8ODr3z2+vqomqmhgbG1vcxJKkeXUNepKxJOd0bv8e8Fbgv+Ys2wnc0Ll9DfDNOlXfDyRJjerlXS7nAvckWcXMfwD+rar+PcmtwGRV7QTuBD6fZD/wLHDtSZtYkjSvrkGvqieAzfM8vm3W7SPA3wx2NElSP/ykqCQ1wqBLUiMMuiQ1wqBLUiMMuiQ1wqBLUiMMuiQ1wqBLUiMMuiQ1wqBLUiMMuiQ1wqBLUiMMuiQ1wqBLUiMMuiQ1wqBLUiMMuiQ1wqBLUiMMuiQ1wqBLUiMMuiQ1wqBLUiMMuiQ1omvQk2xI8q0k+5I8meQD86y5OMnzSfZ2fradnHElSQtZ3cOao8CHqmpPkrOBx5I8VFX75qz7TlW9bfAjSpJ60fUKvaqeqao9ndu/BJ4C1p3swSRJ/elrDz3JOLAZeHSew29O8t0kX03y+gHMJknqQy9bLgAkeRXwReCDVfXCnMN7gPOq6nCSK4EvA5vmOcdWYCvAxo0bFz20JOmVerpCTzLCTMy/UFVfmnu8ql6oqsOd27uAkSRr51m3vaomqmpibGxsiaNLkmbr5V0uAe4EnqqqTy6w5nWddSTZ0jnvoUEOKkk6sV62XN4CvBP4XpK9ncc+AmwEqKo7gGuA9yU5CvwauLaq6iTMK0laQNegV9XDQLqsuQ24bVBDSZL65ydFJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRXYOeZEOSbyXZl+TJJB+YZ02SfCbJ/iRPJLno5IwrSVrI6h7WHAU+VFV7kpwNPJbkoaraN2vNFcCmzs8bgc92/leStEy6XqFX1TNVtadz+5fAU8C6OcuuAnbUjEeAc5KcO/BpJUkL6msPPck4sBl4dM6hdcCBWfeneGX0SbI1yWSSyenp6f4mlSSdUM9BT/Iq4IvAB6vqhcU8WVVtr6qJqpoYGxtbzCkkSQvoKehJRpiJ+Req6kvzLDkIbJh1f33nMUnSMunlXS4B7gSeqqpPLrBsJ/Cuzrtd3gQ8X1XPDHBOSVIXvbzL5S3AO4HvJdnbeewjwEaAqroD2AVcCewHfgW8Z/CjSpJOpGvQq+phIF3WFPD+QQ0lSeqfnxSVpEYYdElqhEGXpEYYdElqhEGXpEYYdElqhEGXpEYYdElqhEGXpEYYdElqhEGXpEYYdElqhEGXpEYYdElqhEGXpEYYdElqhEGXpEYYdElqhEGXpEYYdElqhEGXpEYYdElqRNegJ7kryc+TfH+B4xcneT7J3s7PtsGPKUnqZnUPa+4GbgN2nGDNd6rqbQOZSJK0KF2v0Kvq28CzyzCLJGkJBrWH/uYk303y1SSvH9A5JUl96GXLpZs9wHlVdTjJlcCXgU3zLUyyFdgKsHHjxgE8tSTpuCVfoVfVC1V1uHN7FzCSZO0Ca7dX1URVTYyNjS31qSVJsyw56ElelySd21s65zy01PNKkvrTdcslyb3AxcDaJFPAx4ARgKq6A7gGeF+So8CvgWurqk7axJKkeXUNelVd1+X4bcy8rVGSNER+UlSSGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGmHQJakRBl2SGtE16EnuSvLzJN9f4HiSfCbJ/iRPJLlo8GNKkrrp5Qr9buDyExy/AtjU+dkKfHbpY0mS+tU16FX1beDZEyy5CthRMx4Bzkly7qAGlCT1ZhB76OuAA7PuT3UekyQto2V9UTTJ1iSTSSanp6eX86klqXmDCPpBYMOs++s7j71CVW2vqomqmhgbGxvAU0uSjhtE0HcC7+q82+VNwPNV9cwAzitJ6sPqbguS3AtcDKxNMgV8DBgBqKo7gF3AlcB+4FfAe07WsJKkhXUNelVd1+V4Ae8f2ESSpEXxk6KS1AiDLkmNMOiS1AiDLkmNMOiS1AiDLkmNMOiS1AiDLkmNMOiS1AiDLkmNMOiS1AiDLkmNMOiS1AiDLkmNMOiS1AiDLkmNMOiS1AiDLkmNMOiS1AiDLkmNMOiS1AiDLkmNMOiS1Iiegp7k8iQ/SLI/yS3zHH93kukkezs/Nw1+VEnSiazutiDJKuB24K3AFLA7yc6q2jdn6f1VdfNJmFGS1INertC3APur6umq+i1wH3DVyR1LktSvXoK+Djgw6/5U57G5/jrJE0keTLJhvhMl2ZpkMsnk9PT0IsaVJC1kUC+KfgUYr6o/Bh4C7plvUVVtr6qJqpoYGxsb0FNLkqC3oB8EZl9xr+889jtVdaiqftO5+6/AGwYzniSpV70EfTewKcn5Sc4ErgV2zl6Q5NxZd98OPDW4ESVJvej6LpeqOprkZuDrwCrgrqp6MsmtwGRV7QT+PsnbgaPAs8C7T+LMkqR5dA06QFXtAnbNeWzbrNsfBj482NEkSf3wk6KS1AiDLkmNMOiS1AiDLkmNMOiS1AiDLkmNMOiS1AiDLkmNMOiS1AiDLkmNMOiS1AiDLkmNMOiS1AiDLkmNMOiS1AiDLkmNMOiS1AiDLkmNMOiS1AiDLkmNMOiS1AiDLkmNMOiS1Iiegp7k8iQ/SLI/yS3zHD8ryf2d448mGR/0oJKkE+sa9CSrgNuBK4ALgeuSXDhn2XuB56rqAuCfgU8MelBJ0on1coW+BdhfVU9X1W+B+4Cr5qy5Crinc/tB4NIkGdyYkqRuVvewZh1wYNb9KeCNC62pqqNJngdGgV/MXpRkK7C1c/dwkh8sZmhpGaxlzr+/Wpz49/VBO2+hA70EfWCqajuwfTmfU1qMJJNVNTHsOaR+9LLlchDYMOv++s5j865Jshp4NXBoEANKknrTS9B3A5uSnJ/kTOBaYOecNTuBGzq3rwG+WVU1uDElSd103XLp7InfDHwdWAXcVVVPJrkVmKyqncCdwOeT7AeeZSb60unMrUGdduKFtCS1wU+KSlIjDLokNcKgS7MkOWvYM0iLZdAlIMmWJN8Dfti5/ydJ/mXIY0l9MejSjM8Ab6Pz+Ymq+i5wyVAnkvpk0KUZZ1TVT+Y89tJQJpEWaVk/+i+dwg4k2QJU5zeM/h3w30OeSeqL70OXgCSvZWbb5S87D30DuLmq/AVdOm0YdElqhFsuEpDkc8Arrm6qaus8y6VTkkGXZnxj1u01wNX8/+8BkE55brlI80hyBvBwVf3ZsGeReuXbFqX5nQ/8/rCHkPrhlosEJHmOl/fQz2Dm10DfMryJpP655aIVr/OF5ht4+Zu4jvkFLTodueWiFa8T711V9VLnx5jrtGTQpRl7k2we9hDSUrjlohUtyerO1yw+Cfwh8CPgf4Ewc/F+0VAHlPrgi6Ja6f4TuAh4+7AHkZbKoGulC0BV/WjYg0hLZdC10o0l+YeFDlbVJ5dzGGkpDLpWulXAq+hcqUunM18U1YqWZI8vfKoVvm1RK51X5mqGV+ha0ZK8pqqeHfYc0iAYdElqhFsuktQIgy5JjTDo0jyS3JDkh52fG4Y9j9QL99ClOZK8BpgEJpj5HemPAW+oqueGOpjUhR8s0oqW5OPAgaq6vXP/H4GXgIeOv/slyUPA5cC9w5pT6oVbLlrp7gf+dtb947dnf0H0FLBu2SaSFskrdK1oVfV4ktcm+QNgDHgO+DWwZriTSf3zCl2CB4BrgHcwc8V+kJmvpDtuPS9/PZ10yvJFUa14SV4PfA5YC/w58BtmXgg9/jte9jDzoqifKNUpzS0XrXhV9WSSs4GDVfUMQJJ/AnZ3ltxqzHU68ApdkhrhHrokNcKgS1IjDLokNcKgS1IjDLokNcKgS1IjDLokNcKgS1Ij/g/hAqArde3ybAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df.causal.do(x={treatment: 1}, \n", " variable_types={treatment:'b', outcome: 'c', common_cause: 'c'}, \n", " outcome=outcome,\n", " method='weighting', \n", " common_causes=[common_cause],\n", " proceed_when_unidentifiable=True).groupby(treatment).mean().plot(y=outcome, kind='bar')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:dowhy.causal_model:Model to find the causal effect of treatment ['v0'] on outcome ['y']\n", "INFO:dowhy.causal_identifier:Common causes of treatment and outcome:['W0', 'U']\n", "WARNING:dowhy.causal_identifier:If this is observed data (not from a randomized experiment), there might always be missing confounders. Causal effect cannot be identified perfectly.\n", "INFO:dowhy.causal_identifier:Continuing by ignoring these unobserved confounders because proceed_when_unidentifiable flag is True.\n", "INFO:dowhy.causal_identifier:Instrumental variables for treatment and outcome:[]\n", "INFO:dowhy.do_sampler:Using WeightingSampler for do sampling.\n", "INFO:dowhy.do_sampler:Caution: do samplers assume iid data.\n", "INFO:dowhy.causal_model:Model to find the causal effect of treatment ['v0'] on outcome ['y']\n", "INFO:dowhy.causal_identifier:Common causes of treatment and outcome:['W0', 'U']\n", "WARNING:dowhy.causal_identifier:If this is observed data (not from a randomized experiment), there might always be missing confounders. Causal effect cannot be identified perfectly.\n", "INFO:dowhy.causal_identifier:Continuing by ignoring these unobserved confounders because proceed_when_unidentifiable flag is True.\n", "INFO:dowhy.causal_identifier:Instrumental variables for treatment and outcome:[]\n", "INFO:dowhy.do_sampler:Using WeightingSampler for do sampling.\n", "INFO:dowhy.do_sampler:Caution: do samplers assume iid data.\n" ] } ], "source": [ "cdf_1 = df.causal.do(x={treatment: 1}, \n", " variable_types={treatment: 'b', outcome: 'c', common_cause: 'c'}, \n", " outcome=outcome, \n", " dot_graph=data['dot_graph'],\n", " proceed_when_unidentifiable=True)\n", "\n", "cdf_0 = df.causal.do(x={treatment: 0}, \n", " variable_types={treatment: 'b', outcome: 'c', common_cause: 'c'}, \n", " outcome=outcome, \n", " dot_graph=data['dot_graph'],\n", " proceed_when_unidentifiable=True)\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
W0v0ypropensity_scoreweight
0-0.583286False-2.4568600.5745971.740350
1-1.853274False-3.6992670.7545201.325346
2-1.530711False-4.3840060.7138241.400906
3-0.036469False-2.2695240.4866542.054847
4-1.749115False-3.3111370.7418161.348043
..................
995-1.227516False-0.8758670.6721071.487859
996-0.405553False-1.4278720.5462581.830637
9970.230046False0.3287770.4437522.253509
998-2.157752False-4.8303620.7891811.267136
999-0.453149False-2.1679280.5538841.805431
\n", "

1000 rows × 5 columns

\n", "
" ], "text/plain": [ " W0 v0 y propensity_score weight\n", "0 -0.583286 False -2.456860 0.574597 1.740350\n", "1 -1.853274 False -3.699267 0.754520 1.325346\n", "2 -1.530711 False -4.384006 0.713824 1.400906\n", "3 -0.036469 False -2.269524 0.486654 2.054847\n", "4 -1.749115 False -3.311137 0.741816 1.348043\n", ".. ... ... ... ... ...\n", "995 -1.227516 False -0.875867 0.672107 1.487859\n", "996 -0.405553 False -1.427872 0.546258 1.830637\n", "997 0.230046 False 0.328777 0.443752 2.253509\n", "998 -2.157752 False -4.830362 0.789181 1.267136\n", "999 -0.453149 False -2.167928 0.553884 1.805431\n", "\n", "[1000 rows x 5 columns]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cdf_0" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
W0v0ypropensity_scoreweight
0-0.229733True4.7547930.4820752.074366
1-0.238390True4.4876430.4806762.080404
2-2.161507True-1.7006680.2104154.752520
3-1.639879True2.1738290.2719593.677028
40.030840True4.4656550.5242241.907580
..................
995-1.688769True2.4040170.2657373.763121
996-0.910527True2.5281760.3746082.669460
997-2.838431True-0.2263730.1467046.816457
9980.429132True6.8658830.5877911.701285
999-1.509348True2.1532070.2890103.460088
\n", "

1000 rows × 5 columns

\n", "
" ], "text/plain": [ " W0 v0 y propensity_score weight\n", "0 -0.229733 True 4.754793 0.482075 2.074366\n", "1 -0.238390 True 4.487643 0.480676 2.080404\n", "2 -2.161507 True -1.700668 0.210415 4.752520\n", "3 -1.639879 True 2.173829 0.271959 3.677028\n", "4 0.030840 True 4.465655 0.524224 1.907580\n", ".. ... ... ... ... ...\n", "995 -1.688769 True 2.404017 0.265737 3.763121\n", "996 -0.910527 True 2.528176 0.374608 2.669460\n", "997 -2.838431 True -0.226373 0.146704 6.816457\n", "998 0.429132 True 6.865883 0.587791 1.701285\n", "999 -1.509348 True 2.153207 0.289010 3.460088\n", "\n", "[1000 rows x 5 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cdf_1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Comparing the estimate to Linear Regression\n", "First, estimating the effect using the causal data frame, and the 95% confidence interval." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle 5.006194579687894$" ], "text/plain": [ "5.006194579687894" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(cdf_1['y'] - cdf_0['y']).mean()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$\\displaystyle 0.2245958282589085$" ], "text/plain": [ "0.2245958282589085" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1.96*(cdf_1['y'] - cdf_0['y']).std() / np.sqrt(len(df))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Comparing to the estimate from OLS." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "
OLS Regression Results
Dep. Variable: y R-squared (uncentered): 0.938
Model: OLS Adj. R-squared (uncentered): 0.938
Method: Least Squares F-statistic: 7544.
Date: Tue, 07 Jan 2020 Prob (F-statistic): 0.00
Time: 11:54:35 Log-Likelihood: -1408.7
No. Observations: 1000 AIC: 2821.
Df Residuals: 998 BIC: 2831.
Df Model: 2
Covariance Type: nonrobust
\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "
coef std err t P>|t| [0.025 0.975]
x1 2.2679 0.025 89.049 0.000 2.218 2.318
x2 5.0091 0.050 100.297 0.000 4.911 5.107
\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "
Omnibus: 2.664 Durbin-Watson: 2.034
Prob(Omnibus): 0.264 Jarque-Bera (JB): 2.431
Skew: -0.049 Prob(JB): 0.297
Kurtosis: 2.779 Cond. No. 2.03


Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified." ], "text/plain": [ "\n", "\"\"\"\n", " OLS Regression Results \n", "=======================================================================================\n", "Dep. Variable: y R-squared (uncentered): 0.938\n", "Model: OLS Adj. R-squared (uncentered): 0.938\n", "Method: Least Squares F-statistic: 7544.\n", "Date: Tue, 07 Jan 2020 Prob (F-statistic): 0.00\n", "Time: 11:54:35 Log-Likelihood: -1408.7\n", "No. Observations: 1000 AIC: 2821.\n", "Df Residuals: 998 BIC: 2831.\n", "Df Model: 2 \n", "Covariance Type: nonrobust \n", "==============================================================================\n", " coef std err t P>|t| [0.025 0.975]\n", "------------------------------------------------------------------------------\n", "x1 2.2679 0.025 89.049 0.000 2.218 2.318\n", "x2 5.0091 0.050 100.297 0.000 4.911 5.107\n", "==============================================================================\n", "Omnibus: 2.664 Durbin-Watson: 2.034\n", "Prob(Omnibus): 0.264 Jarque-Bera (JB): 2.431\n", "Skew: -0.049 Prob(JB): 0.297\n", "Kurtosis: 2.779 Cond. No. 2.03\n", "==============================================================================\n", "\n", "Warnings:\n", "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n", "\"\"\"" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = OLS(np.asarray(df[outcome]), np.asarray(df[[common_cause, treatment]], dtype=np.float64))\n", "result = model.fit()\n", "result.summary()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6.9" } }, "nbformat": 4, "nbformat_minor": 2 }