Last active
October 10, 2019 12:29
-
-
Save steven-tey/828e84876ff8a53d1851c6a1c0af72ee to your computer and use it in GitHub Desktop.
CS146 Session 5.2 Pre-Class Work
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"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.3" | |
}, | |
"colab": { | |
"name": "CS146 Session 5.2 Pre-Class Work.ipynb", | |
"provenance": [] | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "FfdZ_rKWcqrU", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"# Pre-class work\n", | |
"Below is the data set from 6 medical trials on the effect of specific allergen immunotherapy (SIT) on eczema patients.\n", | |
"\n", | |
"| Study | TG improved | TG not improved | CG improved | CG not improved |\n", | |
"|:-------------- | --------:| ------:| ------:| ------:|\n", | |
"| Di Rienzo 2014 | 20 | 3 | 9 | 6 |\n", | |
"| Galli 1994 | 10 | 6 | 11 | 7 |\n", | |
"| Kaufman 1974 | 13 | 3 | 4 | 6 |\n", | |
"| Qin 2014 | 35 | 10 | 21 | 18 |\n", | |
"| Sanchez 2012 | 22 | 9 | 12 | 17 |\n", | |
"| Silny 2006 | 7 | 3 | 0 | 10 |\n", | |
"| **Totals** | **107** | **34** | **57** | **64** |\n", | |
"\n", | |
"* TG = Treatment group\n", | |
"* CG = Control group\n", | |
"\n", | |
"The model we used was that each trial's results were generated from a binomial distribution over the number of improved patients with a common improvement rate parameter shared between all trials.\n", | |
"\n", | |
"For the treatment group we use a subscript $t$:\n", | |
"\n", | |
"$$\\begin{align}\n", | |
"k_{ti} &\\sim \\text{Binomial}(n_{ti}, p_t) \\qquad i=1,2,\\ldots 6\\\\\n", | |
"p_t &\\sim \\text{Beta}(\\alpha=1, \\beta=1)\n", | |
"\\end{align}$$\n", | |
"\n", | |
"For the control group we use a subscript $c$:\n", | |
"\n", | |
"$$\\begin{align}\n", | |
"k_{ci} &\\sim \\text{Binomial}(n_{ci}, p_c) \\qquad i=1,2,\\ldots 6\\\\\n", | |
"p_c &\\sim \\text{Beta}(\\alpha=1, \\beta=1)\n", | |
"\\end{align}$$\n", | |
"\n", | |
"So we have the same model structure for the treatment and control groups, just with different data.\n", | |
"\n", | |
"The code below implements the Stan model for the scenario above.\n", | |
"\n", | |
"* Carefully **read through the code**, including all comments, to understand how Stan is used to represent the medical trial model.\n", | |
"* **Run the code** to see inference results for the treatment group.\n", | |
"* **Complete the two tasks** at the end of the notebook." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "-Ef5NgaqcqrX", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"import pystan\n", | |
"\n", | |
"import numpy as np\n", | |
"import matplotlib.pyplot as plt" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "iCvfmVX2cqra", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"# For Stan we provide all known quantities as data, namely the observed data\n", | |
"# and our prior hyperparameters.\n", | |
"eczema_data = {\n", | |
" 'treatment': {\n", | |
" 'alpha': 1, # fixed prior hyperparameters for the\n", | |
" 'beta': 1, # beta distribution\n", | |
" 'num_trials': 6, # number of trials in the data set\n", | |
" 'patients': [23, 16, 16, 45, 31, 10], # number of patients per trial\n", | |
" 'improved': [20, 10, 13, 35, 22, 7]}, # number of improved patients per trial\n", | |
" 'control': {\n", | |
" 'alpha': 1,\n", | |
" 'beta': 1,\n", | |
" 'num_trials': 6,\n", | |
" 'patients': [15, 18, 10, 39, 29, 10],\n", | |
" 'improved': [9, 11, 4, 21, 12, 0]}}" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "6lVl_Dvfcqrd", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"# Below is the Stan code for the medical trial data set. Note that the Stan\n", | |
"# code is a string that is passed to the StanModel object below.\n", | |
"\n", | |
"# We have to tell Stan what data to expect, what our parameters are and what\n", | |
"# the likelihood and prior are. Since the posterior is just proportional to\n", | |
"# the product of the likelihood and the prior, we don't distinguish between\n", | |
"# them explicitly in the model below. Every distribution we specify is\n", | |
"# automatically incorporated into the product of likelihood * prior.\n", | |
"\n", | |
"stan_code = \"\"\"\n", | |
"\n", | |
"// The data block contains all known quantities - typically the observed\n", | |
"// data and any constant hyperparameters.\n", | |
"data { \n", | |
" int<lower=1> num_trials; // number of trials in the data set\n", | |
" int<lower=0> patients[num_trials]; // number of patients per trial\n", | |
" int<lower=0> improved[num_trials]; // number of improved patients per trial\n", | |
" real<lower=0> alpha; // fixed prior hyperparameter\n", | |
" real<lower=0> beta; // fixed prior hyperparameter\n", | |
"}\n", | |
"\n", | |
"// The parameters block contains all unknown quantities - typically the\n", | |
"// parameters of the model. Stan will generate samples from the posterior\n", | |
"// distributions over all parameters.\n", | |
"parameters {\n", | |
" real<lower=0,upper=1> p; // probability of improvement - the\n", | |
" // parameter of the binomial likelihood\n", | |
"}\n", | |
"\n", | |
"// The model block contains all probability distributions in the model.\n", | |
"// This of this as specifying the generative model for the scenario.\n", | |
"model {\n", | |
" p ~ beta(alpha, beta); // prior over p\n", | |
" for(i in 1:num_trials) {\n", | |
" improved[i] ~ binomial(patients[i], p); // likelihood function\n", | |
" }\n", | |
"}\n", | |
"\n", | |
"\"\"\"" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "_lxOIvTLcqrf", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 35 | |
}, | |
"outputId": "63f913e0-e566-41d0-a1c4-59994454bfb6" | |
}, | |
"source": [ | |
"# This cell takes a while to run. Compiling a Stan model will feel slow even\n", | |
"# on simple models, but it isn't much slower for really complex models. Stan\n", | |
"# is translating the model specified above to C++ code and compiling the C++\n", | |
"# code to a binary that it can executed. The advantage is that the model needs\n", | |
"# to be compiled only once. Once that is done, the same code can be reused\n", | |
"# to generate samples for different data sets really quickly.\n", | |
"\n", | |
"stan_model = pystan.StanModel(model_code=stan_code)" | |
], | |
"execution_count": 4, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"INFO:pystan:COMPILING THE C++ CODE FOR MODEL anon_model_4822bea325d0250e03828b3bc1bb8bdd NOW.\n" | |
], | |
"name": "stderr" | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "CI73N2P-cqri", | |
"colab_type": "code", | |
"colab": {} | |
}, | |
"source": [ | |
"# Fit the model to the data. This will generate samples from the posterior over\n", | |
"# all parameters of the model. We start by computing posteriors for the treatment\n", | |
"# data.\n", | |
"\n", | |
"stan_results = stan_model.sampling(data=eczema_data['treatment'])" | |
], | |
"execution_count": 0, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "4Bm_5rV6cqrk", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 233 | |
}, | |
"outputId": "664b1197-cf7a-430e-ea56-74378d0d79ea" | |
}, | |
"source": [ | |
"# Print out the mean, standard deviation and quantiles of all parameters.\n", | |
"# These are approximate values derived from the samples generated by Stan.\n", | |
"# You can ignore the \"lp__\" row for now. Pay attention to the row for\n", | |
"# the \"p\" parameter of the model.\n", | |
"#\n", | |
"# The columns in the summary are\n", | |
"#\n", | |
"# * mean: The expected value of the posterior over the parameter\n", | |
"# * se_mean: The estimated error in the posterior mean\n", | |
"# * sd: The standard deviation of the posterior over the parameter\n", | |
"# * 2.5%, etc.: Percentiles of the posterior over the parameter\n", | |
"# * n_eff: The effective number of samples generated by Stan. The\n", | |
"# larger this value, the better.\n", | |
"# * Rhat: An estimate of the quality of the samples. This should be\n", | |
"# close to 1.0, otherwise there might be a problem with the\n", | |
"# convergence of the sampler.\n", | |
"\n", | |
"print(stan_results)" | |
], | |
"execution_count": 6, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Inference for Stan model: anon_model_4822bea325d0250e03828b3bc1bb8bdd.\n", | |
"4 chains, each with iter=2000; warmup=1000; thin=1; \n", | |
"post-warmup draws per chain=1000, total post-warmup draws=4000.\n", | |
"\n", | |
" mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat\n", | |
"p 0.76 8.7e-4 0.04 0.68 0.73 0.76 0.78 0.82 1615 1.0\n", | |
"lp__ -80.06 0.02 0.68 -82.04 -80.22 -79.8 -79.63 -79.58 1912 1.0\n", | |
"\n", | |
"Samples were drawn using NUTS at Thu Oct 10 11:35:44 2019.\n", | |
"For each parameter, n_eff is a crude measure of effective sample size,\n", | |
"and Rhat is the potential scale reduction factor on split chains (at \n", | |
"convergence, Rhat=1).\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "iP_GwtPscqrp", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 215 | |
}, | |
"outputId": "be199c35-b054-4169-9e18-e95e09554fd9" | |
}, | |
"source": [ | |
"# Specify which parameters you want to see in the summary table using\n", | |
"# the \"pars\" keyword argument. Specify which percentiles you want to\n", | |
"# see using the \"probs\" keyword argument.\n", | |
"#\n", | |
"# The statement below shows only the 2.5, 50, 97.5 percentiles for the\n", | |
"# parameter p.\n", | |
"\n", | |
"print(stan_results.stansummary(pars=['p'], probs=[0.025, 0.5, 0.975]))" | |
], | |
"execution_count": 7, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Inference for Stan model: anon_model_4822bea325d0250e03828b3bc1bb8bdd.\n", | |
"4 chains, each with iter=2000; warmup=1000; thin=1; \n", | |
"post-warmup draws per chain=1000, total post-warmup draws=4000.\n", | |
"\n", | |
" mean se_mean sd 2.5% 50% 97.5% n_eff Rhat\n", | |
"p 0.76 8.7e-4 0.04 0.68 0.76 0.82 1615 1.0\n", | |
"\n", | |
"Samples were drawn using NUTS at Thu Oct 10 11:35:44 2019.\n", | |
"For each parameter, n_eff is a crude measure of effective sample size,\n", | |
"and Rhat is the potential scale reduction factor on split chains (at \n", | |
"convergence, Rhat=1).\n" | |
], | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "khmDn0Iacqrr", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 299 | |
}, | |
"outputId": "9803d52c-a602-4608-e8fc-c90066b65973" | |
}, | |
"source": [ | |
"# Finally, we can extract the samples generated by Stan so that we\n", | |
"# can plot them or calculate any other functions or expected values\n", | |
"# we might be interested in.\n", | |
"\n", | |
"posterior_samples = stan_results.extract()\n", | |
"plt.hist(posterior_samples['p'], bins=50, density=True)\n", | |
"plt.title('Sampled posterior probability density for p')\n", | |
"print(\n", | |
" \"Posterior 95% confidence interval for p:\",\n", | |
" np.percentile(posterior_samples['p'], [2.5, 97.5]))\n", | |
"plt.show()" | |
], | |
"execution_count": 8, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Posterior 95% confidence interval for p: [0.68420083 0.82184982]\n" | |
], | |
"name": "stdout" | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\nH/pLmfkaagDSPVxoLcCqVatYt27dGDYpSduOJPPdBQ6MeJVLkjfT3bQw211qVNVpVbWmqtZMTc37\nB0aSNKShW+j9tZzPAp5WXswuSRM3VEJP94zjN9A9ke1n4w1JkjSMebtckpxNd1vvI9M9OP4kutuE\ndwXO65809/4ljlOSNI+FXOVy7AyzT1+CWCRJI/DWf0lqhAldkhphQpekRpjQJakRPm1R25TVJ//j\njPPXn3rUMkcijZ8tdElqhAldkhphQpekRtiHLs1htj53sN9dWx8Tupo0VyKWWmWXiyQ1wha6NCQv\ngdTWxha6JDXChC5JjbDLRSvauAY/HURVC2yhS1IjTOiS1AgTuiQ1woQuSY0woUtSI0zoktQIE7ok\nNcKELkmNMKFLUiO8U1QrgndySvOzhS5JjbCFrq2KLXFpePO20JN8IMlNSb49MG/PJOcl+X7/e4+l\nDVOSNJ+FdLmcARwxbd7JwOer6mDg8/1rSdIEzZvQq+oC4JZps48GzuynzwSeO+a4JEmLNGwf+sOq\n6vp++gbgYbMVTLIWWAuwatWqITcnrXz+yzottZGvcqmqAmqO5adV1ZqqWjM1NTXq5iRJsxg2od+Y\n5OEA/e+bxheSJGkYwyb0c4Hj++njgU+NJxxJ0rAWctni2cCFwCOTbEhyEnAq8PQk3wcO719LkiZo\n3kHRqjp2lkVPG3MskqQReOu/JDXChC5JjTChS1IjTOiS1AgTuiQ1woQuSY0woUtSI0zoktQI/2OR\nNGb+1yVNii10SWqECV2SGmGXiybCbglp/GyhS1IjTOiS1AgTuiQ1woQuSY0woUtSI0zoktQIE7ok\nNcKELkmNMKFLUiNM6JLUCBO6JDXChC5JjTChS1IjTOiS1AgTuiQ1YqSEnuQPk1yR5NtJzk6y87gC\nkyQtztD/4CLJPsAfAI+pqp8nOQc4BjhjTLGpAf4jC2n5jNrlsj3wwCTbAw8CNo4ekiRpGEMn9Kq6\nDvgL4MfA9cDtVfXZ6eWSrE2yLsm6TZs2DR+pJGlOQyf0JHsARwMHAHsDuyQ5bnq5qjqtqtZU1Zqp\nqanhI5UkzWmULpfDgR9W1aaqugf4BPAb4wlLkrRYoyT0HwO/luRBSQI8DbhqPGFJkhZr6Ktcqupr\nST4GXALcC1wKnDauwLR1mu2qlfWnHrXMkUiabuiEDlBVbwXeOqZYJEkj8E5RSWqECV2SGmFCl6RG\n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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "tWPB5p1lcqrt", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"## Task 1\n", | |
"* Reuse the code above to calculate the posterior 95% confidence interval for the probability of improvement in the **control group**.\n", | |
"* Plot the posterior histograms of the probability of improvement in the treatment and control groups on the same figure." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "0_nG0el6cqru", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 479 | |
}, | |
"outputId": "79511c08-e6b5-4c1a-e210-c5816fb83fd1" | |
}, | |
"source": [ | |
"stan_results_control = stan_model.sampling(data=eczema_data['control']) # Change 'treatment' to 'control' for control group data\n", | |
"print(stan_results_control.stansummary(pars=['p'], probs=[0.025, 0.5, 0.975]))\n", | |
"\n", | |
"posterior_samples_treatment = stan_results.extract()\n", | |
"posterior_samples_control = stan_results_control\n", | |
"plt.hist(posterior_samples_treatment['p'], bins=50, density=True)\n", | |
"plt.hist(posterior_samples_control['p'], bins=50, density=True)\n", | |
"plt.title('Sampled posterior probability density for p for treatment and control')\n", | |
"\n", | |
"plt.show()" | |
], | |
"execution_count": 11, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"Inference for Stan model: anon_model_4822bea325d0250e03828b3bc1bb8bdd.\n", | |
"4 chains, each with iter=2000; warmup=1000; thin=1; \n", | |
"post-warmup draws per chain=1000, total post-warmup draws=4000.\n", | |
"\n", | |
" mean se_mean sd 2.5% 50% 97.5% n_eff Rhat\n", | |
"p 0.47 1.2e-3 0.04 0.38 0.47 0.56 1413 1.0\n", | |
"\n", | |
"Samples were drawn using NUTS at Thu Oct 10 12:20:47 2019.\n", | |
"For each parameter, n_eff is a crude measure of effective sample size,\n", | |
"and Rhat is the potential scale reduction factor on split chains (at \n", | |
"convergence, Rhat=1).\n" | |
], | |
"name": "stdout" | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "Onc-7QJUcqrw", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"## Task 2\n", | |
"* Using the samples from the treatment and control group posteriors, estimate the probability that treatment is at least 19% (in absolute terms) better than control, $P(p_t > p_c + 0.19)$. We computed this result in Session 3.2 where we solved the same model analytically using the algebra of conjugate distributions." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "ZqeOJahwcqrx", | |
"colab_type": "code", | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 35 | |
}, | |
"outputId": "f6fc6d5b-6456-45b4-e156-c0e2fb890c1e" | |
}, | |
"source": [ | |
"prob_treatment_better = np.mean(posterior_samples_treatment['p'] > posterior_samples_control['p'] + 0.19)\n", | |
"print(prob_treatment_better)" | |
], | |
"execution_count": 15, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"0.94975\n" | |
], | |
"name": "stdout" | |
} | |
] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment