Skip to content

Instantly share code, notes, and snippets.

@daniel-m-campos
Last active April 13, 2020 04:12
Show Gist options
  • Save daniel-m-campos/0449dfb3c298a05355f65504fb7780f2 to your computer and use it in GitHub Desktop.
Save daniel-m-campos/0449dfb3c298a05355f65504fb7780f2 to your computer and use it in GitHub Desktop.
Re-implementation of examples from "Hernán MA, Robins JM (2020). Causal Inference: What If. Boca Raton: Chapman & Hall/CRC."
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Causal Inference\n",
"The following replicates the five casual effect estimates in chapters 12-16 of *Causal Inference: What If*:\n",
"1. IP weighting and marginal structual models\n",
"1. Standardization and the parametric g-formula\n",
"1. G-Estimation of structual nested models\n",
"1. Outcome regression and propensity scores\n",
"1. Instrumental variable estimation\n",
"\n",
"References:\n",
"* source: https://www.hsph.harvard.edu/miguel-hernan/causal-inference-book/\n",
"* book: Hernán MA, Robins JM (2020). Causal Inference: What If. Boca Raton: Chapman & Hall/CRC.\n",
"* code: https://github.com/jrfiedler/causal_inference_python_code/"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import io\n",
"from zipfile import ZipFile\n",
"from typing import List\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pandas as pd\n",
"import requests\n",
"import statsmodels.api as sm\n",
"\n",
"pd.options.display.max_columns = None"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Download NHEFS data"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"link = \"https://cdn1.sph.harvard.edu/wp-content/uploads/sites/1268/2017/01/nhefs_excel.zip\"\n",
"\n",
"restriction_cols = [\n",
" 'sex', 'age', 'race', 'wt82', 'ht', 'school', 'alcoholpy', 'smokeintensity'\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING *** OLE2 inconsistency: SSCS size is 0 but SSAT size is non-zero\n"
]
}
],
"source": [
"with requests.get(link) as resp:\n",
" with ZipFile(io.BytesIO(requests.get(link).content)) as zipfile:\n",
" with zipfile.open(zipfile.namelist().pop()) as file:\n",
" df_all = pd.read_excel(file.read())\n",
"\n",
"del resp, zipfile, file\n",
"\n",
"df_all = (df_all\n",
" .assign(university=(df_all.education == 5).astype('int'))\n",
" .assign(inactive=(df_all.active == 2).astype('int'))\n",
" .assign(no_exercise=(df_all.exercise == 2).astype('int'))\n",
" .assign(censored=df_all.wt82.isnull().astype('int'))\n",
" )\n",
"\n",
"df = df_all.dropna(subset=restriction_cols)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Data Overview"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"Int64Index: 1566 entries, 0 to 1628\n",
"Data columns (total 68 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 active 1566 non-null int64 \n",
" 1 age 1566 non-null int64 \n",
" 2 alcoholfreq 1566 non-null int64 \n",
" 3 alcoholhowmuch 1169 non-null float64\n",
" 4 alcoholpy 1566 non-null int64 \n",
" 5 alcoholtype 1566 non-null int64 \n",
" 6 allergies 1566 non-null int64 \n",
" 7 asthma 1566 non-null int64 \n",
" 8 birthcontrol 1566 non-null int64 \n",
" 9 birthplace 1476 non-null float64\n",
" 10 boweltrouble 1566 non-null int64 \n",
" 11 bronch 1566 non-null int64 \n",
" 12 censored 1566 non-null int64 \n",
" 13 cholesterol 1550 non-null float64\n",
" 14 chroniccough 1566 non-null int64 \n",
" 15 colitis 1566 non-null int64 \n",
" 16 dadth 295 non-null float64\n",
" 17 dbp 1533 non-null float64\n",
" 18 death 1566 non-null int64 \n",
" 19 diabetes 1566 non-null int64 \n",
" 20 education 1566 non-null int64 \n",
" 21 exercise 1566 non-null int64 \n",
" 22 hayfever 1566 non-null int64 \n",
" 23 hbp 1566 non-null int64 \n",
" 24 hbpmed 1566 non-null int64 \n",
" 25 headache 1566 non-null int64 \n",
" 26 hepatitis 1566 non-null int64 \n",
" 27 hf 1566 non-null int64 \n",
" 28 hightax82 1476 non-null float64\n",
" 29 ht 1566 non-null float64\n",
" 30 inactive 1566 non-null int64 \n",
" 31 income 1507 non-null float64\n",
" 32 infection 1566 non-null int64 \n",
" 33 lackpep 1566 non-null int64 \n",
" 34 marital 1566 non-null int64 \n",
" 35 modth 295 non-null float64\n",
" 36 nerves 1566 non-null int64 \n",
" 37 nervousbreak 1566 non-null int64 \n",
" 38 no_exercise 1566 non-null int64 \n",
" 39 otherpain 1566 non-null int64 \n",
" 40 pepticulcer 1566 non-null int64 \n",
" 41 pica 1566 non-null int64 \n",
" 42 polio 1566 non-null int64 \n",
" 43 pregnancies 700 non-null float64\n",
" 44 price71 1476 non-null float64\n",
" 45 price71_82 1476 non-null float64\n",
" 46 price82 1476 non-null float64\n",
" 47 qsmk 1566 non-null int64 \n",
" 48 race 1566 non-null int64 \n",
" 49 sbp 1537 non-null float64\n",
" 50 school 1566 non-null int64 \n",
" 51 seqn 1566 non-null int64 \n",
" 52 sex 1566 non-null int64 \n",
" 53 smkintensity82_71 1566 non-null int64 \n",
" 54 smokeintensity 1566 non-null int64 \n",
" 55 smokeyrs 1566 non-null int64 \n",
" 56 tax71 1476 non-null float64\n",
" 57 tax71_82 1476 non-null float64\n",
" 58 tax82 1476 non-null float64\n",
" 59 tb 1566 non-null int64 \n",
" 60 tumor 1566 non-null int64 \n",
" 61 university 1566 non-null int64 \n",
" 62 weakheart 1566 non-null int64 \n",
" 63 wt71 1566 non-null float64\n",
" 64 wt82 1566 non-null float64\n",
" 65 wt82_71 1566 non-null float64\n",
" 66 wtloss 1566 non-null int64 \n",
" 67 yrdth 291 non-null float64\n",
"dtypes: float64(21), int64(47)\n",
"memory usage: 844.2 KB\n"
]
}
],
"source": [
"df[sorted(df.columns)].info()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\" >\n",
"</style><table id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980\" ><thead> <tr> <th class=\"index_name level0\" >qsmk</th> <th class=\"col_heading level0 col0\" >1</th> <th class=\"col_heading level0 col1\" >0</th> </tr></thead><tbody>\n",
" <tr>\n",
" <th id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980level0_row0\" class=\"row_heading level0 row0\" >Age, years</th>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row0_col0\" class=\"data row0 col0\" >46.2</td>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row0_col1\" class=\"data row0 col1\" >42.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980level0_row1\" class=\"row_heading level0 row1\" >Men, %</th>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row1_col0\" class=\"data row1 col0\" >54.6</td>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row1_col1\" class=\"data row1 col1\" >46.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980level0_row2\" class=\"row_heading level0 row2\" >White, %</th>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row2_col0\" class=\"data row2 col0\" >91.1</td>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row2_col1\" class=\"data row2 col1\" >85.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980level0_row3\" class=\"row_heading level0 row3\" >University education, %</th>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row3_col0\" class=\"data row3 col0\" >15.4</td>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row3_col1\" class=\"data row3 col1\" >9.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980level0_row4\" class=\"row_heading level0 row4\" >Weight, kg</th>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row4_col0\" class=\"data row4 col0\" >72.4</td>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row4_col1\" class=\"data row4 col1\" >70.3</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980level0_row5\" class=\"row_heading level0 row5\" >Cigarettes/day</th>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row5_col0\" class=\"data row5 col0\" >18.6</td>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row5_col1\" class=\"data row5 col1\" >21.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980level0_row6\" class=\"row_heading level0 row6\" >Years smoking</th>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row6_col0\" class=\"data row6 col0\" >26.0</td>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row6_col1\" class=\"data row6 col1\" >24.1</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980level0_row7\" class=\"row_heading level0 row7\" >Little or no exercise, %</th>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row7_col0\" class=\"data row7 col0\" >40.7</td>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row7_col1\" class=\"data row7 col1\" >37.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980level0_row8\" class=\"row_heading level0 row8\" >Inactive daily life, %</th>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row8_col0\" class=\"data row8 col0\" >11.2</td>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row8_col1\" class=\"data row8 col1\" >8.9</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980level0_row9\" class=\"row_heading level0 row9\" >Weight gain, kg</th>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row9_col0\" class=\"data row9 col0\" >4.5</td>\n",
" <td id=\"T_e0ae1cb8_7d3c_11ea_a2e8_820f2129e980row9_col1\" class=\"data row9 col1\" >2.0</td>\n",
" </tr>\n",
" </tbody></table>"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x1a18ef9240>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"summaries = {\n",
" 'age': 'mean',\n",
" 'sex': lambda x: (100 * (x == 0)).mean(),\n",
" 'race': lambda x: (100 * (x == 0)).mean(),\n",
" 'university': lambda x: 100 * x.mean(),\n",
" 'wt71': 'mean',\n",
" 'smokeintensity': 'mean',\n",
" 'smokeyrs': 'mean',\n",
" 'no_exercise': lambda x: 100 * x.mean(),\n",
" 'inactive': lambda x: 100 * x.mean(),\n",
" 'wt82_71': 'mean'\n",
"}\n",
"renames = [\n",
" 'Age, years',\n",
" 'Men, %',\n",
" 'White, %',\n",
" 'University education, %',\n",
" 'Weight, kg',\n",
" 'Cigarettes/day',\n",
" 'Years smoking',\n",
" 'Little or no exercise, %',\n",
" 'Inactive daily life, %',\n",
" 'Weight gain, kg',\n",
" \n",
"]\n",
"renames = {k: v for k, v in zip(summaries, renames)}\n",
"assert all(k in df for k in summaries)\n",
"(df\n",
" .groupby('qsmk')\n",
" .agg(summaries)\n",
" .sort_index(ascending=False)\n",
" .rename(columns=renames)\n",
" .T\n",
" .style.format(\"{:>0.1f}\")\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## IP Weighting and Marginal Structual Models\n",
"\n",
"This uses:\n",
"\n",
"$\n",
"\\mathbb{E} [Y^a] = \\mathbb{E} [Y|A=a] = \\mathbb{E} \\left[\\frac{I(A=a)Y}{f(A|L)} \\right]\n",
"$\n",
"\n",
"by first estimating $W^a = \\frac{1}{f(A|L)}$ \n",
"\n",
"and then $\\hat{\\mathbb{E}} [Y|A=a] = \\hat\\theta_0 + \\hat\\theta_1 a $\n",
"\n",
"assuming positivity and exchangeability"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Estimate IP Weights"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"def ip_weights(df: pd.DataFrame, treatment: str, covariates: List[str], verbose=True):\n",
" \"\"\"\n",
" Estimate the f(A|L) part of IP weights from logistic regression\n",
" \n",
" \"\"\"\n",
" formula = f\"{treatment}~{'+'.join(covariates)}\"\n",
" model = sm.Logit.from_formula(formula, data=df)\n",
" result = model.fit()\n",
" \n",
" if verbose: \n",
" print(result.summary2())\n",
" \n",
" A = df[treatment].values\n",
" weights = np.zeros(len(df))\n",
" weights[A == 1] = result.predict(df[A == 1])\n",
" weights[A == 0] = (1 - result.predict(df[A == 0]))\n",
" return pd.Series(data=1/weights, name=\"IP Weights\")"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"covariates = [\n",
" 'sex', \n",
" 'race', \n",
" 'age', \n",
" 'I(age**2)', \n",
" 'C(education)', \n",
" 'smokeintensity', \n",
" 'I(smokeintensity**2)', \n",
" 'smokeyrs', \n",
" 'I(smokeyrs**2)', \n",
" 'C(exercise)', \n",
" 'C(active)', \n",
" 'wt71', \n",
" 'I(wt71**2)',\n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Optimization terminated successfully.\n",
" Current function value: 0.535408\n",
" Iterations 6\n",
" Results: Logit\n",
"======================================================================\n",
"Model: Logit Pseudo R-squared: 0.061 \n",
"Dependent Variable: qsmk AIC: 1714.8968 \n",
"Date: 2020-04-12 23:11 BIC: 1816.6661 \n",
"No. Observations: 1566 Log-Likelihood: -838.45 \n",
"Df Model: 18 LL-Null: -893.03 \n",
"Df Residuals: 1547 LLR p-value: 4.5159e-15\n",
"Converged: 1.0000 Scale: 1.0000 \n",
"No. Iterations: 6.0000 \n",
"----------------------------------------------------------------------\n",
" Coef. Std.Err. z P>|z| [0.025 0.975]\n",
"----------------------------------------------------------------------\n",
"Intercept -2.2425 1.3808 -1.6240 0.1044 -4.9489 0.4639\n",
"C(education)[T.2] -0.0288 0.1984 -0.1451 0.8847 -0.4175 0.3600\n",
"C(education)[T.3] 0.0864 0.1781 0.4853 0.6274 -0.2626 0.4355\n",
"C(education)[T.4] 0.0636 0.2732 0.2328 0.8159 -0.4719 0.5991\n",
"C(education)[T.5] 0.4760 0.2262 2.1039 0.0354 0.0326 0.9194\n",
"C(exercise)[T.1] 0.3548 0.1801 1.9699 0.0489 0.0018 0.7079\n",
"C(exercise)[T.2] 0.3957 0.1872 2.1134 0.0346 0.0287 0.7627\n",
"C(active)[T.1] 0.0319 0.1329 0.2403 0.8101 -0.2286 0.2925\n",
"C(active)[T.2] 0.1768 0.2150 0.8224 0.4109 -0.2446 0.5981\n",
"sex -0.5275 0.1540 -3.4241 0.0006 -0.8294 -0.2255\n",
"race -0.8393 0.2101 -3.9952 0.0001 -1.2510 -0.4275\n",
"age 0.1212 0.0513 2.3642 0.0181 0.0207 0.2217\n",
"I(age ** 2) -0.0008 0.0005 -1.5380 0.1240 -0.0019 0.0002\n",
"smokeintensity -0.0773 0.0152 -5.0670 0.0000 -0.1072 -0.0474\n",
"I(smokeintensity ** 2) 0.0010 0.0003 3.6472 0.0003 0.0005 0.0016\n",
"smokeyrs -0.0736 0.0278 -2.6495 0.0081 -0.1280 -0.0192\n",
"I(smokeyrs ** 2) 0.0008 0.0005 1.8224 0.0684 -0.0001 0.0018\n",
"wt71 -0.0152 0.0263 -0.5789 0.5626 -0.0668 0.0363\n",
"I(wt71 ** 2) 0.0001 0.0002 0.8285 0.4074 -0.0002 0.0005\n",
"======================================================================\n",
"\n"
]
}
],
"source": [
"weights = ip_weights(df, 'qsmk', covariates)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"assert sum(weights.isna()) == 0"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\" >\n",
"</style><table id=\"T_e0f61f7a_7d3c_11ea_b480_820f2129e980\" ><thead> <tr> <th class=\"blank level0\" ></th> <th class=\"col_heading level0 col0\" >IP Weights</th> </tr></thead><tbody>\n",
" <tr>\n",
" <th id=\"T_e0f61f7a_7d3c_11ea_b480_820f2129e980level0_row0\" class=\"row_heading level0 row0\" >count</th>\n",
" <td id=\"T_e0f61f7a_7d3c_11ea_b480_820f2129e980row0_col0\" class=\"data row0 col0\" >1566.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e0f61f7a_7d3c_11ea_b480_820f2129e980level0_row1\" class=\"row_heading level0 row1\" >mean</th>\n",
" <td id=\"T_e0f61f7a_7d3c_11ea_b480_820f2129e980row1_col0\" class=\"data row1 col0\" > 2.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e0f61f7a_7d3c_11ea_b480_820f2129e980level0_row2\" class=\"row_heading level0 row2\" >std</th>\n",
" <td id=\"T_e0f61f7a_7d3c_11ea_b480_820f2129e980row2_col0\" class=\"data row2 col0\" > 1.47</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e0f61f7a_7d3c_11ea_b480_820f2129e980level0_row3\" class=\"row_heading level0 row3\" >min</th>\n",
" <td id=\"T_e0f61f7a_7d3c_11ea_b480_820f2129e980row3_col0\" class=\"data row3 col0\" > 1.05</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e0f61f7a_7d3c_11ea_b480_820f2129e980level0_row4\" class=\"row_heading level0 row4\" >25%</th>\n",
" <td id=\"T_e0f61f7a_7d3c_11ea_b480_820f2129e980row4_col0\" class=\"data row4 col0\" > 1.23</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e0f61f7a_7d3c_11ea_b480_820f2129e980level0_row5\" class=\"row_heading level0 row5\" >50%</th>\n",
" <td id=\"T_e0f61f7a_7d3c_11ea_b480_820f2129e980row5_col0\" class=\"data row5 col0\" > 1.37</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e0f61f7a_7d3c_11ea_b480_820f2129e980level0_row6\" class=\"row_heading level0 row6\" >75%</th>\n",
" <td id=\"T_e0f61f7a_7d3c_11ea_b480_820f2129e980row6_col0\" class=\"data row6 col0\" > 1.99</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e0f61f7a_7d3c_11ea_b480_820f2129e980level0_row7\" class=\"row_heading level0 row7\" >max</th>\n",
" <td id=\"T_e0f61f7a_7d3c_11ea_b480_820f2129e980row7_col0\" class=\"data row7 col0\" >16.70</td>\n",
" </tr>\n",
" </tbody></table>"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x1157e76d8>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"weights.to_frame().describe().style.format(\"{:>5.2f}\")"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"_, ax = plt.subplots(figsize=(8, 6))\n",
"ax.hist(weights, bins=20)\n",
"ax.grid();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Estimate Marginal Structural Model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Using WLS "
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Results: Weighted least squares\n",
"===================================================================\n",
"Model: WLS Adj. R-squared: 0.043 \n",
"Dependent Variable: wt82_71 AIC: 11230.8385\n",
"Date: 2020-04-12 23:11 BIC: 11241.5511\n",
"No. Observations: 1566 Log-Likelihood: -5613.4 \n",
"Df Model: 1 F-statistic: 71.14 \n",
"Df Residuals: 1564 Prob (F-statistic): 7.47e-17 \n",
"R-squared: 0.044 Scale: 130.05 \n",
"---------------------------------------------------------------------\n",
" Coef. Std.Err. t P>|t| [0.025 0.975]\n",
"---------------------------------------------------------------------\n",
"Intercept 1.7800 0.2882 6.1754 0.0000 1.2146 2.3454\n",
"qsmk 3.4405 0.4079 8.4342 0.0000 2.6404 4.2407\n",
"-------------------------------------------------------------------\n",
"Omnibus: 209.380 Durbin-Watson: 2.071 \n",
"Prob(Omnibus): 0.000 Jarque-Bera (JB): 1901.746\n",
"Skew: 0.281 Prob(JB): 0.000 \n",
"Kurtosis: 8.369 Condition No.: 3 \n",
"===================================================================\n",
"\n"
]
}
],
"source": [
"wls = sm.WLS.from_formula(\n",
" \"wt82_71 ~ qsmk\",\n",
" data=df,\n",
" weights=weights,\n",
").fit()\n",
"print(wls.summary2())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Using GEE"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" GEE Regression Results \n",
"===================================================================================\n",
"Dep. Variable: wt82_71 No. Observations: 1566\n",
"Model: GEE No. clusters: 1566\n",
"Method: Generalized Min. cluster size: 1\n",
" Estimating Equations Max. cluster size: 1\n",
"Family: Gaussian Mean cluster size: 1.0\n",
"Dependence structure: Independence Num. iterations: 1\n",
"Date: Sun, 12 Apr 2020 Scale: 65.147\n",
"Covariance type: robust Time: 23:11:42\n",
"==============================================================================\n",
" coef std err z P>|z| [0.025 0.975]\n",
"------------------------------------------------------------------------------\n",
"Intercept 1.7800 0.225 7.920 0.000 1.340 2.220\n",
"qsmk 3.4405 0.525 6.547 0.000 2.411 4.470\n",
"==============================================================================\n",
"Skew: 0.1107 Kurtosis: 3.7412\n",
"Centered skew: 0.0000 Centered kurtosis: -3.0000\n",
"==============================================================================\n"
]
}
],
"source": [
"gee = sm.GEE.from_formula(\n",
" \"wt82_71 ~ qsmk\",\n",
" groups=\"seqn\",\n",
" data=df,\n",
" weights=weights\n",
").fit()\n",
"print(gee.summary())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Estimate Stabilize IP Weights"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"def stablized_weights(df: pd.DataFrame, ip_weights: pd.Series, treatment: str) -> pd.Series:\n",
" A = df[treatment].values\n",
" s_weights = np.zeros(len(df))\n",
" s_weights[A == 1] = A.mean() * ip_weights[A == 1]\n",
" s_weights[A == 0] = (1 - A).mean() * ip_weights[A == 0]\n",
" return pd.Series(data=s_weights, name=\"Stabilized Weights\")"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"s_weights = stablized_weights(df, weights, \"qsmk\")"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\" >\n",
"</style><table id=\"T_e1783b7e_7d3c_11ea_86e6_820f2129e980\" ><thead> <tr> <th class=\"blank level0\" ></th> <th class=\"col_heading level0 col0\" >Stabilized Weights</th> </tr></thead><tbody>\n",
" <tr>\n",
" <th id=\"T_e1783b7e_7d3c_11ea_86e6_820f2129e980level0_row0\" class=\"row_heading level0 row0\" >count</th>\n",
" <td id=\"T_e1783b7e_7d3c_11ea_86e6_820f2129e980row0_col0\" class=\"data row0 col0\" >1566.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e1783b7e_7d3c_11ea_86e6_820f2129e980level0_row1\" class=\"row_heading level0 row1\" >mean</th>\n",
" <td id=\"T_e1783b7e_7d3c_11ea_86e6_820f2129e980row1_col0\" class=\"data row1 col0\" > 1.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e1783b7e_7d3c_11ea_86e6_820f2129e980level0_row2\" class=\"row_heading level0 row2\" >std</th>\n",
" <td id=\"T_e1783b7e_7d3c_11ea_86e6_820f2129e980row2_col0\" class=\"data row2 col0\" > 0.29</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e1783b7e_7d3c_11ea_86e6_820f2129e980level0_row3\" class=\"row_heading level0 row3\" >min</th>\n",
" <td id=\"T_e1783b7e_7d3c_11ea_86e6_820f2129e980row3_col0\" class=\"data row3 col0\" > 0.33</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e1783b7e_7d3c_11ea_86e6_820f2129e980level0_row4\" class=\"row_heading level0 row4\" >25%</th>\n",
" <td id=\"T_e1783b7e_7d3c_11ea_86e6_820f2129e980row4_col0\" class=\"data row4 col0\" > 0.87</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e1783b7e_7d3c_11ea_86e6_820f2129e980level0_row5\" class=\"row_heading level0 row5\" >50%</th>\n",
" <td id=\"T_e1783b7e_7d3c_11ea_86e6_820f2129e980row5_col0\" class=\"data row5 col0\" > 0.95</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e1783b7e_7d3c_11ea_86e6_820f2129e980level0_row6\" class=\"row_heading level0 row6\" >75%</th>\n",
" <td id=\"T_e1783b7e_7d3c_11ea_86e6_820f2129e980row6_col0\" class=\"data row6 col0\" > 1.08</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e1783b7e_7d3c_11ea_86e6_820f2129e980level0_row7\" class=\"row_heading level0 row7\" >max</th>\n",
" <td id=\"T_e1783b7e_7d3c_11ea_86e6_820f2129e980row7_col0\" class=\"data row7 col0\" > 4.30</td>\n",
" </tr>\n",
" </tbody></table>"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x1a18bfa390>"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s_weights.to_frame().describe().style.format(\"{:>5.2f}\")"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"_, ax = plt.subplots(figsize=(8, 6))\n",
"ax.hist(s_weights, bins=20)\n",
"ax.grid();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Estimate Marginal Structual Model\n",
"#### Using Stablizied Weights and GEE\n",
"\n",
"Result is identical because model is saturated. In non-saturated models, stabilized weights produce narrower CIs "
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" GEE Regression Results \n",
"===================================================================================\n",
"Dep. Variable: wt82_71 No. Observations: 1566\n",
"Model: GEE No. clusters: 1566\n",
"Method: Generalized Min. cluster size: 1\n",
" Estimating Equations Max. cluster size: 1\n",
"Family: Gaussian Mean cluster size: 1.0\n",
"Dependence structure: Independence Num. iterations: 1\n",
"Date: Sun, 12 Apr 2020 Scale: 60.796\n",
"Covariance type: robust Time: 23:11:42\n",
"==============================================================================\n",
" coef std err z P>|z| [0.025 0.975]\n",
"------------------------------------------------------------------------------\n",
"Intercept 1.7800 0.225 7.920 0.000 1.340 2.220\n",
"qsmk 3.4405 0.525 6.547 0.000 2.411 4.470\n",
"==============================================================================\n",
"Skew: 0.1107 Kurtosis: 3.7412\n",
"Centered skew: 0.0000 Centered kurtosis: -3.0000\n",
"==============================================================================\n"
]
}
],
"source": [
"gee2 = sm.GEE.from_formula(\n",
" \"wt82_71 ~ qsmk\",\n",
" groups=\"seqn\",\n",
" data=df,\n",
" weights=s_weights\n",
").fit()\n",
"print(gee2.summary())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Effect Modification and marginal structual models\n",
"Suppose we believe that weight gain $Y$ depends on sex $V$. The marginal structural model can be modified to:\n",
"$$\n",
"\\mathbb{E} [Y^a | V] = \\beta_0 + \\beta_1 V + a(\\beta_2 + \\beta_3 V)\n",
"$$\n",
"\n",
"\\* Technically should be called *marginal* since it is conditioned on $V$, but that is the convention."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Estimate the Stabilized Weights"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"def modifier_weights(df: pd.DataFrame, treatment: str, covariates, modifiers: List[str], verbose=False):\n",
" \"\"\"\n",
" Estimate the stabilized weights f(A|V)/f(A|L) for modifiers V\n",
" \"\"\"\n",
" weights = ip_weights(df, treatment, covariates, verbose)\n",
" numerators = 1 / ip_weights(df, treatment, modifiers, verbose)\n",
" return pd.Series(data=numerators * weights, name=\"Modifier Stablized Weights\")"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Optimization terminated successfully.\n",
" Current function value: 0.535408\n",
" Iterations 6\n",
"Optimization terminated successfully.\n",
" Current function value: 0.567819\n",
" Iterations 5\n"
]
}
],
"source": [
"av_weights = modifier_weights(df, 'qsmk', covariates, ['sex'])"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\" >\n",
"</style><table id=\"T_e1fa2314_7d3c_11ea_bc87_820f2129e980\" ><thead> <tr> <th class=\"blank level0\" ></th> <th class=\"col_heading level0 col0\" >Modifier Stablized Weights</th> </tr></thead><tbody>\n",
" <tr>\n",
" <th id=\"T_e1fa2314_7d3c_11ea_bc87_820f2129e980level0_row0\" class=\"row_heading level0 row0\" >count</th>\n",
" <td id=\"T_e1fa2314_7d3c_11ea_bc87_820f2129e980row0_col0\" class=\"data row0 col0\" >1566.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e1fa2314_7d3c_11ea_bc87_820f2129e980level0_row1\" class=\"row_heading level0 row1\" >mean</th>\n",
" <td id=\"T_e1fa2314_7d3c_11ea_bc87_820f2129e980row1_col0\" class=\"data row1 col0\" > 1.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e1fa2314_7d3c_11ea_bc87_820f2129e980level0_row2\" class=\"row_heading level0 row2\" >std</th>\n",
" <td id=\"T_e1fa2314_7d3c_11ea_bc87_820f2129e980row2_col0\" class=\"data row2 col0\" > 0.27</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e1fa2314_7d3c_11ea_bc87_820f2129e980level0_row3\" class=\"row_heading level0 row3\" >min</th>\n",
" <td id=\"T_e1fa2314_7d3c_11ea_bc87_820f2129e980row3_col0\" class=\"data row3 col0\" > 0.29</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e1fa2314_7d3c_11ea_bc87_820f2129e980level0_row4\" class=\"row_heading level0 row4\" >25%</th>\n",
" <td id=\"T_e1fa2314_7d3c_11ea_bc87_820f2129e980row4_col0\" class=\"data row4 col0\" > 0.88</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e1fa2314_7d3c_11ea_bc87_820f2129e980level0_row5\" class=\"row_heading level0 row5\" >50%</th>\n",
" <td id=\"T_e1fa2314_7d3c_11ea_bc87_820f2129e980row5_col0\" class=\"data row5 col0\" > 0.96</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e1fa2314_7d3c_11ea_bc87_820f2129e980level0_row6\" class=\"row_heading level0 row6\" >75%</th>\n",
" <td id=\"T_e1fa2314_7d3c_11ea_bc87_820f2129e980row6_col0\" class=\"data row6 col0\" > 1.08</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e1fa2314_7d3c_11ea_bc87_820f2129e980level0_row7\" class=\"row_heading level0 row7\" >max</th>\n",
" <td id=\"T_e1fa2314_7d3c_11ea_bc87_820f2129e980row7_col0\" class=\"data row7 col0\" > 3.80</td>\n",
" </tr>\n",
" </tbody></table>"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x1a18e0fa90>"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"av_weights.to_frame().describe().style.format(\"{:>5.2f}\")"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" GEE Regression Results \n",
"===================================================================================\n",
"Dep. Variable: wt82_71 No. Observations: 1566\n",
"Model: GEE No. clusters: 1566\n",
"Method: Generalized Min. cluster size: 1\n",
" Estimating Equations Max. cluster size: 1\n",
"Family: Gaussian Mean cluster size: 1.0\n",
"Dependence structure: Independence Num. iterations: 1\n",
"Date: Sun, 12 Apr 2020 Scale: 60.953\n",
"Covariance type: robust Time: 23:11:43\n",
"==============================================================================\n",
" coef std err z P>|z| [0.025 0.975]\n",
"------------------------------------------------------------------------------\n",
"Intercept 1.7844 0.310 5.759 0.000 1.177 2.392\n",
"qsmk 3.5220 0.657 5.360 0.000 2.234 4.810\n",
"sex -0.0087 0.449 -0.019 0.984 -0.888 0.871\n",
"qsmk:sex -0.1595 1.046 -0.152 0.879 -2.210 1.891\n",
"==============================================================================\n",
"Skew: 0.1114 Kurtosis: 3.7341\n",
"Centered skew: 0.0000 Centered kurtosis: -3.0000\n",
"==============================================================================\n"
]
}
],
"source": [
"gee3 = sm.GEE.from_formula(\n",
" \"wt82_71 ~ qsmk * sex\",\n",
" groups=\"seqn\",\n",
" data=df,\n",
" weights=av_weights\n",
").fit()\n",
"print(gee3.summary())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Censoring and missing data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Stabilized weights with uncensored data"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Optimization terminated successfully.\n",
" Current function value: 0.542264\n",
" Iterations 6\n"
]
}
],
"source": [
"sw_A = ip_weights(df_all, 'qsmk', covariates, verbose=False)\n",
"sw_A = stablized_weights(df_all, sw_A, 'qsmk')"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\" >\n",
"</style><table id=\"T_e253aa74_7d3c_11ea_b7fd_820f2129e980\" ><thead> <tr> <th class=\"blank level0\" ></th> <th class=\"col_heading level0 col0\" >Stabilized Weights</th> </tr></thead><tbody>\n",
" <tr>\n",
" <th id=\"T_e253aa74_7d3c_11ea_b7fd_820f2129e980level0_row0\" class=\"row_heading level0 row0\" >count</th>\n",
" <td id=\"T_e253aa74_7d3c_11ea_b7fd_820f2129e980row0_col0\" class=\"data row0 col0\" >1629.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e253aa74_7d3c_11ea_b7fd_820f2129e980level0_row1\" class=\"row_heading level0 row1\" >mean</th>\n",
" <td id=\"T_e253aa74_7d3c_11ea_b7fd_820f2129e980row1_col0\" class=\"data row1 col0\" > 1.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e253aa74_7d3c_11ea_b7fd_820f2129e980level0_row2\" class=\"row_heading level0 row2\" >std</th>\n",
" <td id=\"T_e253aa74_7d3c_11ea_b7fd_820f2129e980row2_col0\" class=\"data row2 col0\" > 0.28</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e253aa74_7d3c_11ea_b7fd_820f2129e980level0_row3\" class=\"row_heading level0 row3\" >min</th>\n",
" <td id=\"T_e253aa74_7d3c_11ea_b7fd_820f2129e980row3_col0\" class=\"data row3 col0\" > 0.33</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e253aa74_7d3c_11ea_b7fd_820f2129e980level0_row4\" class=\"row_heading level0 row4\" >25%</th>\n",
" <td id=\"T_e253aa74_7d3c_11ea_b7fd_820f2129e980row4_col0\" class=\"data row4 col0\" > 0.86</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e253aa74_7d3c_11ea_b7fd_820f2129e980level0_row5\" class=\"row_heading level0 row5\" >50%</th>\n",
" <td id=\"T_e253aa74_7d3c_11ea_b7fd_820f2129e980row5_col0\" class=\"data row5 col0\" > 0.95</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e253aa74_7d3c_11ea_b7fd_820f2129e980level0_row6\" class=\"row_heading level0 row6\" >75%</th>\n",
" <td id=\"T_e253aa74_7d3c_11ea_b7fd_820f2129e980row6_col0\" class=\"data row6 col0\" > 1.08</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e253aa74_7d3c_11ea_b7fd_820f2129e980level0_row7\" class=\"row_heading level0 row7\" >max</th>\n",
" <td id=\"T_e253aa74_7d3c_11ea_b7fd_820f2129e980row7_col0\" class=\"data row7 col0\" > 4.21</td>\n",
" </tr>\n",
" </tbody></table>"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x1a1aec0278>"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sw_A.to_frame().describe().style.format(\"{:>5.2f}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Censoring IP weights "
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Optimization terminated successfully.\n",
" Current function value: 0.142836\n",
" Iterations 8\n",
"Optimization terminated successfully.\n",
" Current function value: 0.161989\n",
" Iterations 7\n"
]
}
],
"source": [
"sw_C = ip_weights(df_all, 'censored', covariates + ['qsmk'], verbose=False)\n",
"sw_C /= ip_weights(df_all, 'censored', ['qsmk'], verbose=False)\n",
"sw_C[df_all.censored == 1] = 1"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\" >\n",
"</style><table id=\"T_e27e22e8_7d3c_11ea_b23a_820f2129e980\" ><thead> <tr> <th class=\"blank level0\" ></th> <th class=\"col_heading level0 col0\" >IP Weights</th> </tr></thead><tbody>\n",
" <tr>\n",
" <th id=\"T_e27e22e8_7d3c_11ea_b23a_820f2129e980level0_row0\" class=\"row_heading level0 row0\" >count</th>\n",
" <td id=\"T_e27e22e8_7d3c_11ea_b23a_820f2129e980row0_col0\" class=\"data row0 col0\" >1629.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e27e22e8_7d3c_11ea_b23a_820f2129e980level0_row1\" class=\"row_heading level0 row1\" >mean</th>\n",
" <td id=\"T_e27e22e8_7d3c_11ea_b23a_820f2129e980row1_col0\" class=\"data row1 col0\" > 1.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e27e22e8_7d3c_11ea_b23a_820f2129e980level0_row2\" class=\"row_heading level0 row2\" >std</th>\n",
" <td id=\"T_e27e22e8_7d3c_11ea_b23a_820f2129e980row2_col0\" class=\"data row2 col0\" > 0.05</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e27e22e8_7d3c_11ea_b23a_820f2129e980level0_row3\" class=\"row_heading level0 row3\" >min</th>\n",
" <td id=\"T_e27e22e8_7d3c_11ea_b23a_820f2129e980row3_col0\" class=\"data row3 col0\" > 0.94</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e27e22e8_7d3c_11ea_b23a_820f2129e980level0_row4\" class=\"row_heading level0 row4\" >25%</th>\n",
" <td id=\"T_e27e22e8_7d3c_11ea_b23a_820f2129e980row4_col0\" class=\"data row4 col0\" > 0.98</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e27e22e8_7d3c_11ea_b23a_820f2129e980level0_row5\" class=\"row_heading level0 row5\" >50%</th>\n",
" <td id=\"T_e27e22e8_7d3c_11ea_b23a_820f2129e980row5_col0\" class=\"data row5 col0\" > 0.99</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e27e22e8_7d3c_11ea_b23a_820f2129e980level0_row6\" class=\"row_heading level0 row6\" >75%</th>\n",
" <td id=\"T_e27e22e8_7d3c_11ea_b23a_820f2129e980row6_col0\" class=\"data row6 col0\" > 1.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e27e22e8_7d3c_11ea_b23a_820f2129e980level0_row7\" class=\"row_heading level0 row7\" >max</th>\n",
" <td id=\"T_e27e22e8_7d3c_11ea_b23a_820f2129e980row7_col0\" class=\"data row7 col0\" > 1.72</td>\n",
" </tr>\n",
" </tbody></table>"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x1a18f77b00>"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sw_C.to_frame().describe().style.format(\"{:>5.2f}\")"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\" >\n",
"</style><table id=\"T_e2872a34_7d3c_11ea_97c1_820f2129e980\" ><thead> <tr> <th class=\"blank level0\" ></th> <th class=\"col_heading level0 col0\" >0</th> </tr></thead><tbody>\n",
" <tr>\n",
" <th id=\"T_e2872a34_7d3c_11ea_97c1_820f2129e980level0_row0\" class=\"row_heading level0 row0\" >count</th>\n",
" <td id=\"T_e2872a34_7d3c_11ea_97c1_820f2129e980row0_col0\" class=\"data row0 col0\" >1629.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e2872a34_7d3c_11ea_97c1_820f2129e980level0_row1\" class=\"row_heading level0 row1\" >mean</th>\n",
" <td id=\"T_e2872a34_7d3c_11ea_97c1_820f2129e980row1_col0\" class=\"data row1 col0\" > 1.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e2872a34_7d3c_11ea_97c1_820f2129e980level0_row2\" class=\"row_heading level0 row2\" >std</th>\n",
" <td id=\"T_e2872a34_7d3c_11ea_97c1_820f2129e980row2_col0\" class=\"data row2 col0\" > 0.29</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e2872a34_7d3c_11ea_97c1_820f2129e980level0_row3\" class=\"row_heading level0 row3\" >min</th>\n",
" <td id=\"T_e2872a34_7d3c_11ea_97c1_820f2129e980row3_col0\" class=\"data row3 col0\" > 0.35</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e2872a34_7d3c_11ea_97c1_820f2129e980level0_row4\" class=\"row_heading level0 row4\" >25%</th>\n",
" <td id=\"T_e2872a34_7d3c_11ea_97c1_820f2129e980row4_col0\" class=\"data row4 col0\" > 0.86</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e2872a34_7d3c_11ea_97c1_820f2129e980level0_row5\" class=\"row_heading level0 row5\" >50%</th>\n",
" <td id=\"T_e2872a34_7d3c_11ea_97c1_820f2129e980row5_col0\" class=\"data row5 col0\" > 0.94</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e2872a34_7d3c_11ea_97c1_820f2129e980level0_row6\" class=\"row_heading level0 row6\" >75%</th>\n",
" <td id=\"T_e2872a34_7d3c_11ea_97c1_820f2129e980row6_col0\" class=\"data row6 col0\" > 1.07</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_e2872a34_7d3c_11ea_97c1_820f2129e980level0_row7\" class=\"row_heading level0 row7\" >max</th>\n",
" <td id=\"T_e2872a34_7d3c_11ea_97c1_820f2129e980row7_col0\" class=\"data row7 col0\" > 4.09</td>\n",
" </tr>\n",
" </tbody></table>"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x1a18bb0f98>"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sw_AC = sw_A * sw_C\n",
"sw_AC.to_frame().describe().style.format(\"{:>5.2f}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Marginal Structural Model using combined weights"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" GEE Regression Results \n",
"===================================================================================\n",
"Dep. Variable: wt82_71 No. Observations: 1566\n",
"Model: GEE No. clusters: 1566\n",
"Method: Generalized Min. cluster size: 1\n",
" Estimating Equations Max. cluster size: 1\n",
"Family: Gaussian Mean cluster size: 1.0\n",
"Dependence structure: Independence Num. iterations: 1\n",
"Date: Sun, 12 Apr 2020 Scale: 61.861\n",
"Covariance type: robust Time: 23:11:44\n",
"==============================================================================\n",
" coef std err z P>|z| [0.025 0.975]\n",
"------------------------------------------------------------------------------\n",
"Intercept 1.6620 0.233 7.141 0.000 1.206 2.118\n",
"qsmk 3.4965 0.526 6.652 0.000 2.466 4.527\n",
"==============================================================================\n",
"Skew: 0.1093 Kurtosis: 3.7375\n",
"Centered skew: 0.0000 Centered kurtosis: -3.0000\n",
"==============================================================================\n"
]
}
],
"source": [
"gee4 = sm.GEE.from_formula(\n",
" \"wt82_71 ~ qsmk\",\n",
" groups=\"seqn\",\n",
" data=df,\n",
" weights=sw_AC[df_all.censored == 0]\n",
").fit()\n",
"print(gee4.summary())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Standardization and the parametric g-formula\n",
"\n",
"This "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Estimating the mean outcome via modeling"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"wt82_71 ~ sex+race+age+I(age**2)+C(education)+smokeintensity+I(smokeintensity**2)+smokeyrs+I(smokeyrs**2)+C(exercise)+C(active)+wt71+I(wt71**2)+qsmk+qsmk:smokeintensity\n"
]
}
],
"source": [
"formula = f\"wt82_71 ~ {'+'.join(covariates+['qsmk', 'qsmk:smokeintensity'])}\"\n",
"print(formula)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Results: Ordinary least squares\n",
"=======================================================================\n",
"Model: OLS Adj. R-squared: 0.137 \n",
"Dependent Variable: wt82_71 AIC: 10699.1529\n",
"Date: 2020-04-12 23:11 BIC: 10811.6348\n",
"No. Observations: 1566 Log-Likelihood: -5328.6 \n",
"Df Model: 20 F-statistic: 13.45 \n",
"Df Residuals: 1545 Prob (F-statistic): 1.47e-41 \n",
"R-squared: 0.148 Scale: 53.568 \n",
"-----------------------------------------------------------------------\n",
" Coef. Std.Err. t P>|t| [0.025 0.975]\n",
"-----------------------------------------------------------------------\n",
"Intercept -1.5882 4.3130 -0.3682 0.7128 -10.0482 6.8719\n",
"C(education)[T.2] 0.7904 0.6070 1.3022 0.1930 -0.4002 1.9811\n",
"C(education)[T.3] 0.5563 0.5561 1.0004 0.3173 -0.5345 1.6471\n",
"C(education)[T.4] 1.4916 0.8323 1.7922 0.0733 -0.1409 3.1241\n",
"C(education)[T.5] -0.1950 0.7414 -0.2630 0.7926 -1.6492 1.2592\n",
"C(exercise)[T.1] 0.2960 0.5352 0.5531 0.5803 -0.7537 1.3457\n",
"C(exercise)[T.2] 0.3539 0.5589 0.6333 0.5266 -0.7423 1.4501\n",
"C(active)[T.1] -0.9476 0.4099 -2.3115 0.0209 -1.7517 -0.1435\n",
"C(active)[T.2] -0.2614 0.6846 -0.3818 0.7026 -1.6041 1.0814\n",
"sex -1.4303 0.4690 -3.0499 0.0023 -2.3501 -0.5104\n",
"race 0.5601 0.5819 0.9626 0.3359 -0.5813 1.7015\n",
"age 0.3596 0.1633 2.2020 0.0278 0.0393 0.6800\n",
"I(age ** 2) -0.0061 0.0017 -3.5345 0.0004 -0.0095 -0.0027\n",
"smokeintensity 0.0491 0.0517 0.9499 0.3423 -0.0523 0.1506\n",
"I(smokeintensity ** 2) -0.0010 0.0009 -1.0561 0.2911 -0.0028 0.0008\n",
"smokeyrs 0.1344 0.0917 1.4651 0.1431 -0.0455 0.3143\n",
"I(smokeyrs ** 2) -0.0019 0.0015 -1.2090 0.2268 -0.0049 0.0012\n",
"wt71 0.0455 0.0834 0.5458 0.5853 -0.1180 0.2090\n",
"I(wt71 ** 2) -0.0010 0.0005 -1.8397 0.0660 -0.0020 0.0001\n",
"qsmk 2.5596 0.8091 3.1633 0.0016 0.9724 4.1467\n",
"qsmk:smokeintensity 0.0467 0.0351 1.3277 0.1845 -0.0223 0.1156\n",
"-----------------------------------------------------------------------\n",
"Omnibus: 201.687 Durbin-Watson: 2.008 \n",
"Prob(Omnibus): 0.000 Jarque-Bera (JB): 1022.968\n",
"Skew: 0.492 Prob(JB): 0.000 \n",
"Kurtosis: 6.835 Condition No.: 143520 \n",
"=======================================================================\n",
"* The condition number is large (1e+05). This might indicate\n",
"strong multicollinearity or other numerical problems.\n"
]
}
],
"source": [
"ols = sm.OLS.from_formula(formula,data=df).fit()\n",
"print(ols.summary2())"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1581 0.342157\n",
"dtype: float64"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ols.predict(df[df.seqn == 24770])"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\" >\n",
"</style><table id=\"T_e2f68ce4_7d3c_11ea_a14d_820f2129e980\" ><thead> <tr> <th class=\"col_heading level0 col0\" >count</th> <th class=\"col_heading level0 col1\" >mean</th> <th class=\"col_heading level0 col2\" >std</th> <th class=\"col_heading level0 col3\" >min</th> <th class=\"col_heading level0 col4\" >25%</th> <th class=\"col_heading level0 col5\" >50%</th> <th class=\"col_heading level0 col6\" >75%</th> <th class=\"col_heading level0 col7\" >max</th> </tr></thead><tbody>\n",
" <tr>\n",
" <td id=\"T_e2f68ce4_7d3c_11ea_a14d_820f2129e980row0_col0\" class=\"data row0 col0\" >1566.00</td>\n",
" <td id=\"T_e2f68ce4_7d3c_11ea_a14d_820f2129e980row0_col1\" class=\"data row0 col1\" > 2.64</td>\n",
" <td id=\"T_e2f68ce4_7d3c_11ea_a14d_820f2129e980row0_col2\" class=\"data row0 col2\" > 3.03</td>\n",
" <td id=\"T_e2f68ce4_7d3c_11ea_a14d_820f2129e980row0_col3\" class=\"data row0 col3\" >-10.88</td>\n",
" <td id=\"T_e2f68ce4_7d3c_11ea_a14d_820f2129e980row0_col4\" class=\"data row0 col4\" > 1.12</td>\n",
" <td id=\"T_e2f68ce4_7d3c_11ea_a14d_820f2129e980row0_col5\" class=\"data row0 col5\" > 3.04</td>\n",
" <td id=\"T_e2f68ce4_7d3c_11ea_a14d_820f2129e980row0_col6\" class=\"data row0 col6\" > 4.51</td>\n",
" <td id=\"T_e2f68ce4_7d3c_11ea_a14d_820f2129e980row0_col7\" class=\"data row0 col7\" > 9.88</td>\n",
" </tr>\n",
" </tbody></table>"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x1a1aea5080>"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(ols\n",
" .predict(df)\n",
" .describe()\n",
" .to_frame()\n",
" .T\n",
" .style\n",
" .hide_index()\n",
" .format(\"{:>6.2f}\")\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\" >\n",
"</style><table id=\"T_e2fefad2_7d3c_11ea_895a_820f2129e980\" ><thead> <tr> <th class=\"col_heading level0 col0\" >count</th> <th class=\"col_heading level0 col1\" >mean</th> <th class=\"col_heading level0 col2\" >std</th> <th class=\"col_heading level0 col3\" >min</th> <th class=\"col_heading level0 col4\" >25%</th> <th class=\"col_heading level0 col5\" >50%</th> <th class=\"col_heading level0 col6\" >75%</th> <th class=\"col_heading level0 col7\" >max</th> </tr></thead><tbody>\n",
" <tr>\n",
" <td id=\"T_e2fefad2_7d3c_11ea_895a_820f2129e980row0_col0\" class=\"data row0 col0\" >1566.00</td>\n",
" <td id=\"T_e2fefad2_7d3c_11ea_895a_820f2129e980row0_col1\" class=\"data row0 col1\" > 2.64</td>\n",
" <td id=\"T_e2fefad2_7d3c_11ea_895a_820f2129e980row0_col2\" class=\"data row0 col2\" > 7.88</td>\n",
" <td id=\"T_e2fefad2_7d3c_11ea_895a_820f2129e980row0_col3\" class=\"data row0 col3\" >-41.28</td>\n",
" <td id=\"T_e2fefad2_7d3c_11ea_895a_820f2129e980row0_col4\" class=\"data row0 col4\" > -1.48</td>\n",
" <td id=\"T_e2fefad2_7d3c_11ea_895a_820f2129e980row0_col5\" class=\"data row0 col5\" > 2.60</td>\n",
" <td id=\"T_e2fefad2_7d3c_11ea_895a_820f2129e980row0_col6\" class=\"data row0 col6\" > 6.69</td>\n",
" <td id=\"T_e2fefad2_7d3c_11ea_895a_820f2129e980row0_col7\" class=\"data row0 col7\" > 48.54</td>\n",
" </tr>\n",
" </tbody></table>"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x1a1ac62438>"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(df\n",
" .wt82_71\n",
" .describe()\n",
" .to_frame()\n",
" .T\n",
" .style\n",
" .hide_index()\n",
" .format(\"{:>6.2f}\")\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"_, ax = plt.subplots(figsize=(8,8))\n",
"\n",
"ax.scatter(ols.fittedvalues, df.wt82_71, alpha=0.15)\n",
"ax.plot(ols.fittedvalues, ols.fittedvalues, 'r-')\n",
"ax.set_xlabel('predicted gain')\n",
"ax.set_ylabel('actual gain')\n",
"ax.grid();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Standardizing the mean outcome to the confounder distribution\n",
"\n",
"This uses:\n",
"\n",
"$\n",
"\\mathbb{E} [Y^a] = \\mathbb{E} [Y|A=a] = \\mathbb{E} \\left[ \\mathbb{E} \\left[ Y|A,V \\right] \\right]\n",
"$\n",
"\n",
"by first estimating $\\hat{\\mathbb{E}} [Y|A, V]$\n",
"\n",
"and then averaging simulated counter-factual outcome difference\n",
"\n",
"$\n",
"\\hat{\\mathbb{E}} [Y^{a=1}-Y^{a=0}] = \\frac{1}{N} \\Sigma_i^N \\hat{\\mathbb{E}} \\left[ Y|A=1,V_i \\right] - \\hat{\\mathbb{E}} \\left[ Y|A=0,V_i \\right] \n",
"$\n",
"\n",
"assuming positivity and exchangeability"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\" >\n",
"</style><table id=\"T_e33a0e58_7d3c_11ea_933b_820f2129e980\" ><thead> <tr> <th class=\"col_heading level0 col0\" >treated</th> <th class=\"col_heading level0 col1\" >untreated</th> <th class=\"col_heading level0 col2\" >original</th> <th class=\"col_heading level0 col3\" >casual_effect</th> </tr></thead><tbody>\n",
" <tr>\n",
" <td id=\"T_e33a0e58_7d3c_11ea_933b_820f2129e980row0_col0\" class=\"data row0 col0\" >5.27</td>\n",
" <td id=\"T_e33a0e58_7d3c_11ea_933b_820f2129e980row0_col1\" class=\"data row0 col1\" >1.76</td>\n",
" <td id=\"T_e33a0e58_7d3c_11ea_933b_820f2129e980row0_col2\" class=\"data row0 col2\" >2.64</td>\n",
" <td id=\"T_e33a0e58_7d3c_11ea_933b_820f2129e980row0_col3\" class=\"data row0 col3\" >3.52</td>\n",
" </tr>\n",
" </tbody></table>"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x1a1ac8cfd0>"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"summary = (\n",
" pd.DataFrame()\n",
" .assign(treated=ols.predict(df.assign(qsmk=1)))\n",
" .assign(untreated=ols.predict(df.assign(qsmk=0)))\n",
" .assign(original=ols.fittedvalues)\n",
" .assign(casual_effect=lambda x: x.treated - x.untreated)\n",
" .mean()\n",
" .to_frame()\n",
" .T\n",
")\n",
"\n",
"(summary\n",
" .style\n",
" .hide_index()\n",
" .format(\"{:>0.2f}\")\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Use Bootstap to find"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [],
"source": [
"def create_formula(outcome: str, covariates: List[str]):\n",
" return f\"{outcome} ~ {'+'.join(covariates)}\"\n",
"\n",
"\n",
"def casual_effect(\n",
" df: pd.DataFrame, \n",
" treatment: str, \n",
" result: sm.regression.linear_model.OLSResults\n",
"):\n",
" treated = result.predict(df.assign(**{treatment: 1}))\n",
" untreated = result.predict(df.assign(**{treatment: 0}))\n",
" return (treated - untreated).mean()\n",
"\n",
"\n",
"def bootstrap(\n",
" df: pd.DataFrame,\n",
" formula: str,\n",
" treatment: str, \n",
" n: int=100\n",
"):\n",
"\n",
" boot_samples = []\n",
" for _ in range(n):\n",
" sample = df.sample(n=len(df), replace=True)\n",
" result = sm.OLS.from_formula(formula, data=sample).fit()\n",
" boot_samples.append(casual_effect(sample, treatment, result))\n",
" \n",
" return np.std(boot_samples)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [],
"source": [
"bootstrap_std = bootstrap(\n",
" df=df, \n",
" formula=create_formula('wt82_71', covariates+['qsmk', 'qsmk:smokeintensity']),\n",
" treatment='qsmk',\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\" >\n",
"</style><table id=\"T_eb67c3de_7d3c_11ea_8a39_820f2129e980\" ><thead> <tr> <th class=\"col_heading level0 col0\" >treated</th> <th class=\"col_heading level0 col1\" >untreated</th> <th class=\"col_heading level0 col2\" >original</th> <th class=\"col_heading level0 col3\" >casual_effect</th> <th class=\"col_heading level0 col4\" >lo</th> <th class=\"col_heading level0 col5\" >hi</th> </tr></thead><tbody>\n",
" <tr>\n",
" <td id=\"T_eb67c3de_7d3c_11ea_8a39_820f2129e980row0_col0\" class=\"data row0 col0\" >5.27</td>\n",
" <td id=\"T_eb67c3de_7d3c_11ea_8a39_820f2129e980row0_col1\" class=\"data row0 col1\" >1.76</td>\n",
" <td id=\"T_eb67c3de_7d3c_11ea_8a39_820f2129e980row0_col2\" class=\"data row0 col2\" >2.64</td>\n",
" <td id=\"T_eb67c3de_7d3c_11ea_8a39_820f2129e980row0_col3\" class=\"data row0 col3\" >3.52</td>\n",
" <td id=\"T_eb67c3de_7d3c_11ea_8a39_820f2129e980row0_col4\" class=\"data row0 col4\" >2.52</td>\n",
" <td id=\"T_eb67c3de_7d3c_11ea_8a39_820f2129e980row0_col5\" class=\"data row0 col5\" >4.51</td>\n",
" </tr>\n",
" </tbody></table>"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x1a18c77940>"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(summary\n",
" .assign(lo=lambda x: x.casual_effect - 1.96 * bootstrap_std)\n",
" .assign(hi=lambda x: x.casual_effect + 1.96 * bootstrap_std)\n",
" .style\n",
" .hide_index()\n",
" .format(\"{:>0.2f}\")\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment