{ "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
0-1.289334False-3.324194
1-1.100803False-2.035903
2-3.564829False-5.986921
3-2.036167False-2.869478
4-2.781469False-6.127631
............
995-1.178597True2.965997
9960.223498True4.161892
997-2.582064False-3.472824
998-1.998788False-0.725005
999-0.789288False-2.080137
\n", "

1000 rows × 3 columns

\n", "
" ], "text/plain": [ " W0 v0 y\n", "0 -1.289334 False -3.324194\n", "1 -1.100803 False -2.035903\n", "2 -3.564829 False -5.986921\n", "3 -2.036167 False -2.869478\n", "4 -2.781469 False -6.127631\n", ".. ... ... ...\n", "995 -1.178597 True 2.965997\n", "996 0.223498 True 4.161892\n", "997 -2.582064 False -3.472824\n", "998 -1.998788 False -0.725005\n", "999 -0.789288 False -2.080137\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", "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.causal_identifier:Frontdoor 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],\n", " proceed_when_unidentifiable=True).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", "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.causal_identifier:Frontdoor 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": "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\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", "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.causal_identifier:Frontdoor 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", "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.causal_identifier:Frontdoor 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.782669False-0.7921790.8252871.211700
1-1.386957False-2.5410740.9439111.059422
2-1.704419False-3.9223810.9704181.030484
3-0.814005False-0.3137020.8345841.198202
40.029784False-0.3076680.4611822.168343
..................
995-0.587235False-0.0861990.7579901.319279
996-0.518178False-0.6734280.7303691.369171
997-0.285695False-2.3567260.6242681.601876
998-1.146594False-4.0068780.9103351.098497
999-1.636781False-4.6984110.9660511.035142
\n", "

1000 rows × 5 columns

\n", "
" ], "text/plain": [ " W0 v0 y propensity_score weight\n", "0 -0.782669 False -0.792179 0.825287 1.211700\n", "1 -1.386957 False -2.541074 0.943911 1.059422\n", "2 -1.704419 False -3.922381 0.970418 1.030484\n", "3 -0.814005 False -0.313702 0.834584 1.198202\n", "4 0.029784 False -0.307668 0.461182 2.168343\n", ".. ... ... ... ... ...\n", "995 -0.587235 False -0.086199 0.757990 1.319279\n", "996 -0.518178 False -0.673428 0.730369 1.369171\n", "997 -0.285695 False -2.356726 0.624268 1.601876\n", "998 -1.146594 False -4.006878 0.910335 1.098497\n", "999 -1.636781 False -4.698411 0.966051 1.035142\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-2.094548True1.0998020.01324575.499593
1-1.584775True1.9962530.03772426.508238
2-2.287651True-0.4545710.008865112.808679
3-2.287651True-0.4545710.008865112.808679
4-0.427584True2.6982490.3087383.238989
..................
9951.803262True8.2499980.9798521.020562
996-0.335329True4.8260160.3515902.844225
9970.656759True8.5140540.8136331.229055
9980.946281True5.5650040.8891921.124617
9990.192547True3.4478290.6219411.607870
\n", "

1000 rows × 5 columns

\n", "
" ], "text/plain": [ " W0 v0 y propensity_score weight\n", "0 -2.094548 True 1.099802 0.013245 75.499593\n", "1 -1.584775 True 1.996253 0.037724 26.508238\n", "2 -2.287651 True -0.454571 0.008865 112.808679\n", "3 -2.287651 True -0.454571 0.008865 112.808679\n", "4 -0.427584 True 2.698249 0.308738 3.238989\n", ".. ... ... ... ... ...\n", "995 1.803262 True 8.249998 0.979852 1.020562\n", "996 -0.335329 True 4.826016 0.351590 2.844225\n", "997 0.656759 True 8.514054 0.813633 1.229055\n", "998 0.946281 True 5.565004 0.889192 1.124617\n", "999 0.192547 True 3.447829 0.621941 1.607870\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 4.869733164425347$" ], "text/plain": [ "4.869733164425347" ] }, "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.18841744756332976$" ], "text/plain": [ "0.18841744756332976" ] }, "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.926
Model: OLS Adj. R-squared (uncentered): 0.926
Method: Least Squares F-statistic: 6276.
Date: Sat, 05 Dec 2020 Prob (F-statistic): 0.00
Time: 18:02:18 Log-Likelihood: -1436.6
No. Observations: 1000 AIC: 2877.
Df Residuals: 998 BIC: 2887.
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 1.8467 0.022 82.505 0.000 1.803 1.891
x2 5.0277 0.067 74.507 0.000 4.895 5.160
\n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "\n", " \n", "\n", "
Omnibus: 0.268 Durbin-Watson: 1.984
Prob(Omnibus): 0.874 Jarque-Bera (JB): 0.291
Skew: 0.040 Prob(JB): 0.864
Kurtosis: 2.973 Cond. No. 3.02


Notes:
[1] R² is computed without centering (uncentered) since the model does not contain a constant.
[2] 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.926\n", "Model: OLS Adj. R-squared (uncentered): 0.926\n", "Method: Least Squares F-statistic: 6276.\n", "Date: Sat, 05 Dec 2020 Prob (F-statistic): 0.00\n", "Time: 18:02:18 Log-Likelihood: -1436.6\n", "No. Observations: 1000 AIC: 2877.\n", "Df Residuals: 998 BIC: 2887.\n", "Df Model: 2 \n", "Covariance Type: nonrobust \n", "==============================================================================\n", " coef std err t P>|t| [0.025 0.975]\n", "------------------------------------------------------------------------------\n", "x1 1.8467 0.022 82.505 0.000 1.803 1.891\n", "x2 5.0277 0.067 74.507 0.000 4.895 5.160\n", "==============================================================================\n", "Omnibus: 0.268 Durbin-Watson: 1.984\n", "Prob(Omnibus): 0.874 Jarque-Bera (JB): 0.291\n", "Skew: 0.040 Prob(JB): 0.864\n", "Kurtosis: 2.973 Cond. No. 3.02\n", "==============================================================================\n", "\n", "Notes:\n", "[1] R² is computed without centering (uncentered) since the model does not contain a constant.\n", "[2] 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.8.5" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "sideBar": true, "skip_h1_title": true, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }