{
"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",
"
W0
\n",
"
v0
\n",
"
y
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
0.230046
\n",
"
False
\n",
"
0.328777
\n",
"
\n",
"
\n",
"
1
\n",
"
-0.625509
\n",
"
True
\n",
"
3.794958
\n",
"
\n",
"
\n",
"
2
\n",
"
-2.600417
\n",
"
False
\n",
"
-5.214096
\n",
"
\n",
"
\n",
"
3
\n",
"
0.146942
\n",
"
False
\n",
"
1.361876
\n",
"
\n",
"
\n",
"
4
\n",
"
-0.919551
\n",
"
False
\n",
"
-2.228864
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
995
\n",
"
-0.063647
\n",
"
False
\n",
"
0.117779
\n",
"
\n",
"
\n",
"
996
\n",
"
-1.962547
\n",
"
False
\n",
"
-4.034488
\n",
"
\n",
"
\n",
"
997
\n",
"
-0.089728
\n",
"
True
\n",
"
5.780041
\n",
"
\n",
"
\n",
"
998
\n",
"
-0.334302
\n",
"
True
\n",
"
3.872871
\n",
"
\n",
"
\n",
"
999
\n",
"
-2.410448
\n",
"
False
\n",
"
-4.524930
\n",
"
\n",
" \n",
"
\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": "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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",
"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": [
"