{
"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",
"
-1.289334
\n",
"
False
\n",
"
-3.324194
\n",
"
\n",
"
\n",
"
1
\n",
"
-1.100803
\n",
"
False
\n",
"
-2.035903
\n",
"
\n",
"
\n",
"
2
\n",
"
-3.564829
\n",
"
False
\n",
"
-5.986921
\n",
"
\n",
"
\n",
"
3
\n",
"
-2.036167
\n",
"
False
\n",
"
-2.869478
\n",
"
\n",
"
\n",
"
4
\n",
"
-2.781469
\n",
"
False
\n",
"
-6.127631
\n",
"
\n",
"
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
...
\n",
"
\n",
"
\n",
"
995
\n",
"
-1.178597
\n",
"
True
\n",
"
2.965997
\n",
"
\n",
"
\n",
"
996
\n",
"
0.223498
\n",
"
True
\n",
"
4.161892
\n",
"
\n",
"
\n",
"
997
\n",
"
-2.582064
\n",
"
False
\n",
"
-3.472824
\n",
"
\n",
"
\n",
"
998
\n",
"
-1.998788
\n",
"
False
\n",
"
-0.725005
\n",
"
\n",
"
\n",
"
999
\n",
"
-0.789288
\n",
"
False
\n",
"
-2.080137
\n",
"
\n",
" \n",
"
\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": [
"