Skip to content

Instantly share code, notes, and snippets.

@fonnesbeck
Last active May 9, 2016 19:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fonnesbeck/cd6bb375f1ef3e7fec34 to your computer and use it in GitHub Desktop.
Save fonnesbeck/cd6bb375f1ef3e7fec34 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/fonnescj/anaconda3/lib/python3.5/site-packages/matplotlib/__init__.py:872: UserWarning: axes.color_cycle is deprecated and replaced with axes.prop_cycle; please use the latter.\n",
" warnings.warn(self.msg_depr % (key, alt_key))\n"
]
}
],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"import pandas as pd\n",
"import seaborn as sns\n",
"import matplotlib.pylab as plt\n",
"sns.set_context('notebook')\n",
"\n",
"seed_numbers = 20090425, 19700903\n",
"\n",
"from datetime import timedelta, datetime"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Import data"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rotavirus_data = pd.read_csv('ROTA.csv')\n",
"rotavirus_data.index.is_unique"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Rename columns and recode data"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Race (choice=White) 2249\n",
"Race (choice=Black/African American) 1545\n",
"Race (choice=American Indian/Alaskan Native) 5\n",
"Race (choice=Asian) 86\n",
"Race (choice=Native Hawaiian/Other Pacific Islander) 5\n",
"Race (choice=Other) 18\n",
"Race (choice=Unknown) 3\n",
"Race (choice=None) 1\n",
"dtype: int64"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"race_cols = [race for race in rotavirus_data.columns if race.startswith('Race')]\n",
"\n",
"(rotavirus_data[race_cols]=='Checked').sum()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"rotavirus_data['white'] = (rotavirus_data['Race (choice=White)']=='Checked').astype(int)\n",
"rotavirus_data['black'] = (rotavirus_data['Race (choice=Black/African American)']=='Checked').astype(int)\n",
"\n",
"rotavirus_data = rotavirus_data[(rotavirus_data.white + rotavirus_data.black)==1].drop(race_cols, axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"rotavirus_data['hispanic'] = (rotavirus_data.Ethnicity=='Hispanic or Latino').astype(int)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"rotavirus_data['rotavirus'] = (rotavirus_data['Result of rotavirus testing'] == 'Positive').astype(int)\n",
"rotavirus_data['sapovirus'] = (rotavirus_data['Result of sapovirus testing'] == 'Positive').astype(int)\n",
"rotavirus_data['astrovorus'] = (rotavirus_data['Result of astrovirus testing'] == 'Positive').astype(int)\n",
"rotavirus_data['norovirus'] = (rotavirus_data['Result of Norovirus Testing'] == 'GII').astype(int)\n",
"\n",
"rotavirus_data = rotavirus_data.drop([col for col in rotavirus_data.columns if col.startswith('Result')], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"rotavirus_data['Enrollment Date'] = pd.to_datetime(rotavirus_data['Enrollment Date'])\n",
"rotavirus_data['Date of Birth'] = pd.to_datetime(rotavirus_data['Date of Birth'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Calculate age, and compare to given age."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"rotavirus_data['age_months'] = (rotavirus_data['Enrollment Date']\n",
" - rotavirus_data['Date of Birth'] + timedelta(1)).astype('timedelta64[M]') "
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.abs((rotavirus_data['Age in months (auto calculated) '] - rotavirus_data['age_months']) > 1).sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Group into ages under 5 and 5 or over"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"rotavirus_data['under_5'] = ((rotavirus_data.age_months / 12) < 5).astype(int)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Calculate natural year"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0 1215\n",
"1 1178\n",
"2 1059\n",
"Name: year, dtype: int64"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rotavirus_data['year'] = rotavirus_data.Year - 2\n",
"rotavirus_data.year.value_counts()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Recode sex and stool"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"rotavirus_data['male'] = rotavirus_data['Sex updated']=='Male'\n",
"rotavirus_data['stool_collected'] = rotavirus_data['Was stool collected?']=='Yes'"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Drop extraneous columns\n",
"rotavirus_data = rotavirus_data.drop(['Date of Birth', \n",
" 'Age in months (auto calculated) ', 'Sex',\n",
" 'Sex updated', 'Was stool collected?',\n",
" 'Ethnicity', 'Year'], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"rotavirus_data = pd.concat([rotavirus_data, pd.get_dummies(rotavirus_data.Setting)], axis=1).drop('Setting', axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0 2117\n",
"2 1190\n",
"1 145\n",
"Name: setting, dtype: int64"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rotavirus_data['setting'] = rotavirus_data.IP.astype(int)\n",
"rotavirus_data.loc[rotavirus_data.OP==1, 'setting'] = 2\n",
"rotavirus_data.setting.value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(3452, 18)"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rotavirus_data.shape"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Record ID</th>\n",
" <th>Enrollment Date</th>\n",
" <th>white</th>\n",
" <th>black</th>\n",
" <th>hispanic</th>\n",
" <th>rotavirus</th>\n",
" <th>sapovirus</th>\n",
" <th>astrovorus</th>\n",
" <th>norovirus</th>\n",
" <th>age_months</th>\n",
" <th>under_5</th>\n",
" <th>year</th>\n",
" <th>male</th>\n",
" <th>stool_collected</th>\n",
" <th>ED</th>\n",
" <th>IP</th>\n",
" <th>OP</th>\n",
" <th>setting</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>EN1C-0001</td>\n",
" <td>2012-12-03</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>77.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>EN1C-0002</td>\n",
" <td>2012-12-03</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>87.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>EN1C-0003</td>\n",
" <td>2012-12-03</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>63.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>EN1C-0004</td>\n",
" <td>2012-12-04</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>36.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>EN1C-0006</td>\n",
" <td>2012-12-04</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>64.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Record ID Enrollment Date white black hispanic rotavirus sapovirus \\\n",
"0 EN1C-0001 2012-12-03 1 0 1 1 0 \n",
"1 EN1C-0002 2012-12-03 0 1 0 0 0 \n",
"2 EN1C-0003 2012-12-03 0 1 0 0 0 \n",
"3 EN1C-0004 2012-12-04 1 0 1 0 0 \n",
"4 EN1C-0006 2012-12-04 0 1 0 0 0 \n",
"\n",
" astrovorus norovirus age_months under_5 year male stool_collected \\\n",
"0 0 0 77.0 0 0 True True \n",
"1 0 0 87.0 0 0 True False \n",
"2 0 0 63.0 0 0 False False \n",
"3 0 0 36.0 1 0 False True \n",
"4 0 0 64.0 0 0 False False \n",
"\n",
" ED IP OP setting \n",
"0 0.0 0.0 1.0 2 \n",
"1 0.0 0.0 1.0 2 \n",
"2 0.0 0.0 1.0 2 \n",
"3 0.0 0.0 1.0 2 \n",
"4 0.0 0.0 1.0 2 "
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rotavirus_data.head()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Record ID 0\n",
"Enrollment Date 0\n",
"white 0\n",
"black 0\n",
"hispanic 0\n",
"rotavirus 0\n",
"sapovirus 0\n",
"astrovorus 0\n",
"norovirus 0\n",
"age_months 0\n",
"under_5 0\n",
"year 0\n",
"male 0\n",
"stool_collected 0\n",
"ED 0\n",
"IP 0\n",
"OP 0\n",
"setting 0\n",
"dtype: int64"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rotavirus_data.isnull().sum()"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>white</th>\n",
" <th>black</th>\n",
" <th>hispanic</th>\n",
" <th>rotavirus</th>\n",
" <th>sapovirus</th>\n",
" <th>astrovorus</th>\n",
" <th>norovirus</th>\n",
" <th>age_months</th>\n",
" <th>under_5</th>\n",
" <th>year</th>\n",
" <th>ED</th>\n",
" <th>IP</th>\n",
" <th>OP</th>\n",
" <th>setting</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>3452.000000</td>\n",
" <td>3452.000000</td>\n",
" <td>3452.000000</td>\n",
" <td>3452.000000</td>\n",
" <td>3452.000000</td>\n",
" <td>3452.000000</td>\n",
" <td>3452.000000</td>\n",
" <td>3452.000000</td>\n",
" <td>3452.000000</td>\n",
" <td>3452.000000</td>\n",
" <td>3452.000000</td>\n",
" <td>3452.000000</td>\n",
" <td>3452.000000</td>\n",
" <td>3452.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>0.601970</td>\n",
" <td>0.398030</td>\n",
" <td>0.398610</td>\n",
" <td>0.108633</td>\n",
" <td>0.081112</td>\n",
" <td>0.037080</td>\n",
" <td>0.152665</td>\n",
" <td>44.912804</td>\n",
" <td>0.715527</td>\n",
" <td>0.954809</td>\n",
" <td>0.613268</td>\n",
" <td>0.042005</td>\n",
" <td>0.344728</td>\n",
" <td>0.731460</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>0.489563</td>\n",
" <td>0.489563</td>\n",
" <td>0.489683</td>\n",
" <td>0.311223</td>\n",
" <td>0.273047</td>\n",
" <td>0.188985</td>\n",
" <td>0.359717</td>\n",
" <td>45.485356</td>\n",
" <td>0.451228</td>\n",
" <td>0.810492</td>\n",
" <td>0.487072</td>\n",
" <td>0.200629</td>\n",
" <td>0.475348</td>\n",
" <td>0.941349</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>11.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>27.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>67.000000</td>\n",
" <td>1.000000</td>\n",
" <td>2.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>2.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>215.000000</td>\n",
" <td>1.000000</td>\n",
" <td>2.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>2.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" white black hispanic rotavirus sapovirus \\\n",
"count 3452.000000 3452.000000 3452.000000 3452.000000 3452.000000 \n",
"mean 0.601970 0.398030 0.398610 0.108633 0.081112 \n",
"std 0.489563 0.489563 0.489683 0.311223 0.273047 \n",
"min 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"25% 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"50% 1.000000 0.000000 0.000000 0.000000 0.000000 \n",
"75% 1.000000 1.000000 1.000000 0.000000 0.000000 \n",
"max 1.000000 1.000000 1.000000 1.000000 1.000000 \n",
"\n",
" astrovorus norovirus age_months under_5 year \\\n",
"count 3452.000000 3452.000000 3452.000000 3452.000000 3452.000000 \n",
"mean 0.037080 0.152665 44.912804 0.715527 0.954809 \n",
"std 0.188985 0.359717 45.485356 0.451228 0.810492 \n",
"min 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"25% 0.000000 0.000000 11.000000 0.000000 0.000000 \n",
"50% 0.000000 0.000000 27.000000 1.000000 1.000000 \n",
"75% 0.000000 0.000000 67.000000 1.000000 2.000000 \n",
"max 1.000000 1.000000 215.000000 1.000000 2.000000 \n",
"\n",
" ED IP OP setting \n",
"count 3452.000000 3452.000000 3452.000000 3452.000000 \n",
"mean 0.613268 0.042005 0.344728 0.731460 \n",
"std 0.487072 0.200629 0.475348 0.941349 \n",
"min 0.000000 0.000000 0.000000 0.000000 \n",
"25% 0.000000 0.000000 0.000000 0.000000 \n",
"50% 1.000000 0.000000 0.000000 0.000000 \n",
"75% 1.000000 0.000000 1.000000 2.000000 \n",
"max 1.000000 1.000000 1.000000 2.000000 "
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rotavirus_data.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Aggregate data by age group and setting"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>under_5</th>\n",
" <th>year</th>\n",
" <th>setting</th>\n",
" <th>black</th>\n",
" <th>hispanic</th>\n",
" <th>cases</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>57</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>62</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>99</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" under_5 year setting black hispanic cases\n",
"0 0 0 0 0 0 57\n",
"1 0 0 0 0 1 62\n",
"2 0 0 0 1 0 99\n",
"3 0 0 0 1 1 1\n",
"4 0 0 1 0 0 4"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rotavirus_summary = (rotavirus_data.drop('Enrollment Date', axis=1)\n",
" .groupby(['under_5', 'year', 'setting', 'black', 'hispanic'])['Record ID'].count()\n",
" .reset_index()\n",
" .rename(columns={'Record ID':'cases'}))\n",
"\n",
"rotavirus_summary.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Census data\n",
"\n",
"The key for AGEGRP is as follows: \n",
"\n",
"+ 0 = Total\n",
"+ 1 = Age 0 to 4 years\n",
"+ 2 = Age 5 to 9 years\n",
"+ 3 = Age 10 to 14 years\n",
"+ 4 = Age 15 to 19 years\n",
"+ 5 = Age 20 to 24 years\n",
"+ 6 = Age 25 to 29 years\n",
"+ 7 = Age 30 to 34 years\n",
"+ 8 = Age 35 to 39 years\n",
"+ 9 = Age 40 to 44 years\n",
"+ 10 = Age 45 to 49 years \n",
"+ 11 = Age 50 to 54 years \n",
"+ 12 = Age 55 to 59 years \n",
"+ 13 = Age 60 to 64 years \n",
"+ 14 = Age 65 to 69 years \n",
"+ 15 = Age 70 to 74 years \n",
"+ 16 = Age 75 to 79 years \n",
"+ 17 = Age 80 to 84 years \n",
"+ 18 = Age 85 years or older"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>SUMLEV</th>\n",
" <th>STATE</th>\n",
" <th>COUNTY</th>\n",
" <th>STNAME</th>\n",
" <th>CTYNAME</th>\n",
" <th>YEAR2008</th>\n",
" <th>YEAR</th>\n",
" <th>AGEGRP</th>\n",
" <th>TOT_POP</th>\n",
" <th>TOT_MALE</th>\n",
" <th>...</th>\n",
" <th>HWAC_MALE</th>\n",
" <th>HWAC_FEMALE</th>\n",
" <th>HBAC_MALE</th>\n",
" <th>HBAC_FEMALE</th>\n",
" <th>HIAC_MALE</th>\n",
" <th>HIAC_FEMALE</th>\n",
" <th>HAAC_MALE</th>\n",
" <th>HAAC_FEMALE</th>\n",
" <th>HNAC_MALE</th>\n",
" <th>HNAC_FEMALE</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>50</td>\n",
" <td>47</td>\n",
" <td>37</td>\n",
" <td>Tennessee</td>\n",
" <td>Davidson County</td>\n",
" <td>1</td>\n",
" <td>2008</td>\n",
" <td>0</td>\n",
" <td>626681</td>\n",
" <td>303540</td>\n",
" <td>...</td>\n",
" <td>30400</td>\n",
" <td>24829</td>\n",
" <td>2178</td>\n",
" <td>2006</td>\n",
" <td>1501</td>\n",
" <td>1183</td>\n",
" <td>381</td>\n",
" <td>374</td>\n",
" <td>271</td>\n",
" <td>211</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>50</td>\n",
" <td>47</td>\n",
" <td>37</td>\n",
" <td>Tennessee</td>\n",
" <td>Davidson County</td>\n",
" <td>1</td>\n",
" <td>2008</td>\n",
" <td>1</td>\n",
" <td>44691</td>\n",
" <td>22868</td>\n",
" <td>...</td>\n",
" <td>3838</td>\n",
" <td>3664</td>\n",
" <td>302</td>\n",
" <td>303</td>\n",
" <td>185</td>\n",
" <td>189</td>\n",
" <td>63</td>\n",
" <td>53</td>\n",
" <td>26</td>\n",
" <td>35</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>50</td>\n",
" <td>47</td>\n",
" <td>37</td>\n",
" <td>Tennessee</td>\n",
" <td>Davidson County</td>\n",
" <td>1</td>\n",
" <td>2008</td>\n",
" <td>2</td>\n",
" <td>37613</td>\n",
" <td>18977</td>\n",
" <td>...</td>\n",
" <td>2910</td>\n",
" <td>2826</td>\n",
" <td>266</td>\n",
" <td>205</td>\n",
" <td>145</td>\n",
" <td>140</td>\n",
" <td>45</td>\n",
" <td>50</td>\n",
" <td>22</td>\n",
" <td>23</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>50</td>\n",
" <td>47</td>\n",
" <td>37</td>\n",
" <td>Tennessee</td>\n",
" <td>Davidson County</td>\n",
" <td>1</td>\n",
" <td>2008</td>\n",
" <td>3</td>\n",
" <td>33904</td>\n",
" <td>17479</td>\n",
" <td>...</td>\n",
" <td>2154</td>\n",
" <td>1890</td>\n",
" <td>166</td>\n",
" <td>170</td>\n",
" <td>105</td>\n",
" <td>91</td>\n",
" <td>25</td>\n",
" <td>29</td>\n",
" <td>18</td>\n",
" <td>16</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>50</td>\n",
" <td>47</td>\n",
" <td>37</td>\n",
" <td>Tennessee</td>\n",
" <td>Davidson County</td>\n",
" <td>1</td>\n",
" <td>2008</td>\n",
" <td>4</td>\n",
" <td>38999</td>\n",
" <td>19674</td>\n",
" <td>...</td>\n",
" <td>2029</td>\n",
" <td>1783</td>\n",
" <td>166</td>\n",
" <td>174</td>\n",
" <td>111</td>\n",
" <td>82</td>\n",
" <td>29</td>\n",
" <td>29</td>\n",
" <td>22</td>\n",
" <td>16</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 81 columns</p>\n",
"</div>"
],
"text/plain": [
" SUMLEV STATE COUNTY STNAME CTYNAME YEAR2008 YEAR AGEGRP \\\n",
"0 50 47 37 Tennessee Davidson County 1 2008 0 \n",
"1 50 47 37 Tennessee Davidson County 1 2008 1 \n",
"2 50 47 37 Tennessee Davidson County 1 2008 2 \n",
"3 50 47 37 Tennessee Davidson County 1 2008 3 \n",
"4 50 47 37 Tennessee Davidson County 1 2008 4 \n",
"\n",
" TOT_POP TOT_MALE ... HWAC_MALE HWAC_FEMALE HBAC_MALE \\\n",
"0 626681 303540 ... 30400 24829 2178 \n",
"1 44691 22868 ... 3838 3664 302 \n",
"2 37613 18977 ... 2910 2826 266 \n",
"3 33904 17479 ... 2154 1890 166 \n",
"4 38999 19674 ... 2029 1783 166 \n",
"\n",
" HBAC_FEMALE HIAC_MALE HIAC_FEMALE HAAC_MALE HAAC_FEMALE HNAC_MALE \\\n",
"0 2006 1501 1183 381 374 271 \n",
"1 303 185 189 63 53 26 \n",
"2 205 145 140 45 50 22 \n",
"3 170 105 91 25 29 18 \n",
"4 174 111 82 29 29 22 \n",
"\n",
" HNAC_FEMALE \n",
"0 211 \n",
"1 35 \n",
"2 23 \n",
"3 16 \n",
"4 16 \n",
"\n",
"[5 rows x 81 columns]"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"davidson_census = pd.read_csv('davidson_county.csv')\n",
"davidson_census.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Identify racial/ethnic subgroup populations"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"census_data_child = davidson_census.loc[(davidson_census.YEAR>2010) & davidson_census.AGEGRP.isin([1,2,3,4])].copy()\n",
"census_data_child['HISPANIC_WHITE'] = census_data_child[['HWA_MALE', 'HWA_FEMALE']].sum(axis=1)\n",
"census_data_child['HISPANIC_BLACK'] = census_data_child[['HBA_MALE', 'HBA_FEMALE']].sum(axis=1)\n",
"census_data_child['NONHISPANIC_WHITE'] = census_data_child[['NHWA_MALE', 'NHWA_FEMALE']].sum(axis=1)\n",
"census_data_child['NONHISPANIC_BLACK'] = census_data_child[['NHBA_MALE', 'NHBA_FEMALE']].sum(axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>under_5</th>\n",
" <th>YEAR</th>\n",
" <th>HISPANIC_WHITE</th>\n",
" <th>HISPANIC_BLACK</th>\n",
" <th>NONHISPANIC_WHITE</th>\n",
" <th>NONHISPANIC_BLACK</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>13889</td>\n",
" <td>891</td>\n",
" <td>47077</td>\n",
" <td>40334</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" <td>14692</td>\n",
" <td>914</td>\n",
" <td>47527</td>\n",
" <td>40656</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>False</td>\n",
" <td>2</td>\n",
" <td>15653</td>\n",
" <td>983</td>\n",
" <td>47487</td>\n",
" <td>40556</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>7134</td>\n",
" <td>533</td>\n",
" <td>19290</td>\n",
" <td>13591</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" <td>6994</td>\n",
" <td>566</td>\n",
" <td>19942</td>\n",
" <td>13511</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>True</td>\n",
" <td>2</td>\n",
" <td>6909</td>\n",
" <td>552</td>\n",
" <td>20479</td>\n",
" <td>13471</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" under_5 YEAR HISPANIC_WHITE HISPANIC_BLACK NONHISPANIC_WHITE \\\n",
"0 False 0 13889 891 47077 \n",
"1 False 1 14692 914 47527 \n",
"2 False 2 15653 983 47487 \n",
"3 True 0 7134 533 19290 \n",
"4 True 1 6994 566 19942 \n",
"5 True 2 6909 552 20479 \n",
"\n",
" NONHISPANIC_BLACK \n",
"0 40334 \n",
"1 40656 \n",
"2 40556 \n",
"3 13591 \n",
"4 13511 \n",
"5 13471 "
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"census_data = (census_data_child.assign(under_5=census_data_child.AGEGRP==1)\n",
" .groupby(['under_5','YEAR'])[['HISPANIC_WHITE', 'HISPANIC_BLACK', \n",
" 'NONHISPANIC_WHITE', 'NONHISPANIC_BLACK']]\n",
" .sum()).reset_index()\n",
"\n",
"census_data['YEAR'] = census_data.YEAR - 2011\n",
"census_data"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Reshape data"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>under_5</th>\n",
" <th>year</th>\n",
" <th>n</th>\n",
" <th>black</th>\n",
" <th>hispanic</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>13889</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" <td>14692</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>False</td>\n",
" <td>2</td>\n",
" <td>15653</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>7134</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" <td>6994</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>True</td>\n",
" <td>2</td>\n",
" <td>6909</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>891</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" <td>914</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>False</td>\n",
" <td>2</td>\n",
" <td>983</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>533</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" <td>566</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>True</td>\n",
" <td>2</td>\n",
" <td>552</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>47077</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" <td>47527</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>False</td>\n",
" <td>2</td>\n",
" <td>47487</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>19290</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" <td>19942</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>True</td>\n",
" <td>2</td>\n",
" <td>20479</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>False</td>\n",
" <td>0</td>\n",
" <td>40334</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>False</td>\n",
" <td>1</td>\n",
" <td>40656</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>False</td>\n",
" <td>2</td>\n",
" <td>40556</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>True</td>\n",
" <td>0</td>\n",
" <td>13591</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>True</td>\n",
" <td>1</td>\n",
" <td>13511</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>True</td>\n",
" <td>2</td>\n",
" <td>13471</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" under_5 year n black hispanic\n",
"0 False 0 13889 0 1\n",
"1 False 1 14692 0 1\n",
"2 False 2 15653 0 1\n",
"3 True 0 7134 0 1\n",
"4 True 1 6994 0 1\n",
"5 True 2 6909 0 1\n",
"6 False 0 891 1 1\n",
"7 False 1 914 1 1\n",
"8 False 2 983 1 1\n",
"9 True 0 533 1 1\n",
"10 True 1 566 1 1\n",
"11 True 2 552 1 1\n",
"12 False 0 47077 0 0\n",
"13 False 1 47527 0 0\n",
"14 False 2 47487 0 0\n",
"15 True 0 19290 0 0\n",
"16 True 1 19942 0 0\n",
"17 True 2 20479 0 0\n",
"18 False 0 40334 1 0\n",
"19 False 1 40656 1 0\n",
"20 False 2 40556 1 0\n",
"21 True 0 13591 1 0\n",
"22 True 1 13511 1 0\n",
"23 True 2 13471 1 0"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"melted_census = (pd.melt(census_data, id_vars=['under_5', 'YEAR'], \n",
" value_vars=['HISPANIC_WHITE', 'HISPANIC_BLACK', \n",
" 'NONHISPANIC_WHITE', 'NONHISPANIC_BLACK']))\n",
"\n",
"census_clean = (melted_census.assign(hispanic=melted_census.variable.apply(lambda x: x.split('_')[0]),\n",
" black=melted_census.variable.apply(lambda x: x.split('_')[1]))\n",
" .drop('variable', axis=1)\n",
" .replace({'black':{'BLACK':1, 'WHITE':0},\n",
" 'hispanic':{'HISPANIC':1, 'NONHISPANIC':0}})\n",
" .rename(columns={'YEAR':'year', 'value':'n'}))\n",
" \n",
"census_clean"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"census_full = pd.concat([census_clean.assign(setting=i) for i in range(3)])"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"merged_data = (rotavirus_summary.merge(census_full, on=['under_5', 'year', 'black', 'hispanic','setting'], how='right')\n",
" .fillna(0).astype(int))"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>under_5</th>\n",
" <th>year</th>\n",
" <th>setting</th>\n",
" <th>black</th>\n",
" <th>hispanic</th>\n",
" <th>cases</th>\n",
" <th>n</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>57</td>\n",
" <td>47077</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>62</td>\n",
" <td>13889</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>99</td>\n",
" <td>40334</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>891</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" <td>47077</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" under_5 year setting black hispanic cases n\n",
"0 0 0 0 0 0 57 47077\n",
"1 0 0 0 0 1 62 13889\n",
"2 0 0 0 1 0 99 40334\n",
"3 0 0 0 1 1 1 891\n",
"4 0 0 1 0 0 4 47077"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"merged_data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"VUMC market share for 2011-13, excluding Normal Newborns, Neonates, Women’s Health, and Behavioral Health"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"inpatient_market_share = 0.94, 0.90, 0.83\n",
"ed_market_share = 0.95, 0.94, 0.92\n",
"Y2012, Y2013, Y2014 = 0, 1, 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Will estimate 2014 market shares by extrapolating a linear fit to the previous years."
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from sklearn import linear_model"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/fonnescj/anaconda3/lib/python3.5/site-packages/scipy/linalg/basic.py:884: RuntimeWarning: internal gelsd driver lwork query error, required iwork dimension not returned. This is likely the result of LAPACK bug 0038, fixed in LAPACK 3.2.2 (released July 21, 2010). Falling back to 'gelss' driver.\n",
" warnings.warn(mesg, RuntimeWarning)\n"
]
},
{
"data": {
"text/plain": [
"[0.9, 0.83, 0.77500000000000002]"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"inpatient_df = pd.DataFrame(dict(x=range(3), y=inpatient_market_share))\n",
"inpatient_fit = linear_model.LinearRegression().fit(X=inpatient_df.x.reshape(-1, 1), y=inpatient_df.y)\n",
"inpatient_market_share = list(inpatient_market_share[1:]) + [inpatient_market_share[-1] + inpatient_fit.coef_[0]]\n",
"inpatient_market_share"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[0.94, 0.92, 0.90500000000000014]"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ed_df = pd.DataFrame(dict(x=range(3), y=ed_market_share))\n",
"ed_fit = linear_model.LinearRegression().fit(X=ed_df.x.reshape(-1, 1), y=ed_df.y)\n",
"ed_market_share = list(ed_market_share[1:]) + [ed_market_share[-1] + ed_fit.coef_[0]]\n",
"ed_market_share"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Enrollment days/week for ED, inpatient, outpatient"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.57142857, 1. , 0.57142857])"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"monitoring_days = 4, 7, 4\n",
"\n",
"# Indices to each value\n",
"ED, INPATIENT, OUTPATIENT = 0, 1, 2\n",
"\n",
"monitoring_rate = np.array(np.array(monitoring_days)/7)\n",
"monitoring_rate"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(157, 18)"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rotavirus_data[(rotavirus_data.hispanic==1) & (rotavirus_data.white==1) \n",
" & (rotavirus_data.setting==2) & (rotavirus_data.year==2) &\n",
" (rotavirus_data.under_5==1)].shape"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"setting_data = dict(list(merged_data.groupby('setting')))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Inpatient Model"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Couldn't import dot_parser, loading of dot files will not be possible.\n"
]
}
],
"source": [
"from pymc3 import Model, Deterministic, sample, NUTS, find_MAP, Potential\n",
"from pymc3 import Binomial, Beta, Poisson, Normal, DiscreteUniform\n",
"from pymc3 import traceplot, forestplot, summary, df_summary\n",
"\n",
"import theano.tensor as tt"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def generate_inpatient_model(inpatient_data, pool_years=False):\n",
"\n",
" with Model() as model:\n",
"\n",
" under_5, cases, n = inpatient_data[['under_5', 'cases', 'n']].values.T\n",
"\n",
" weights = monitoring_rate[INPATIENT] * np.array(inpatient_market_share)[inpatient_data.year]\n",
"\n",
" weighted_cases = DiscreteUniform('weighted_cases', cases, n, shape=inpatient_data.shape[0],\n",
" testval=(cases/weights).astype(int))\n",
" weighting = Binomial('weighting', n=weighted_cases, p=weights, observed=cases)\n",
"\n",
" if pool_years:\n",
" \n",
" assert not len(cases) % 3\n",
" \n",
" pooled_shape = int(len(cases)/3)\n",
" \n",
" pooled_cases = Deterministic('pooled_cases', tt.reshape(weighted_cases, (pooled_shape, 3)).sum(-1))\n",
" \n",
" θ = Normal('θ', 0, sd=1000, shape=pooled_shape)\n",
"\n",
" λ = Deterministic('λ', tt.exp(θ))\n",
"\n",
" AGE_obs = Potential('AGE_obs', Poisson.dist(λ*(np.reshape(n, (pooled_shape, 3))[:, 0])).logp(pooled_cases))\n",
" \n",
" else:\n",
" \n",
" θ = Normal('θ', 0, sd=1000, shape=inpatient_data.shape[0])\n",
"\n",
" λ = Deterministic('λ', tt.exp(θ))\n",
" \n",
" AGE_obs = Potential('AGE_obs', Poisson.dist(λ*n).logp(weighted_cases))\n",
" \n",
" return model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Full (unpooled) model"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"inpatient_model_full = generate_inpatient_model(setting_data[INPATIENT].drop('setting', axis=1))"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Assigned Metropolis to weighted_cases\n",
" [-----------------100%-----------------] 2000 of 2000 complete in 97.1 sec"
]
}
],
"source": [
"with inpatient_model_full:\n",
" start = find_MAP()\n",
" step = NUTS(scaling=start)\n",
" inpatient_full_trace = sample(2000, step, start, njobs=2, random_seed=seed_numbers)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.gridspec.GridSpec at 0x1198dec50>"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiAAAAMJCAYAAAA6XY1WAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3X98FNW9//H3LsOvhKhYE3vbhxUL1Si5azWbqhHRKJgG\nSGQRrEZAW2/tD622iFq+ploxtmJttKBUL21NpeVq9RIbTW16U7GoFGVztUugoFcS09ZatzZqdDEw\n7Hz/iEZ+ZJPd7GQ2J7yej4cPN7sz53xymJ15z9nNjM9xHEcAAAAe8me6AAAAcPAhgAAAAM8RQAAA\ngOcIIAAAwHMEEAAA4DkCCAAA8BwBBK5YvXq1Pv/5zysUCumaa67R22+/3fPaqaeeqlAo1PPf448/\nLkl68MEHNXPmTF144YX629/+1rP85Zdfrh07dvTZ3//+7//qP/7jPxQKhVReXq6vfvWrevnll9P+\nPW655RbdfffdkqSvfOUreuWVV/T888+rvLy81+WXLFmi+++/P6U+7r77blVXV/e73D333KMnn3wy\npbYHoq/fD0D/8vPzVVFRodmzZysUCunzn/+85s2bp5aWll6XT3YfsL/LLrtMb731VrrlDhlWpguA\n+TZu3Kif/vSn+tWvfqW8vDz9+te/1ne+8x0tX75cra2tOuyww1RXV3fAeqtWrVJjY6N+97vf6Ze/\n/KWuu+46/fa3v9WkSZP06U9/OmF/mzZt0nXXXaeVK1fq+OOPlyQ99thjWrBggZ544gmNHz/eld/r\nvvvukyS9+eabrrSXqo0bN+ozn/lMRvoGkDyfz6fVq1fr0EMP7XnuZz/7maqrq/Xggw+61s+zzz7r\nWltDAQEEadu6datOO+005eXlSZLOPfdcVVVVybZtvfDCC/L7/Vq4cKHeeustlZaW6utf/7p8Pp9G\njhyp999/X7FYrOfx/fff3++MwooVK3TFFVf0hA9JKi8v15gxYxSPx/X888/r1ltv1dixY/X+++/r\n4Ycf1tNPP617771Xtm1rzJgxuu666/TZz35W7777rqqqqrR9+3bl5uZqxIgRKiwslCSdffbZWrFi\nhSTpvffe01VXXaX29nYdcsghuuWWW3T00UfvU9crr7yi733ve3rrrbcUj8e1YMECzZkzp8/fZcmS\nJcrOztZLL72k119/XZ/+9Kd15513au3atWppadHtt98uv9+vM888U3fccYc2bdqkeDyu448/XlVV\nVcrOztbZZ5+tE088US+99JKuuOIK/fjHP9Zjjz0mSers7NQ555yj3//+9wqHw7rvvvtk27b+9a9/\n6bzzztPVV1+9Tz3hcFjLli1TPB6Xz+fTV77yFU2fPj2JrQA4eDmOo72v6blnzx699tprOuywwxKu\n88orr2jhwoWKRqM64ogjdOedd+qII47QunXr9nmfzp49W1dddZWWLFkiSVq4cKFWrVqlI488ctB/\nr0HnAGnatGmTU1JS4rz22muO4zjO6tWrnfz8fCcajTq/+tWvnOrqamf37t1OZ2enc+GFFzo///nP\nHcdxnMbGRicUCjlf/vKXnTfffNO58847nV//+tf99nfSSSc5//d//5fw9eeee8454YQTnL///e+O\n4zhOW1ubM2vWLOett95yHMdxXn75Zef00093du7c6dx6663Ot7/9bcdxHOfNN990zjzzTGfFihWO\n4zhOSUmJ09LS0tPeiy++6DiO4zz00EPOvHnzHMdxnG9/+9vOz372M8e2bWfmzJnO1q1bHcdxnM7O\nTmfGjBnOn/70pwPqW7FihXPLLbf0rH/RRRc5u3fvdnbv3u2EQiFn7dq1juM4zvz5853f/e53juM4\nzt133+3cfvvtPW3U1NQ4N998c0+dK1eu7HntnHPOcVpaWhzHcZw1a9Y41157reM4jrNw4ULn1Vdf\ndRzHcf7xj384J5xwgtPR0eE899xzzqxZsxzHcZxLLrnEaWhocBzHcbZt2+YsXbq0738MAM5xxx3n\nlJeXOxUVFc6UKVOcc845x6murnbefPPNXpdfsWKFM23aNKejo8NxHMf5+te/3vMeTvQ+/bCfD/dj\nwwEzIEhbMBjUFVdcoSuuuEJ+v1/nn3++Dj30UI0cOVLz5s3rWW7cuHH64he/qNWrV2vhwoU699xz\nde6550qS2tvb9ac//UlXX321vve97+lvf/ubioqKdOmllx7Qn9/v3+dsozcf//jH9fGPf1xS97Tl\nP//5T1166aU961mWpba2Nv3xj3/UDTfcIEk6/PDDNW3atF7bO+6443TiiSdKkkKhkG6++Wa9++67\nPa+3tbWpvb1d/+///b+ePrq6urR161YFAoE+az3jjDNkWd1vxWOPPXaf78982NZTTz2lzs7OnilY\n27b1sY99rGe5YDDY8/j8889XXV2dJk+erLVr1+q6666TJP34xz/WU089pfr6+p7v2OzcuXOfWsrK\nyrR06VI9+eSTKi4u1re+9a0+awfQ7cOPYP785z/ry1/+sk466SQdfvjhCZcvLi7umSHJz8/v+ag3\n0fv0w2X72/eZhACCtL333nsqKirS+eefL6n7OxM/+tGPdOihh+rXv/618vPzddxxx0nqfvOMHDny\ngDZuu+02XX/99dqwYYNisZjuueceXXbZZTrnnHN01FFH7bPsZz/7Wb3wwguaNGnSPs8vXbpU06dP\n14gRI5SVldXzfDwe12mnnaaampqe515//XXl5eXJ5/Pt84b+MAjsz+//6PvajuP0fIT0oT179uiQ\nQw7Z57sub775pnJychIP3AfGjBnT83j/evZu/4YbbtAZZ5whqXuH1NXV1fP63r/vnDlzNGfOHM2d\nO1ednZ0qKirSzp07FQqFNH36dAWDQc2dO1dNTU0H9PWFL3xBZ599tp599lmtX79ed999t+rr6zVu\n3Lh+fw/gYPbhe+n444/XkiVLdMMNN+izn/2sPvGJT+jyyy/XG2+8IZ/Pp6uuukqS9tl/+Hw+Sd3v\n69mzZ+vcc8/t8306XPBXMEjbG2+8oQULFvTMCKxcuVKzZs2SJL388stasWKF4vG43n//ff3iF7/Q\njBkz9ll/3bp1OvLII5Wfn69du3btEwLef//9A/r76le/qpUrV2rr1q09z61du1a/+93veoLO3k49\n9VQ9++yzPWcTf/jDH3Teeedp165dOuOMM/TII4/IcRy9/fbb+v3vf9/r77ht2zZt27ZNkvTQQw/p\n5JNP1ujRo3teP+aYYzR69GjV19dLkv7+979r1qxZ2rJlS/8DmIBlWbJtW1L3LMkvf/lL7d69W/F4\nXDfccMM+gWpvRx55pP793/9dN954Y88M1Kuvvqr33ntP3/zmN3XWWWfpueee0+7du7Vnz5591r3w\nwgu1detWzZ49W0uXLlVnZ6feeeedAf8OwMFo5syZOvnkk3XrrbdKkv7zP/9Tjz76qOrq6lRSUpJw\nvVdffVWxWCzh+3TvfcJwwAwI0nbMMcfo8ssv1wUXXCDHcVRYWKgbb7xRknTllVfqlltuUXl5uWzb\nVllZmebOnduz7q5du3Tvvfdq1apVkqTTTz9da9as0ezZs3XiiSf2+lcgwWBQ1dXVqq6u1s6dO7V7\n924dddRReuCBB3qd8pw0aZKWLl2qRYsWSZJGjBihH//4xxozZoy+8Y1v6KabblJZWZk+9rGP7RNg\n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\nRs58YICj04c7OzvV2tqa9vMjkYi6urqc1gQAACY4n+3VR1ZGcLOzF8yApEZvUqM3qdGb1Ezrjann\ngKTTY9N+FsNNhvpHGn98gBoAAHiOAAIAADxHAAEAAJ4zPoCUlNypoqKisS4DAAA4YHwAAQAA5iGA\nAAAAzxFAAACA5wggAADAcwQQAADguXHxTagAAGByYQYEAAB4jgACAAA8RwABAACeI4AAAADPEUAA\nAIDnCCAAAMBzBBAAAOC5cRdAbNvWk08+qaVLl2r58uU6c+bMdY/v379fixYt0tKlS7Vr164RX3P6\n9GktW7ZM1dXVqq+v93xb3OZmb97V2NioX/7yl55tQ6a42Zt//OMfevDBB7V8+XI99NBDeuuttzzf\nHje52ZvXX39dy5Yt07Jly7R+/Xolk0nPt8dtmfh/tWfPHi1dutSzbZiM/va3v6mmpmasy0hbqnpb\nW1u1cOFCLV++XMuXL9fJkye9L+5/sCxL3/3ud/Xggw/q/vvv1/79+91ZsT3O/Pa3v7Xr6ups27bt\nI0eO2GvXrh187OrVq3ZZWZl94cIFO5FI2F/96lftc+fOpXzNN77xDfvQoUO2bdv2E088Yb/00kse\nb4273OzNuXPn7IceesguKyuzd+7c6f3GuMzN3lRXV9v//Oc/bdu27Z07d9qNjY0eb4273OzNN7/5\nTTsWi9m2bdt1dXXG/5+ybXf7Y9u2fezYMXvFihX2kiVLvN2QSeTHP/6xvXDhQmN6PFK9jz/+uH3s\n2LExqCp9zz//vN3Q0GDbtm339fXZ8+fPd2W9424G5PDhw/r0pz8tSfrYxz6mo0ePDj52/PhxzZ49\nW1OnTtWUKVMUDof15z//+b9ec+zYMUnSsWPHFA6HJUn33nuvXn31VY+3xl1u9qa/v18PP/ywKisr\nvd+QDHCzNz/84Q91++23SxpI/jk5OR5vjbvc6M27r9m8ebNKSkqUSCTU09Oj/Px87zfIZW72p7e3\nVz/60Y/0ve99z/sNmURmz56tlpaWsS4jbSPVe+zYMT377LNatmyZnnvuOY8rS095ebkeeeQRSVIy\nmVQgEBh87LOf/awSicSo1jvuAsjFixev26kFAoHBad7hjwWDQV24cEGXLl267v6srCxdu3ZN9pBv\nmc/Ly9OFCxc82ILMcas3yWRSH/jABxQKhbwrPsPc7M373vc+SdJf/vIX7dixQ1/72te82YgMcaM3\n777G5/PpjTfeUEVFhfr6+vSRj3zEuw3JELf6k0gkFIlEVFdXp9zc3Ov2P3BXWVmZsrKyxrqMtI1U\n73333af6+npt27ZNhw8f1h/+8AePq/vfcnNzFQwGdfHiRT3yyCP69re/rfXr16umpkbnzp3T6tWr\ntXLlSsfrHXcBZOrUqbp06dLgcjKZlN/vH3zs4sWLg49dunRJ73nPe274mqysrMHXvfvcW2+91YMt\nyBy3ejO0LxOF27158cUXVV9fr+eee07Tpk3zaCsyw+3ezJo1S/v27dOSJUvU2Njo0VZkjlv96erq\n0unTp/X9739fjz32mI4fPz4h+oPMWrFihQoKChQIBPSZz3xGr7322liXdEP//ve/tWLFClVVVem+\n++5TY2Oj2tra9N73vlc//elP9bOf/czxOsfdkegTn/jEYAI8cuSIbrvttsHH5syZo1OnTun8+fNK\nJBKKxWL6+Mc/rrvvvvuGr/noRz+qQ4cOSZL++Mc/qqSkxOOtcZebvZlo3OzNr3/9a23fvl1tbW16\n//vf7/3GuMzN3qxdu1anTp2SNDCrOBHCrFv9ueuuu7Rnzx5t27ZNzc3N+vCHP6z169ePyTZNFqbN\nMg2v9+LFi1q4cKEuX74s27Z14MAB3XHHHWNUXWr/+c9/tHr1an3nO99RVVXVdY/5fL5R/xwC//sp\n3iorK9Of/vSnwTPIGxsbtXfvXl2+fFmLFy/W+vXrtWrVKtm2rUWLFmnGjBk3fI0k1dbWasOGDbp6\n9armzJmjL3zhC2O2XW5wszcTjRu9eeqpp5RMJtXQ0KBZs2bpW9/6lnw+nz75yU9q3bp1Y7l5N8XN\ncbNmzRrV1dUpOztbubm5ikajY7ZdbuH/lbl8Pt9Yl+DIu/UOHV+PPvqoampqlJOTo0996lO69957\nx7jK//bss8/q/Pnz2rJli1paWuTz+bR161ZlZ2frd7/73ajX67NNi5AAAMB45s+fAgAA4xBAAACA\n5wggAADAcwQQAADgOQIIAADwHAEEAAB4jgACAAA8938SE9b/CXAhNgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11a742e10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.subplots(figsize=(8,12))\n",
"forestplot(inpatient_full_trace[1000:], varnames=['λ'])"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"label_map = {'under_5':{0:'5+', 1:'<5'},\n",
" 'year':{0:'2012/13', 1:'2013/14', 2:'2014/15'},\n",
" 'black':{0:'white', 1:'black'},\n",
" 'hispanic':{0:'non-hispanic', 1:'hispanic'},\n",
" 'setting':{0:'ED', 1:'inpatient', 2:'outpatient'}}"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"inpatient_data_labels = (setting_data[INPATIENT][['under_5', 'year', 'black', 'hispanic']]\n",
" .reset_index(drop=True)\n",
" .replace(label_map)\n",
" .rename(columns={'black':'race', 'hispanic':'ethnicity', 'under_5':'age'}))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Rate factor for population "
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"rate_factor = 10000"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"rate_df_index = pd.MultiIndex.from_tuples(inpatient_data_labels.values.tolist(), names=inpatient_data_labels.columns)"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>age</th>\n",
" <th>year</th>\n",
" <th>race</th>\n",
" <th>ethnicity</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>5+</td>\n",
" <td>2012/13</td>\n",
" <td>white</td>\n",
" <td>non-hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>5+</td>\n",
" <td>2012/13</td>\n",
" <td>white</td>\n",
" <td>hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>5+</td>\n",
" <td>2012/13</td>\n",
" <td>black</td>\n",
" <td>non-hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>5+</td>\n",
" <td>2013/14</td>\n",
" <td>white</td>\n",
" <td>non-hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5+</td>\n",
" <td>2013/14</td>\n",
" <td>white</td>\n",
" <td>hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>5+</td>\n",
" <td>2014/15</td>\n",
" <td>white</td>\n",
" <td>hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>5+</td>\n",
" <td>2014/15</td>\n",
" <td>black</td>\n",
" <td>non-hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>&lt;5</td>\n",
" <td>2012/13</td>\n",
" <td>white</td>\n",
" <td>non-hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>&lt;5</td>\n",
" <td>2012/13</td>\n",
" <td>white</td>\n",
" <td>hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>&lt;5</td>\n",
" <td>2012/13</td>\n",
" <td>black</td>\n",
" <td>non-hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>&lt;5</td>\n",
" <td>2013/14</td>\n",
" <td>white</td>\n",
" <td>non-hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>&lt;5</td>\n",
" <td>2013/14</td>\n",
" <td>white</td>\n",
" <td>hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>&lt;5</td>\n",
" <td>2013/14</td>\n",
" <td>black</td>\n",
" <td>non-hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>&lt;5</td>\n",
" <td>2014/15</td>\n",
" <td>white</td>\n",
" <td>non-hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>&lt;5</td>\n",
" <td>2014/15</td>\n",
" <td>white</td>\n",
" <td>hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>&lt;5</td>\n",
" <td>2014/15</td>\n",
" <td>black</td>\n",
" <td>non-hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>5+</td>\n",
" <td>2012/13</td>\n",
" <td>black</td>\n",
" <td>hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>5+</td>\n",
" <td>2013/14</td>\n",
" <td>black</td>\n",
" <td>hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>5+</td>\n",
" <td>2014/15</td>\n",
" <td>black</td>\n",
" <td>hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>&lt;5</td>\n",
" <td>2012/13</td>\n",
" <td>black</td>\n",
" <td>hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>&lt;5</td>\n",
" <td>2013/14</td>\n",
" <td>black</td>\n",
" <td>hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>&lt;5</td>\n",
" <td>2014/15</td>\n",
" <td>black</td>\n",
" <td>hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>5+</td>\n",
" <td>2014/15</td>\n",
" <td>white</td>\n",
" <td>non-hispanic</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>5+</td>\n",
" <td>2013/14</td>\n",
" <td>black</td>\n",
" <td>non-hispanic</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" age year race ethnicity\n",
"0 5+ 2012/13 white non-hispanic\n",
"1 5+ 2012/13 white hispanic\n",
"2 5+ 2012/13 black non-hispanic\n",
"3 5+ 2013/14 white non-hispanic\n",
"4 5+ 2013/14 white hispanic\n",
"5 5+ 2014/15 white hispanic\n",
"6 5+ 2014/15 black non-hispanic\n",
"7 <5 2012/13 white non-hispanic\n",
"8 <5 2012/13 white hispanic\n",
"9 <5 2012/13 black non-hispanic\n",
"10 <5 2013/14 white non-hispanic\n",
"11 <5 2013/14 white hispanic\n",
"12 <5 2013/14 black non-hispanic\n",
"13 <5 2014/15 white non-hispanic\n",
"14 <5 2014/15 white hispanic\n",
"15 <5 2014/15 black non-hispanic\n",
"16 5+ 2012/13 black hispanic\n",
"17 5+ 2013/14 black hispanic\n",
"18 5+ 2014/15 black hispanic\n",
"19 <5 2012/13 black hispanic\n",
"20 <5 2013/14 black hispanic\n",
"21 <5 2014/15 black hispanic\n",
"22 5+ 2014/15 white non-hispanic\n",
"23 5+ 2013/14 black non-hispanic"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"inpatient_data_labels"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from pymc3 import hpd\n",
"def _hpd_df(x, alpha):\n",
" cnames = ['hpd_{0:g}'.format(100 * alpha/2),\n",
" 'hpd_{0:g}'.format(100 * (1 - alpha/2))]\n",
" return pd.DataFrame(hpd(x, alpha), columns=cnames)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/fonnescj/anaconda3/lib/python3.5/site-packages/numpy/core/fromnumeric.py:225: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n",
" return reshape(newshape, order=order)\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>age</th>\n",
" <th>year</th>\n",
" <th>race</th>\n",
" <th>ethnicity</th>\n",
" <th>mean</th>\n",
" <th>sd</th>\n",
" <th>mc_error</th>\n",
" <th>hpd_2.5</th>\n",
" <th>hpd_97.5</th>\n",
" <th>median</th>\n",
" <th>hpd_25</th>\n",
" <th>hpd_75</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>5+</td>\n",
" <td>2012/13</td>\n",
" <td>white</td>\n",
" <td>non-hispanic</td>\n",
" <td>0.814</td>\n",
" <td>0.438</td>\n",
" <td>0.031</td>\n",
" <td>0.140</td>\n",
" <td>1.656</td>\n",
" <td>0.720</td>\n",
" <td>0.363</td>\n",
" <td>0.859</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>5+</td>\n",
" <td>2012/13</td>\n",
" <td>white</td>\n",
" <td>hispanic</td>\n",
" <td>1.283</td>\n",
" <td>0.930</td>\n",
" <td>0.068</td>\n",
" <td>0.037</td>\n",
" <td>3.083</td>\n",
" <td>1.123</td>\n",
" <td>0.104</td>\n",
" <td>1.168</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>5+</td>\n",
" <td>2012/13</td>\n",
" <td>black</td>\n",
" <td>non-hispanic</td>\n",
" <td>1.025</td>\n",
" <td>0.495</td>\n",
" <td>0.031</td>\n",
" <td>0.195</td>\n",
" <td>1.988</td>\n",
" <td>0.966</td>\n",
" <td>0.471</td>\n",
" <td>1.083</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>5+</td>\n",
" <td>2013/14</td>\n",
" <td>white</td>\n",
" <td>non-hispanic</td>\n",
" <td>0.384</td>\n",
" <td>0.273</td>\n",
" <td>0.017</td>\n",
" <td>0.003</td>\n",
" <td>0.894</td>\n",
" <td>0.318</td>\n",
" <td>0.083</td>\n",
" <td>0.363</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5+</td>\n",
" <td>2013/14</td>\n",
" <td>white</td>\n",
" <td>hispanic</td>\n",
" <td>2.152</td>\n",
" <td>1.267</td>\n",
" <td>0.088</td>\n",
" <td>0.203</td>\n",
" <td>4.546</td>\n",
" <td>1.927</td>\n",
" <td>0.791</td>\n",
" <td>2.192</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>5+</td>\n",
" <td>2014/15</td>\n",
" <td>white</td>\n",
" <td>hispanic</td>\n",
" <td>0.661</td>\n",
" <td>0.608</td>\n",
" <td>0.042</td>\n",
" <td>0.001</td>\n",
" <td>1.951</td>\n",
" <td>0.478</td>\n",
" <td>0.001</td>\n",
" <td>0.479</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>5+</td>\n",
" <td>2014/15</td>\n",
" <td>black</td>\n",
" <td>non-hispanic</td>\n",
" <td>0.246</td>\n",
" <td>0.241</td>\n",
" <td>0.017</td>\n",
" <td>0.004</td>\n",
" <td>0.720</td>\n",
" <td>0.170</td>\n",
" <td>0.004</td>\n",
" <td>0.171</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>&lt;5</td>\n",
" <td>2012/13</td>\n",
" <td>white</td>\n",
" <td>non-hispanic</td>\n",
" <td>11.252</td>\n",
" <td>2.339</td>\n",
" <td>0.144</td>\n",
" <td>7.025</td>\n",
" <td>16.002</td>\n",
" <td>11.011</td>\n",
" <td>9.193</td>\n",
" <td>12.169</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>&lt;5</td>\n",
" <td>2012/13</td>\n",
" <td>white</td>\n",
" <td>hispanic</td>\n",
" <td>23.234</td>\n",
" <td>5.438</td>\n",
" <td>0.351</td>\n",
" <td>13.545</td>\n",
" <td>34.042</td>\n",
" <td>22.690</td>\n",
" <td>19.251</td>\n",
" <td>26.387</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>&lt;5</td>\n",
" <td>2012/13</td>\n",
" <td>black</td>\n",
" <td>non-hispanic</td>\n",
" <td>10.256</td>\n",
" <td>2.640</td>\n",
" <td>0.178</td>\n",
" <td>5.582</td>\n",
" <td>15.543</td>\n",
" <td>10.108</td>\n",
" <td>7.967</td>\n",
" <td>11.511</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>&lt;5</td>\n",
" <td>2013/14</td>\n",
" <td>white</td>\n",
" <td>non-hispanic</td>\n",
" <td>14.167</td>\n",
" <td>2.759</td>\n",
" <td>0.175</td>\n",
" <td>9.420</td>\n",
" <td>19.676</td>\n",
" <td>13.953</td>\n",
" <td>12.353</td>\n",
" <td>15.856</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>&lt;5</td>\n",
" <td>2013/14</td>\n",
" <td>white</td>\n",
" <td>hispanic</td>\n",
" <td>17.910</td>\n",
" <td>4.991</td>\n",
" <td>0.326</td>\n",
" <td>8.796</td>\n",
" <td>28.690</td>\n",
" <td>17.573</td>\n",
" <td>14.587</td>\n",
" <td>20.601</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>&lt;5</td>\n",
" <td>2013/14</td>\n",
" <td>black</td>\n",
" <td>non-hispanic</td>\n",
" <td>8.902</td>\n",
" <td>2.495</td>\n",
" <td>0.151</td>\n",
" <td>4.272</td>\n",
" <td>13.772</td>\n",
" <td>8.717</td>\n",
" <td>6.978</td>\n",
" <td>10.325</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>&lt;5</td>\n",
" <td>2014/15</td>\n",
" <td>white</td>\n",
" <td>non-hispanic</td>\n",
" <td>6.928</td>\n",
" <td>1.980</td>\n",
" <td>0.137</td>\n",
" <td>3.343</td>\n",
" <td>10.624</td>\n",
" <td>6.732</td>\n",
" <td>5.372</td>\n",
" <td>7.968</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>&lt;5</td>\n",
" <td>2014/15</td>\n",
" <td>white</td>\n",
" <td>hispanic</td>\n",
" <td>30.327</td>\n",
" <td>6.354</td>\n",
" <td>0.398</td>\n",
" <td>19.451</td>\n",
" <td>43.707</td>\n",
" <td>29.692</td>\n",
" <td>24.363</td>\n",
" <td>32.647</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>&lt;5</td>\n",
" <td>2014/15</td>\n",
" <td>black</td>\n",
" <td>non-hispanic</td>\n",
" <td>7.642</td>\n",
" <td>2.316</td>\n",
" <td>0.158</td>\n",
" <td>3.258</td>\n",
" <td>11.928</td>\n",
" <td>7.531</td>\n",
" <td>5.498</td>\n",
" <td>8.595</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>5+</td>\n",
" <td>2012/13</td>\n",
" <td>black</td>\n",
" <td>hispanic</td>\n",
" <td>0.009</td>\n",
" <td>0.188</td>\n",
" <td>0.004</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>5+</td>\n",
" <td>2013/14</td>\n",
" <td>black</td>\n",
" <td>hispanic</td>\n",
" <td>0.027</td>\n",
" <td>0.477</td>\n",
" <td>0.016</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>5+</td>\n",
" <td>2014/15</td>\n",
" <td>black</td>\n",
" <td>hispanic</td>\n",
" <td>0.018</td>\n",
" <td>0.338</td>\n",
" <td>0.008</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>&lt;5</td>\n",
" <td>2012/13</td>\n",
" <td>black</td>\n",
" <td>hispanic</td>\n",
" <td>0.018</td>\n",
" <td>0.439</td>\n",
" <td>0.010</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>&lt;5</td>\n",
" <td>2013/14</td>\n",
" <td>black</td>\n",
" <td>hispanic</td>\n",
" <td>0.004</td>\n",
" <td>0.113</td>\n",
" <td>0.003</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>&lt;5</td>\n",
" <td>2014/15</td>\n",
" <td>black</td>\n",
" <td>hispanic</td>\n",
" <td>0.039</td>\n",
" <td>0.704</td>\n",
" <td>0.020</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>5+</td>\n",
" <td>2014/15</td>\n",
" <td>white</td>\n",
" <td>non-hispanic</td>\n",
" <td>0.000</td>\n",
" <td>0.007</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>5+</td>\n",
" <td>2013/14</td>\n",
" <td>black</td>\n",
" <td>non-hispanic</td>\n",
" <td>0.001</td>\n",
" <td>0.011</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" age year race ethnicity mean sd mc_error hpd_2.5 \\\n",
"0 5+ 2012/13 white non-hispanic 0.814 0.438 0.031 0.140 \n",
"1 5+ 2012/13 white hispanic 1.283 0.930 0.068 0.037 \n",
"2 5+ 2012/13 black non-hispanic 1.025 0.495 0.031 0.195 \n",
"3 5+ 2013/14 white non-hispanic 0.384 0.273 0.017 0.003 \n",
"4 5+ 2013/14 white hispanic 2.152 1.267 0.088 0.203 \n",
"5 5+ 2014/15 white hispanic 0.661 0.608 0.042 0.001 \n",
"6 5+ 2014/15 black non-hispanic 0.246 0.241 0.017 0.004 \n",
"7 <5 2012/13 white non-hispanic 11.252 2.339 0.144 7.025 \n",
"8 <5 2012/13 white hispanic 23.234 5.438 0.351 13.545 \n",
"9 <5 2012/13 black non-hispanic 10.256 2.640 0.178 5.582 \n",
"10 <5 2013/14 white non-hispanic 14.167 2.759 0.175 9.420 \n",
"11 <5 2013/14 white hispanic 17.910 4.991 0.326 8.796 \n",
"12 <5 2013/14 black non-hispanic 8.902 2.495 0.151 4.272 \n",
"13 <5 2014/15 white non-hispanic 6.928 1.980 0.137 3.343 \n",
"14 <5 2014/15 white hispanic 30.327 6.354 0.398 19.451 \n",
"15 <5 2014/15 black non-hispanic 7.642 2.316 0.158 3.258 \n",
"16 5+ 2012/13 black hispanic 0.009 0.188 0.004 0.000 \n",
"17 5+ 2013/14 black hispanic 0.027 0.477 0.016 0.000 \n",
"18 5+ 2014/15 black hispanic 0.018 0.338 0.008 0.000 \n",
"19 <5 2012/13 black hispanic 0.018 0.439 0.010 0.000 \n",
"20 <5 2013/14 black hispanic 0.004 0.113 0.003 0.000 \n",
"21 <5 2014/15 black hispanic 0.039 0.704 0.020 0.000 \n",
"22 5+ 2014/15 white non-hispanic 0.000 0.007 0.000 0.000 \n",
"23 5+ 2013/14 black non-hispanic 0.001 0.011 0.000 0.000 \n",
"\n",
" hpd_97.5 median hpd_25 hpd_75 \n",
"0 1.656 0.720 0.363 0.859 \n",
"1 3.083 1.123 0.104 1.168 \n",
"2 1.988 0.966 0.471 1.083 \n",
"3 0.894 0.318 0.083 0.363 \n",
"4 4.546 1.927 0.791 2.192 \n",
"5 1.951 0.478 0.001 0.479 \n",
"6 0.720 0.170 0.004 0.171 \n",
"7 16.002 11.011 9.193 12.169 \n",
"8 34.042 22.690 19.251 26.387 \n",
"9 15.543 10.108 7.967 11.511 \n",
"10 19.676 13.953 12.353 15.856 \n",
"11 28.690 17.573 14.587 20.601 \n",
"12 13.772 8.717 6.978 10.325 \n",
"13 10.624 6.732 5.372 7.968 \n",
"14 43.707 29.692 24.363 32.647 \n",
"15 11.928 7.531 5.498 8.595 \n",
"16 0.000 0.000 0.000 0.000 \n",
"17 0.000 0.000 0.000 0.000 \n",
"18 0.000 0.000 0.000 0.000 \n",
"19 0.000 0.000 0.000 0.000 \n",
"20 0.000 0.000 0.000 0.000 \n",
"21 0.000 0.000 0.000 0.000 \n",
"22 0.000 0.000 0.000 0.000 \n",
"23 0.000 0.000 0.000 0.000 "
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"estimates = (df_summary(inpatient_full_trace[1000:], varnames=['λ'],\n",
" stat_funcs=[lambda x: pd.Series(np.median(x, 0), name='median'),\n",
" lambda x: _hpd_df(x, 0.5)], extend=True) * rate_factor).round(3)\n",
"estimates.index = inpatient_data_labels.index\n",
"pd.concat([inpatient_data_labels, estimates], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"trace, labels = inpatient_full_trace, inpatient_data_labels"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"index=['age', 'year']\n",
"columns=['race', 'ethnicity']\n",
"varnames=['λ']"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# rate_df_index = pd.MultiIndex.from_tuples(labels.values.tolist(), \n",
"# names=labels.columns)\n",
"# rate_df = (df_summary(trace[1000:], varnames=varnames) * rate_factor)[['mean', 'hpd_2.5', 'hpd_97.5']]\n",
"# rate_df.index = rate_df_index\n",
"# pivot_all = pd.pivot_table(rate_df\n",
"# .reset_index(), \n",
"# index=index, columns=columns)\n",
"# value_iterator = zip(pivot_all['mean'].values.flatten(), \n",
"# pivot_all['hpd_2.5'].values.flatten(), \n",
"# pivot_all['hpd_97.5'].values.flatten())\n",
"# rate_strings = np.reshape(['{0:.2f} ({1:.2f}, {2:.2f})'.format(*vals) for vals in value_iterator], \n",
"# pivot_all['mean'].shape)\n",
"\n",
"# pd.DataFrame(rate_strings, index=pivot_mean.index, columns=pivot_mean.columns)"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def generate_table(trace, labels, index, columns, varnames=['λ']):\n",
" rate_df_index = pd.MultiIndex.from_tuples(labels.values.tolist(), \n",
" names=labels.columns)\n",
" rate_df = (df_summary(trace[1000:], varnames=varnames) * rate_factor)[['mean', 'hpd_2.5', 'hpd_97.5']]\n",
" rate_df.index = rate_df_index\n",
" pivot_all = pd.pivot_table(rate_df\n",
" .reset_index(), \n",
" index=index, columns=columns)\n",
" value_iterator = zip(pivot_all['mean'].values.flatten(), \n",
" pivot_all['hpd_2.5'].values.flatten(), \n",
" pivot_all['hpd_97.5'].values.flatten())\n",
" rate_strings = np.reshape(['{0:.2f} ({1:.2f}, {2:.2f})'.format(*vals) for vals in value_iterator], \n",
" pivot_all['mean'].shape)\n",
" \n",
" return pd.DataFrame(rate_strings, index=pivot_all['mean'].index, columns=pivot_all['mean'].columns)"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/fonnescj/anaconda3/lib/python3.5/site-packages/numpy/core/fromnumeric.py:225: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n",
" return reshape(newshape, order=order)\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr>\n",
" <th></th>\n",
" <th>race</th>\n",
" <th colspan=\"2\" halign=\"left\">black</th>\n",
" <th colspan=\"2\" halign=\"left\">white</th>\n",
" </tr>\n",
" <tr>\n",
" <th></th>\n",
" <th>ethnicity</th>\n",
" <th>hispanic</th>\n",
" <th>non-hispanic</th>\n",
" <th>hispanic</th>\n",
" <th>non-hispanic</th>\n",
" </tr>\n",
" <tr>\n",
" <th>age</th>\n",
" <th>year</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"3\" valign=\"top\">5+</th>\n",
" <th>2012/13</th>\n",
" <td>0.01 (0.00, 0.00)</td>\n",
" <td>1.02 (0.19, 1.99)</td>\n",
" <td>1.28 (0.04, 3.08)</td>\n",
" <td>0.81 (0.14, 1.66)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2013/14</th>\n",
" <td>0.03 (0.00, 0.00)</td>\n",
" <td>0.00 (0.00, 0.00)</td>\n",
" <td>2.15 (0.20, 4.55)</td>\n",
" <td>0.38 (0.00, 0.89)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014/15</th>\n",
" <td>0.02 (0.00, 0.00)</td>\n",
" <td>0.25 (0.00, 0.72)</td>\n",
" <td>0.66 (0.00, 1.95)</td>\n",
" <td>0.00 (0.00, 0.00)</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"3\" valign=\"top\">&lt;5</th>\n",
" <th>2012/13</th>\n",
" <td>0.02 (0.00, 0.00)</td>\n",
" <td>10.26 (5.58, 15.54)</td>\n",
" <td>23.23 (13.54, 34.04)</td>\n",
" <td>11.25 (7.02, 16.00)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2013/14</th>\n",
" <td>0.00 (0.00, 0.00)</td>\n",
" <td>8.90 (4.27, 13.77)</td>\n",
" <td>17.91 (8.80, 28.69)</td>\n",
" <td>14.17 (9.42, 19.68)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014/15</th>\n",
" <td>0.04 (0.00, 0.00)</td>\n",
" <td>7.64 (3.26, 11.93)</td>\n",
" <td>30.33 (19.45, 43.71)</td>\n",
" <td>6.93 (3.34, 10.62)</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"race black white \\\n",
"ethnicity hispanic non-hispanic hispanic \n",
"age year \n",
"5+ 2012/13 0.01 (0.00, 0.00) 1.02 (0.19, 1.99) 1.28 (0.04, 3.08) \n",
" 2013/14 0.03 (0.00, 0.00) 0.00 (0.00, 0.00) 2.15 (0.20, 4.55) \n",
" 2014/15 0.02 (0.00, 0.00) 0.25 (0.00, 0.72) 0.66 (0.00, 1.95) \n",
"<5 2012/13 0.02 (0.00, 0.00) 10.26 (5.58, 15.54) 23.23 (13.54, 34.04) \n",
" 2013/14 0.00 (0.00, 0.00) 8.90 (4.27, 13.77) 17.91 (8.80, 28.69) \n",
" 2014/15 0.04 (0.00, 0.00) 7.64 (3.26, 11.93) 30.33 (19.45, 43.71) \n",
"\n",
"race \n",
"ethnicity non-hispanic \n",
"age year \n",
"5+ 2012/13 0.81 (0.14, 1.66) \n",
" 2013/14 0.38 (0.00, 0.89) \n",
" 2014/15 0.00 (0.00, 0.00) \n",
"<5 2012/13 11.25 (7.02, 16.00) \n",
" 2013/14 14.17 (9.42, 19.68) \n",
" 2014/15 6.93 (3.34, 10.62) "
]
},
"execution_count": 53,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"generate_table(inpatient_full_trace, inpatient_data_labels, index=['age', 'year'], columns=['race', 'ethnicity'])"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"inpatient_rate_samples = pd.concat(\n",
" [inpatient_data_labels, \n",
" pd.DataFrame(inpatient_full_trace['λ'][-1000:]).T], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"inpatient_rate_samples = (pd.melt(inpatient_rate_samples, id_vars=['age', 'year', 'race', 'ethnicity']))\n",
"\n",
"inpatient_rate_samples['race/ethnicity'] = inpatient_rate_samples.apply(lambda x: x.race + ', ' + x.ethnicity, axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plot of rates broken down by year/age/race/ethnicity."
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<seaborn.axisgrid.FacetGrid at 0x11ad19710>"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAmgAAALGCAYAAADx+W3XAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XtcVWW+x/EvW0oNIqi8jXYhBi1zmi6glCPe0NEoS0cb\ndaRRKZWSMhwLAkUL8pI5xzBnrMwKLZsmcappuhippSbWOSdfirccSkHEQkJAlNtz/ui4JwIEhQ0P\n8Hm/XrxeuNZe6/mttbcP3/2sm5sxxggAAADWcDR1AQAAAKiMgAYAAGAZAhoAAIBlCGgAAACWIaAB\nAABYhoAGAABgGQJaK5GSkqKYmJgq03ft2qXZs2dLkv72t7/pvffeq/M609LSql1nTXbu3KnFixef\ntZ6aHDt2TFOnTq3T/E8++UQvv/xyndfdlJYtW6Zly5ZVmZ6amqqkpCSXt1/bfgV+in6kfmJiYrR+\n/foq09euXas33nijQduqzk/fJ9jPvakLQNPq1auXevXqJUn6n//5H/Xp08dlbR08eFC5ubnntWzH\njh21YsWKOs3fvXv3ebVhk0GDBmnQoEEub6e2/QrUBf1I/YwdO7ZR2vnp+wT7EdDqKS0tTU8//bQq\nKirUvXt3zZgxQ7GxsSosLNSxY8cUGhqqmTNnqqSkRPPmzdOXX36pCy64QBEREbr99tu1c+dOLViw\nQKdOnZKPj4+eeOIJde3atVIb4eHhOn78eKVpMTEx6t27tySpoqJCv/nNb7RhwwZddNFFGjdunAYP\nHqz77rtP7733nnbs2KEbbrhB3377rcLCwpSdna3bbrtNTzzxhNLS0pSUlKQHHnhAqamp2r59uzp0\n6KBrr71Wc+bM0dGjR+VwOBQVFaVbb721TvskNze3yrK9evXSs88+q5MnT2rFihXq2LFjjfWsWLFC\n7dq108GDB9WjRw8988wzysnJUVhYmFJTU3XkyBHFxMTo+PHjat++vRISEuTh4aGwsDC98MILWrt2\nrSSpc+fOWr58uVatWqWrrrpKxcXFGj58uD788ENdeOGFkqSjR49q2rRpcnNzq7QNa9as0UUXXVRp\nf3t6emr37t3KycnRgw8+qFGjRunUqVOKi4vTvn375HA4NGnSJN19991KSUnRp59+qvz8fB0+fFh9\n+/ZVfHx8tftr586dGjt2rI4dO6ZRo0Zp+vTpSklJUVpamubPn6+FCxdq27ZtcjgcGjx4sB588EEt\nW7ZMGRkZOnz4sPLz83XPPfcoPDxchYWFio2NVU5Ojo4dO6bAwEAtXLjwvPbrk08+qR49etTpPUf9\n0I9U1RL7EenHkbk1a9YoNzdXERERGjNmjHMUfdq0aXr88cf19ddfS5LGjRunMWPGKCYmRm5ubtq/\nf78KCwsVERGhu+66Szk5OZU+J3fccYeioqKq9D+/+c1vNGfOHOf7lJycrD179ig+Pl6nTp3SJZdc\nosWLF6tTp051em/QSAzqZfv27SYwMNAUFhYaY4xZuXKlSUlJMcYYU1BQYG6++WaTl5dnXnzxRfPI\nI48YY4z57rvvzB133GFKSkrMiBEjTHZ2tjHGmE8//dRMnDjxvOqIiooyGzduNEVFRaZfv35mypQp\nxhhjHnvsMbNp0yazbt06M3DgQHPixAlz+vRpExwcbL7++muzfft2ExYWZowxJjo62ln7I488YlJT\nU40xxhw7dsyEhISYoqKiKtseHR1dpZaall23bp3z9Wer56abbjI5OTnGGGNGjx5tPvnkE5OZmWkG\nDRpkjDFmypQp5rXXXjPGGLNx40YzY8aMSvOTkpJMUlKS8/dnn33WGGNMSkqKmTt37nnt3+joaBMZ\nGWmMMWbfvn2md+/exhhjFi5caBISEowxxhw/ftwMHjzY7Nu3z7l9J0+eNMXFxaZ///5m//79Vdab\nlJRkRo0aZUpLS83x48fNjTfeWGlfZWVlmdDQUGOMMadPnzazZs0yp0+fNklJSWbEiBGmuLjYFBQU\nmCFDhpj09HTz7rvvmr/+9a/GGGNKSkrMkCFDzO7du897v6Jx0I+0nn5k2rRpxhhj9u/fb4KCgiq1\nlZaW5tzneXl5zu2Mjo42kydPNuXl5ebo0aPmtttuM99//32Nn5Oa+p+fvk+hoaFm48aNxhhjXn/9\ndbNo0aLz2ia4DiNoDcDX11ceHh6SpMmTJ2v79u166aWXdODAAZWVlam4uFg7duzQ73//e0nS5Zdf\nrnfeeUcHDhzQoUOHFBERIWOM3NzcVFRUVGX94eHhlYb03dzcKn3zlaTg4GBt3bpVkjRixAi99957\nKisr0xdffKEnnnhC//znPxUQEKCLL75YknTllVcqLy+vxm3aunWrMjIytHTpUklSeXm5Dh06pGuv\nvbbW/VHTsj9XUz3du3dXx44dJUl+fn764YcfKi2XlpamJUuWSJL69++v/v37Kysrq9paRo4cqcmT\nJysyMlLr169XVFRUpfk//eZr/v+pZ25ubtV+8+3bt6+zvhMnTkiStm/frqeeekqS5OPjo5CQEKWl\npcnDw0M33XST2rdvL0m64oorlJ+fX22NwcHBcnd3l4+Pj3x8fCq9rnPnzmrXrp3GjRungQMHasaM\nGc5v7aGhoWrXrp2kHw+Jfv7555o0aZJ27typV155RQcPHlR+fr5Onjx53vsVjYd+pG7L/lxz60cG\nDx4sSfL3969Sk7+/v7755huFh4erf//+mjVrlnPe7373OzkcDnXq1Em33HKLvvzyyxo/J5LO2v/k\n5eXpu+++c/4fb6xDrDg3BLQG0LZtW+fvCxYsUFZWlu68806FhIRo27ZtMsbI3b3yrj506JDKy8t1\n5ZVXKiUlRZJkjNF3331XZf0rV66stYZ+/fpp1apVcnd316233qqMjAz9/e9/V/fu3Z1/0Nu0aVNp\nGXOWx7AaY/TKK6/Iy8tL0o8nz3bo0KHWOmpa9vLLL9eePXsqva6mes7UK6nKIQNJuuCCCyr9++DB\ng86g8nNdu3bVL37xC3300UfKzc3VDTfcUGl+586dqz1ptzo/fZ9/XvMZFRUVKisrq7IdZ1777LPP\nKjU1VW5ubnrooYckVd4PP+3gJcnhcOhvf/ubduzYoU2bNumee+7RmjVrJKnSZ6qiokJt2rTR6tWr\n9cEHH2js2LHq27evDhw4UK/96ufnd5Y9goZEP1L7si2hH/n5e/hT3t7eeuedd7Rt2zZt3LhRd999\nt/OCi59uZ3l5udq0aaOFCxcqMzOzyudEqr7/OePn215SUqKcnBxdccUVddoGNA6u4mxgW7duVXh4\nuIYOHaojR44oJydH5eXlCggI0L/+9S9JP55bERYWpm7duik/P19ffPGFJOnNN9/Un/70p/Nq99JL\nL1W7du30ySef6JZbblGfPn20fPlyDRw4sM7raNOmjTNc9OnTxxkEvv76a40YMcL5zaw21S176tQp\ntWnTRuXl5ee4ZVUFBgY6O60tW7Zozpw5kv7TAf10OyRp1KhRSkhI0N13313vts8401afPn3097//\nXZJ0/Phxffzxx2c9Qfqhhx7S+vXrlZKSUu178/M/dnv27NGECRMUGBioRx99VP7+/srIyJAkffTR\nRyotLVV+fr42btyovn37asuWLRo7dqxCQ0NljNHevXvrvM9r2q9ofPQjrasfOSM1NVWzZs1S//79\n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\n7VpJ0vjx4zVixIgGr4URNAAAAEnffvutxo8fr5UrV+q+++7TrFmz5Onpqddee00jRoxQeXm58vLy\ntHr1aq1Zs0Zr1qzRa6+9poKCggavhRE0AAAASZdddpmSk5P19ttvq6CgQEePHtWvfvUrSdKNN94o\nSTp8+LCOHj2qSZMmyRijoqIiZWVl6dprr23QWhhBAwAAkPTyyy9ryJAhmj9/vnr27KkOHTpo165d\nkqSvvvpK0o/PKL3mmmv06quvKjk5WXfeeadLnlvKCBoAAICkAQMG6Mknn9TLL7+sjh076le/+pVO\nnjypsLAwderUSe7u7rr00kt15513avz48Tp16pT69esnT0/PBq+FG9UCAABU49///re+/fZbDRw4\nUF988YXeeustzZ8/v1Ha5hBnC5GSkqKYmJgq07OysjRo0KDzWmdtx9PT0tKqbbMmO3fu1OLFiyXV\nXG9Njh07pqlTp9Zp/ieffKKXX365zutuSsuWLdOyZcuqTE9NTVVSUpLL269tv6J1oR9xbT8SExOj\n9evXV5m+du1avfHGGw3aVnV27dql2bNnu7ydlqRTp05avXq1xo0bp6VLl2rKlCmN1jaHOFsBNze3\nRl2uJgcPHlRubu55LduxY0etWLGiTvN37959Xm3YZNCgQef9B/Fc1LZfgTPoR1xn7NixjdJOr169\n1KtXr0Zpq6Xw8PDQypUrm6RtAlo9paWl6emnn1ZFRYW6d++uGTNmKDY2VoWFhTp27JhCQ0M1c+ZM\nlZSUaN68efryyy91wQUXKCIiQrfffrt27typBQsW6NSpU/Lx8dETTzyhrl27VmojPDxcx48frzQt\nJiZGvXv3rjTt22+/1YQJE5Sfn68BAwZo5syZlebv379fCQkJKi4uVm5uriZNmqSwsDDl5+crNjZW\n//73v9W2bVtFR0dXekjuf//3fysmJkYvvviirrjiilr3SW5urubMmaOjR4/K4XAoKipKvXr10rPP\nPquTJ09qxYoV6tixo7799luFhYUpOztbt912m5544gmlpaVpxYoVateunQ4ePKgePXromWeeUU5O\njsLCwpSamqojR44oJiZGx48fV/v27ZWQkCAPDw+FhYXphRdecN6bpnPnzlq+fLlWrVqlq666SsXF\nxRo+fLg+/PBDXXjhhZKko0ePatq0aVX+iKxZs0YXXXRRpf3t6emp3bt3KycnRw8++KBGjRqlU6dO\nKS4uTvv27ZPD4dCkSZN09913KyUlRZ9++qny8/N1+PBh9e3bV/Hx8dXur507d2rs2LE6duyYRo0a\npenTpyslJUVpaWmaP3++Fi5cqG3btsnhcGjw4MF68MEHtWzZMmVkZOjw4cPKz8/XPffco/DwcBUW\nFio2NlY5OTk6duyYAgMDtXDhwvPar08++aR69OhR6/uN+qMfqaol9iPSjyNza9asUW5uriIiIjRm\nzBjnKPq0adP0+OOP6+uvv5YkjRs3TmPGjFFMTIzc3Ny0f/9+FRYWKiIiQnfddZdycnIqfU7uuOMO\nRUVFVel/fvOb32jOnDlKS0tTUlKSkpOTtWfPHsXHx+vUqVO65JJLtHjxYnXq1KnW9wWNyKBetm/f\nbgIDA01hYaExxpiVK1ealJQUY4wxBQUF5uabbzZ5eXnmxRdfNI888ogxxpjvvvvO3HHHHaakpMSM\nGDHCZGdnG2OM+fTTT83EiRPPq45169aZ4OBgk5eXZ0pKSsy4cePMxx9/bDIzM82gQYOMMcYkJiaa\nbdu2GWOMOXTokLnpppuMMcbMnTvXLFq0yBhjzL59+8zvf/97Y4wxPXr0MHv27DHDhw8333zzTbXb\nHh0dXWX6I488YlJTU40xxhw7dsyEhISYoqIis27dOufr161bZwYOHGhOnDhhTp8+bYKDg83XX39t\ntm/fbm666SaTk5NjjDFm9OjR5pNPPqm0HVOmTDGvvfaaMcaYjRs3mhkzZlSan5SUZJKSkpy/P/vs\ns8YYY1JSUszcuXPPa/9GR0ebyMhI5z7q3bu3McaYhQsXmoSEBGOMMcePHzeDBw82+/btc27fyZMn\nTXFxsenfv7/Zv39/lfUmJSWZUaNGmdLSUnP8+HFz4403VtpXWVlZJjQ01BhjzOnTp82sWbPM6dOn\nTVJSkhkxYoQpLi42BQUFZsiQISY9Pd28++675q9//asxxpiSkhIzZMgQs3v37vPer2gc9COtpx+Z\nNm2aMcaY/fv3m6CgoEptpaWlmSlTphhjjMnLy3NuZ3R0tJk8ebIpLy83R48eNbfddpv5/vvva/yc\n1NT/bN++3YSFhRljjAkNDTUbN240xhjz+uuvO9872IMRtAbg6+srDw8PSdLkyZO1fft2vfTSSzpw\n4IDKyspUXFysHTt26Pe//70k6fLLL9c777yjAwcO6NChQ4qIiJAxRm5ubioqKqqy/vDw8EpD+m5u\nbtV+8x00aJC8vb0lScOHD1daWlqlEZDo6Gh9+umnev7557Vv3z4VFxdLkr744gs988wzkqTu3bs7\nvzlK0n333adhw4bpqquuqvP+2Lp1qzIyMrR06VJJUnl5uQ4dOlTldQEBAbr44oslSVdeeaXy8vKc\nNXTs2FGS5Ofnpx9++KHScmlpaVqyZIkkqX///urfv7+ysrKqrWXkyJGaPHmyIiMjtX79ekVFRVWa\n/9Nvvub/r5dxc3Or9ptv3759nfWdOHFCkrR9+3Y99dRTkiQfHx+FhIQoLS1NHh4euummm9S+fXtJ\n0hVXXKH8/PxqawwODpa7u7t8fHzk4+NT6XWdO3dWu3btNG7cOA0cOFAzZsxwfmsPDQ1Vu3btJP34\n3n/++eeaNGmSdu7cqVdeeUUHDx5Ufn6+Tp48ed77FY2HfqSyltqPDB48WJLk7+9fpSZ/f3998803\nCg8PV//+/TVr1iznvN/97ndyOBzq1KmTbrnlFn355Zc1fk4knbX/ycvL03fffef8P95Yh1gbU3l5\nuTIzMxt0nd26dVObNm0adJ1nQ0BrAG3btnX+vmDBAmVlZenOO+9USEiItm3bJmOM3N0r7+pDhw6p\nvLxcV155pVJSUiRJxhh99913VdZf1+PfP/3gVNfmww8/LG9vbw0cOFC333673nvvPUmq8rp///vf\n8vX1lZubm5555hnNmjVLY8aMqfPhLmOMXnnlFXl5eUn68cTbyy+/XHv27Kmx3jPLSXIGEKn681cu\nuOCCSv8+ePCgM6j8XNeuXfWLX/xCH330kXJzc3XDDTdUmt+5c+dqT9qtzk/f55/XfEZFRYXKysqq\nbMeZ1z777LNKTU2Vm5ubHnroIUmV98NPO3hJcjgc+tvf/qYdO3Zo06ZNuueee7RmzRpJld+3iooK\ntWnTRqtXr9YHH3ygsWPHqm/fvjpw4EC99qufn99Z9ggaEv1IZS21H/n5fvopb29vvfPOO9q2bZs2\nbtyou+++27l/f7qd5eXlatOmjRYuXKjMzMwqnxOp+v7njJ9ve0lJiXJycup06Lm5yMzM1IMPPnjW\n/X0uysrK9Nxzz53Tl4z64irOBrZ161aFh4dr6NChOnLkiHJyclReXq6AgAD961//kvTjuRVhYWHq\n1q2b8vPz9cUXX0iS3nzzTf3pT38677Y3b96swsJCnT59Wv/85z912223VantoYce0qBBg5SWlibp\nx/+0AQEB+uc//ynpx07q/vvvdwaFPn36KCoqSnFxcXWuo0+fPs4Q8fXXX2vEiBE6deqU2rRpo/Ly\n8vPevjMCAwOdndaWLVs0Z84c57ZIP3ZkZ0KSJI0aNUoJCQm6++676932GWfa6tOnj/7+979Lko4f\nP66PP/640nk3P/fQQw9p/fr1SklJ0cCBA2tc7xl79uzRhAkTFBgYqEcffVT+/v7KyMiQJH300Ucq\nLS1Vfn6+Nm7cqL59+2rLli0aO3asQkNDZYzR3r1767zPa9qvaHz0I62rHzkjNTVVs2bNUv/+/RUb\nGysPDw9lZ2dLkvN9z8rK0s6dOxUQEKAtW7ZU+zmpjaenp7p06aJt27ZJktavX98oV403Nnd3d114\n4YUN8nMuQW/UqFG69957de+99+rxxx8///rPe0lUa+rUqZo1a5a8vLx0+eWXq1evXsrMzNT48eOV\nkJCgESNGyM3NTbNnz5anp6eWLl2qhIQElZSUyNPTUwsXLjzvtq+55hrdd999Kiws1J133qnbbrut\n0pB9ZGSkxo0bJy8vL/n6+qpr167KzMzUQw89pLi4ON11111yd3fX008/Lek/3zrPnPSenJyssLCw\nWuuIi4vTnDlznA+PXbx4sS666CLdcMMNeu6557RkyRJdc801lZY5lyu9Zs+erdjYWK1Zs0bt27dX\nYmJipXUEBgYqOjpaHTp00B/+8AcNHTpUs2fPbtCH2Z5p68EHH9S8efN05513yhijiIgIXXfdddq7\nd2+1r6/res+47rrrdOONNyo0NFTt27fX9ddfr+DgYO3atUvt2rXT+PHjVVRUpKlTp8rPz09//OMf\nNXfuXK1cuVIeHh66+eablZmZqSuvvLLWtmvar2h89COtqx85o3///vrggw8UGhqqtm3baujQofL3\n95cknTp1SqNGjVJpaakSEhJ0ySWX1Pg5qa0dSVq0aJHmzp2rRYsWycfHR4sWLWqw7WrNSkpKJEmv\nvvpqvdfFjWpx3tLS0pSSktJoN+07X5s2bdIbb7yh5cuXN3UpDebMVV/Tp09v4kqA+qEfqV1MTIz6\n9OnToKN3Ld23336rhx9+uMqh3vNVUlKipUuX1nqIc+fOnXr00UfVtWtXlZeX65FHHtGvf/1rST+e\n3/n+++/XuSaXj6A9//zzSk1NVWlpqcaPH+/8VuJwOOTv71/jrQeAhvDUU09p48aNeuGFF5q6FADN\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11aaf2cf8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.set(style=\"ticks\")\n",
"rateplot = sns.factorplot(x=\"year\", y=\"rate\", hue=\"age\", row='race', \n",
" col='ethnicity', \n",
" data=inpatient_rate_samples.assign(rate=inpatient_rate_samples.value*10000),\n",
" palette=\"gray\", size=5, aspect=.8, kind='box', linewidth=0.6, fliersize=0)\n",
"rateplot.despine(left=True)\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Pooled across race/ethnicity"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>under_5</th>\n",
" <th>year</th>\n",
" <th>cases</th>\n",
" <th>n</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>10</td>\n",
" <td>102191</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>5</td>\n",
" <td>103789</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>104679</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>48</td>\n",
" <td>40548</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>44</td>\n",
" <td>41013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>36</td>\n",
" <td>41411</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" under_5 year cases n\n",
"0 0 0 10 102191\n",
"1 0 1 5 103789\n",
"2 0 2 2 104679\n",
"3 1 0 48 40548\n",
"4 1 1 44 41013\n",
"5 1 2 36 41411"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"inpatient_pool_race_data = (setting_data[INPATIENT].drop('setting', axis=1)\n",
" .groupby(['under_5', 'year'])[['cases','n']]\n",
" .sum()\n",
" .reset_index())\n",
"inpatient_pool_race_data"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"inpatient_model_pool_race = generate_inpatient_model(inpatient_pool_race_data)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Assigned Metropolis to weighted_cases\n",
" [-----------------100%-----------------] 2000 of 2000 complete in 3.1 sec"
]
}
],
"source": [
"with inpatient_model_pool_race:\n",
" start = find_MAP()\n",
" step = NUTS(scaling=start)\n",
" inpatient_pool_race_trace = sample(2000, step, start, njobs=2, random_seed=seed_numbers)"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"inpatient_pool_race_data_labels = (inpatient_pool_race_data[['under_5', 'year']]\n",
" .reset_index(drop=True)\n",
" .replace(label_map)\n",
" .rename(columns={'under_5':'age'}))"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/fonnescj/anaconda3/lib/python3.5/site-packages/numpy/core/fromnumeric.py:225: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n",
" return reshape(newshape, order=order)\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>age</th>\n",
" <th>5+</th>\n",
" <th>&lt;5</th>\n",
" </tr>\n",
" <tr>\n",
" <th>year</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2012/13</th>\n",
" <td>1.08 (0.48, 1.72)</td>\n",
" <td>12.98 (9.51, 16.87)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2013/14</th>\n",
" <td>0.57 (0.14, 1.08)</td>\n",
" <td>13.38 (9.14, 17.50)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2014/15</th>\n",
" <td>0.23 (0.00, 0.55)</td>\n",
" <td>11.19 (7.56, 14.86)</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"age 5+ <5\n",
"year \n",
"2012/13 1.08 (0.48, 1.72) 12.98 (9.51, 16.87)\n",
"2013/14 0.57 (0.14, 1.08) 13.38 (9.14, 17.50)\n",
"2014/15 0.23 (0.00, 0.55) 11.19 (7.56, 14.86)"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"generate_table(inpatient_pool_race_trace, inpatient_pool_race_data_labels, index=['year'], columns=['age'])"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"inpatient_pool_race_samples = pd.concat(\n",
" [inpatient_pool_race_data[['under_5', 'year']].reset_index(drop=True), \n",
" pd.DataFrame(inpatient_pool_race_trace['λ'][-1000:]).T], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"inpatient_pool_race_samples = (pd.melt(inpatient_pool_race_samples, \n",
" id_vars=['under_5', 'year'])\n",
" .replace({'under_5':{0:'5+', 1:'<5'},\n",
" 'year':{0:'2012/13', 1:'2013/14', 2:'2014/15'}})\n",
" .rename(columns={'under_5':'age group'}))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plot of rates pooled by ethnicity"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x11c735080>"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfQAAAFqCAYAAADsuqi5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHkBJREFUeJzt3XtUVWXCx/EfN6+ooIuEPA0qlYV2WZNONmvpUojU7HYq\nW4qIJNlFYTAtzY6XUpFuq1oDOGPjhAOYzJgLY6yxgprs4kw2a3IGUacMExRNTUVJQy7vH76dMrwg\nnL0PPOf7+SsP7P08e/XU17PP2Xv7NTY2NgoAALRr/t6eAAAAaD2CDgCAAQg6AAAGIOgAABiAoPuA\nzMxMb08BhmFNwZNYT57hx7fczTdgwADt2LHD29OAQVhT8CTWk2cEWrXjuro6Pfnkk9qzZ49OnTql\nhx9+WBEREXrooYfUt29fSdKECRM0ZswYq6YAAIDPsCzoRUVFCg0N1XPPPaejR4/qrrvu0vTp0zVl\nyhQlJSVZNSwAAD7JsqCPGTNGo0ePliQ1NDQoMDBQW7du1VdffaXi4mJFRkbK5XKpS5cuVk0BAACf\nYVnQO3fuLEk6fvy40tLSNGPGDNXW1mrcuHGKjo7W73//e2VmZmrOnDkXve+TJ0+qtLRUYWFhCggI\n8PTUjVRZWentKcAwrCl4Euvpwurr63XgwAENGjRInTp1avJzS78UV1VVpZSUFCUkJMjpdOrYsWPq\n1q2bJGnnzp1asmSJcnJyzruPzMxMZWVlWTVFAADavZSUFOuCfvDgQSUmJmrBggUaOnSoJOm+++7T\n/Pnzdc011yg/P1/79u3TY489dtH7/vrrr3XLLbdo1apVCg8P9/TUAQBoc/bt26eJEyfqnXfeUWRk\nZJOfW3bKffny5aqurtayZcuUnZ0tPz8/zZ07V0uXLlVQUJDCwsK0aNGiFu37h9Ps4eHhcjgcnpw2\nAABt2rk+arYs6C6XSy6Xq8nrq1evtmpIAAB8FneKAwDAAAQdAAADEHQAAAxA0AEAMABBBwDAAAQd\nAAADEHQAAAxA0AEAMIBlN5YBAKAtqK6ulsvl0nfffafDhw9r8eLFio6O1hNPPKGKigr1799fe/bs\nUU5OjtatW6eCggJJUnx8vO644w73fhobG8/YZu/evXr11VcVFxenPn36KC4uTp07d9bq1asVEBCg\nUaNG6f7779fcuXM1YcIEXXvttcrKylL//v31/fff691339WxY8d08uRJPfvss+rfv3+rjpOgAwCM\n9vXXXys+Pl433XST3nrrLb355pvau3evgoOD9dprr+nTTz9VVlaWDh8+rPz8fP35z3+WJE2cOFEj\nR450P1SsuLi4yTbS6WeXvPnmm6qpqVFycrLWrFkjPz8/JSUlafjw4eecV4cOHZSXl6fPPvtML7/8\nsn7729+26jgJOgDAaL169VJeXp6Kiop07Ngx9enTR7t27dI111wjSbr++uslSRUVFdq3b5/uv/9+\nNTY2qqamRnv27NFVV10lSSovL2+yjST17t1bHTp00Pbt2zVgwAD3vdavvfZalZeXnzGXnz4PbciQ\nIe7f2717d6uPk8/QAQBGW7lypeLi4pSRkaHo6Gg1NjYqKipK//3vfyVJW7ZskSQ5HA71799fubm5\nysvL0+23337GA8CioqJUWlp6xjaS5Ofn595+x44dqq+vV319vT7//HP94he/UIcOHbR//35J0rZt\n29zblZWVuffV2tPtEu/QAQCGGzFihBYvXqyVK1fqkksukSTFxMTo3Xff1aRJk9S7d28FBgaqZ8+e\nuv322xUfH6+TJ09q2LBhCg4Odu8nJiZGxcXFZ2wj/Rj0nj17Kj4+XhMmTFBDQ4Pi4uJ05ZVX6p57\n7pHL5VJBQYFCQkLc+/vqq680efJkNTQ0KCMjo9XHadnz0K1UWVmp2NhYlZSU8PhUAMBF27lzp3bv\n3q2RI0fqs88+09q1ay8Y1ZZscy6FhYU6ePCgpk6d2uxtLtQ+3qEDAHxOeHi4li5dqldeeUWBgYFa\ntGiRJdvYiaADAHxO165d9cc//tHybc7F6XR6ZD8/xZfiAAAwAEEHAMAAnHIHABitvr5elZWVHt2n\nw+FwX2/eVhB0AIDRKisrNX36dPdlZq1VV1en7OxsRUZGemR/nkLQAQDGCwwMVIcOHWwd8+6773Zf\nx+5wOLR06VJLxyPoAAB4WG1trSQpNzfXtjH5UhwAAB62fft2fffdd0pOTlZSUtIZt4qNiYlxB9+T\neIcOAICHderUScnJyRo3bpx27dqlqVOnasiQIaqoqNChQ4eUnJyswMBA5eTkeGxMgg4AgIf17dvX\n/aW5vn37KiQkRGlpaerdu7diYmL06quvKigoyKNjEnQAgPHq6ups3dfatWv1v//9TwsXLtT+/ftV\nU1OjsLAwSacf5mLFY1QIOgDAaA6HQ9nZ2R7f5/nce++9mjt3ruLj4+Xv76+lS5fK3//019ZKSko8\nOpcfEHQAgNECAgJsv2Y8KChIL7zwgq1j8i13AAAMQNABADAAQQcAwAAEHQAAA/ClOACA0XjaGgAA\nBqisrFRBQYFCQkI8sr8jR45o/PjxPG0NAAC7hYSEqGfPnl6dw9GjRzVq1ChdeeWVkqS4uDhNmjTJ\nY/sn6AAAWKiurk7vvfeejh49qttuu03z5s2zZByCDgCABSoqKrRmzRp9+umnGj58uIKCglRaWqpJ\nkyapV69ecrlc7tvBegLfcgcAwMNee+01JSQkaPDgwSooKNC0adMUFRWltLQ05eXlKTY2VosXL/bo\nmLxDBwDAw8aOHava2lq98sor+uc//6l7771XN954ozp37izp9OfnmZmZHh2ToAMAjHfkyBFb99Wj\nRw8lJSUpKSlJmzdvVlZWlr799lvdd999GjNmjD755BMNHDjQY3OSCDoAwHAOh0Pjx4/3+D6ba8iQ\nIRoyZIj27NmjuXPnavXq1erSpYuWLFni0TkRdACA0bzxtLWz6dOnj3Jzcy3bP1+KAwDAAAQdAAAD\nEHQAAAxA0AEAMABBBwDAAAQdAAADEHQAAAxA0AEAMABBBwDAAAQdAAADEHQAAAxA0AEAMIBlD2ep\nq6vTk08+qT179ujUqVN6+OGHdfnll+uJJ56Qv7+/rrjiCi1cuNCq4QEA8CmWBb2oqEihoaF67rnn\nVF1drTvvvFNXXXWVZs6cqcGDB2vhwoUqLi7WzTffbNUUAADwGZadch8zZozS0tIkSfX19QoICFBZ\nWZkGDx4sSRo+fLg2bdpk1fAAAPgUy96hd+7cWZJ0/PhxpaWl6dFHH9Wzzz7r/nnXrl117NixC+4n\nMzNTWVlZVk0TAIB2JTY2tslrKSkp1gVdkqqqqpSSkqKEhASNHTtWzz//vPtnNTU16t69+wX3kZqa\nqtTU1DNeq6ysPOsBAQBgupKSEjkcjiavW3bK/eDBg0pOTtbjjz8up9MpSbr66qu1efNmSdLGjRt1\nww03WDU8AAA+xbJ36MuXL1d1dbWWLVum7Oxs+fn5yeVyacmSJTp16pSioqI0evRoq4YHAMCnWBZ0\nl8sll8vV5PW8vDyrhgQAwGdxYxkAAAxA0AEAMABBBwDAAJZetgYAP1dYWKiysrKL3q68vFz9+vVr\n0ZjR0dHuq20AUxF0ALZyOp0timt6evpZv2gL4DROuQMAYACCDgCAAQg6AAAGIOgAABiAoAMAYACC\nDgCAAQg6AAAGIOgAABiAoAMAYACCDgCAAQg6AAAGIOgAABiAoAMAYACCDgCAAQg6AAAGIOgAABiA\noAMAYACCDgCAAQK9PQG0bYWFhSorK2vRtuXl5erXr99FbxcdHS2n09miMQHAVxF0nJfT6WxxXNPT\n0+VyuTw8IwDA2XDKHQAAAxB0AAAMQNABADAAQQcAwAAEHQAAAxB0AAAMQNABADAAQQcAwAAEHQAA\nAxB0AAAMQNABADAAQQcAwAAEHQAAAxB0AAAMQNABADAAQQcAwACB3p4AAACtUVhYqLKysoverry8\nXP369WvRmNHR0XI6nS3a1ioEHQDQrjmdzhbFNT09XS6Xy4IZeQen3AEAMABBBwDAAAQdAAADEHQA\nAAxA0AEAMABBBwDAAAQdAAADEHQAAAxA0AEAMABBBwDAAJYHfcuWLZo0aZIkadu2bRo+fLgSExOV\nmJiov/3tb1YPDwCAT7D0Xu4rVqzQG2+8oa5du0qSSktLNWXKFCUlJVk5LACLLVmyRIcPH7Z1zKqq\nKs2aNcvWMSUpNDRU8+bNs31c4GJZGvTIyEhlZ2dr9uzZkqStW7dq165dKi4uVmRkpFwul7p06WLl\nFABY4PDhwxo6dKi3p2GLf/zjH96eAtAslp5yj4uLU0BAgPvP1113nWbPnq38/HxddtllyszMtHJ4\nAAB8hq2PT7355pvVrVs3Sadjv2TJkgtuk5mZqaysLKunBgBAuxAbG9vktZSUFHuDnpycrPnz5+ua\na67Rpk2bNHDgwAtuk5qaqtTU1DNeq6ysPOsBAQBgupKSEjkcjiav2xr0p556SosXL1ZQUJDCwsK0\naNEiO4cHAMBYlge9T58+KigokCRFR0dr9erVVg8JAIDP4cYyAAAYgKADAGAAgg4AgAEIOgAABiDo\nAAAYwNbL1uAd3rjvtuSde29z320Avoqg+wDuuw0A5uOUOwAABiDoAAAYgKADAGAAgg4AgAEIOgAA\nBuBb7gAuWlVVlTZs2ODtadjixIkT3p4C0CwEHcBFi4iI4FJIoI3hlDsAAAYg6AAAGICgAwBgAIIO\nAIABCDoAAAYg6AAAGKDZQf/rX/+ql156SSdOnNC6deusnBMAALhIzboO/YUXXtC+ffu0detWTZ06\nVWvXrtX27dv1xBNPWD0/eAA3AQEA8zUr6B999JEKCwvldDoVHBysnJwc3XHHHQS9neAmIABgvmad\ncvf3P/1rfn5+kqTa2lr3awAAwPua9Q599OjRmjFjho4ePaqVK1eqqKhIY8eOtXpuAACgmZoV9Acf\nfFAffvihLr30UlVVVSk1NVUjR460em4AAKCZmhX0xYsXa/78+Ro2bJj7tTlz5ujZZ5+1bGIAAKD5\nzht0l8uliooKlZaW6osvvnC/Xl9fr+rqassnBwDwDUuWLNHhw4dtHbOqqkqzZs2ydczQ0FDNmzfP\nkn2fN+iPPPKI9uzZo/T0dKWkpLhfDwgIUFRUlCUTAgD4nsOHD/vE1ThWXolz3qA7HA45HA4VFRXp\nyJEjOnHihBobG1VfX69t27bppptusmxiAACg+Zr1GfqLL76oVatWqa6uTiEhIfrmm280aNAgrVmz\nxur5AQCAZmjWxeTr16/XBx98oFtvvVV5eXnKyclRz549rZ4bAABopma9Qw8LC1NwcLCuuOIKbd++\nXbfccouef/55q+cGoI0KDQ21/a58VVVVioiIsHVM6fSxAu1Bs4LerVs3rVu3TgMHDlR+fr4uueQS\nvuUO+DCrvqV7Punp6XK5XLaPC7QXzTrl3tDQoMOHD+vGG29Unz59tGDBAs2YMcPquQEAgGZq1jv0\no0ePaty4cZLEA1kAAGiDmhV0f39/xcTEqF+/furYsaP79dzcXMsmBs/xxuedknc+8+TzTgC+qllB\nf/zxx62eByzkjc87JT7zBAA7NSvov/rVr6yeBwAAaAUeag4AgAEIOgAABiDoAAAYgKADAGCAZn0p\nDgAAK1VVVWnDhg3enoblTpw4Ydm+CToAwOsiIiJ4HnorccodAAADEHQAAAxA0AEAMABBBwDAAAQd\nAAADEHQAAAxA0AEAMABBBwDAAJYHfcuWLZo0aZIkaffu3YqPj1dCQoKefvppq4cGAMBnWBr0FStW\naN68eTp16pQkKSMjQzNnzlR+fr4aGhpUXFxs5fAAAPgMS4MeGRmp7Oxs95+3bt2qwYMHS5KGDx+u\nTZs2WTk8AAA+w9Kgx8XFKSAgwP3nxsZG9z937dpVx44ds3J4AAB8hq0PZ/H3//HvDzU1NerevfsF\nt8nMzFRWVpaV0wIAoN2IjY1t8lpKSoq9QY+OjtbmzZs1ZMgQbdy4sVlP1klNTVVqauoZr1VWVp71\ngAAA7VNoaKilTyI7m6qqKkVERNg6ZmhoaKv3UVJSIofD0eR1W4M+Z84czZ8/X6dOnVJUVJRGjx5t\n5/AAgDZq3rx5to+Znp4ul8tl+7hWsTzoffr0UUFBgSSpb9++ysvLs3pIAAB8DjeWAQDAAAQdAAAD\nEHQAAAxA0AEAMABBBwDAAAQdAAADEHQAAAxA0AEAMABBBwDAAAQdAAADEHQAAAxA0AEAMABBBwDA\nAAQdAAADEHQAAAxA0AEAMABBBwDAAAQdAAADEHQAAAwQ6O0JoG0rLCxUWVlZi7YtLy9Xenr6RW8X\nHR0tp9PZojEBwFcRdJyX0+kkrgDQDnDKHQAAAxB0AAAMQNABADAAQQcAwAAEHQAAA/AtdwC2auml\nkC29DFLiUkj4BoIOwFZcCglYg1PuAAAYgKADAGAAgg4AgAEIOgAABiDoAAAYgKADAGAAgg4AgAEI\nOgAABiDoAAAYgKADAGAAgg4AgAEIOgAABiDoAAAYgKADAGAAgg4AgAEIOgAABgj09gQAAGiNwsJC\nlZWVXfR25eXlSk9Pb9GY0dHRcjqdLdrWKgQdANCuOZ3ONhdXb+CUOwAABiDoAAAYgKADAGAAgg4A\ngAEIOgAABiDoAAAYgKADAGAAgg4AgAG8cmOZu+++W8HBwZIkh8OhpUuXemMaAAAYw/ag19bWSpJy\nc3PtHhoAAGPZfsp9+/bt+u6775ScnKykpCRt2bLF7ikAAGAc29+hd+rUScnJyRo3bpx27dqlqVOn\n6u2335a//9n/bpGZmamsrCybZwkAQNsUGxvb5LWUlBT7g963b19FRka6/zkkJEQHDhxQ7969z/r7\nqampSk1NPeO1ysrKsx4QAACmKykpkcPhaPK67afc165dq2eeeUaStH//ftXU1CgsLMzuaQAAYBTb\n36Hfe++9mjt3ruLj4+Xv76+lS5ee83Q7AABoHtuDHhQUpBdeeMHuYQEAMBpvjQEAMABBBwDAAAQd\nAAADEHQAAAxA0AEAMABBBwDAAAQdAAADEHQAAAxA0AEAMABBBwDAAAQdAAADEHQAAAxA0AEAMABB\nBwDAAAQdAAADEHQAAAxA0AEAMABBBwDAAAQdAAADEHQAAAxA0AEAMABBBwDAAAQdAAADEHQAAAxA\n0AEAMABBBwDAAAQdAAADEHQAAAxA0AEAMABBBwDAAAQdAAADEHQAAAxA0AEAMECgtyfQHhUWFqqs\nrOyitysvL1e/fv1aNGZ0dLScTmeLtgUAmI+gt4DT6WxRXNPT0+VyuSyYEQDA13HKHQAAAxB0AAAM\nQNABADAAQQcAwAAEHQAAAxB0AAAM4LOXrT355JPat2+frWMeOnRIU6ZMsXXM8PBwLV261NYxAQD2\n89mg79u3T8ePH7d1zI4dO9o+pt1/acHFa+mNiqSW36yIGxUB5vHZoANtRUtvVCRxsyIAP/LZoB86\ndEjV1dXenoblvv/+e29PAQBgA58Neq9evdSxY0dvT8NywcHB3p4CAMAGPhv08PBwr3wprlevXraO\nGR4ebut4AADv8Nmge+Ob33zeCQCwis8GHfA0LoUE4E0EHfAQLoVEW8GlkL6JoAMewpUTaCu4FNI3\nEXTAQ7hyAoA3EfQWaOnprPLycqWnp7doTE5ntX1cOQHAm2wPemNjo5566int2LFDHTp0UHp6ui67\n7DK7p9EqrTmdBXNx5QQ8jS9a4mLYHvTi4mLV1taqoKBAW7ZsUUZGhpYtW2b3NACgzdu6datXvpdh\n95iHDh2ydTxT2R70f/3rXxo2bJgk6brrrlNpaandUwCAdmHgwIF8jINmsz3ox48fV7du3X6cQGCg\nGhoa5O/f/Eez19fXS+LyGZjh7bff1pdfftmibSsqKjR37tyL3u7yyy/XqFGjWjQm7DNt2jTbx8zO\nztb06dNtH7eystL2MdubH5r3QwN/zq+xsbHRzgk988wzuv766zV69GhJ0ogRI/T3v//9nL+fmZmp\nrKwsm2YHAED7k5KSYv879F/+8pd6//33NXr0aH3++ee68sorz/v7qampSk1NPeO1kydPqrS0VGFh\nYQoICLByukaIjY1VSUmJt6cBg7Cm4Emsp+apr6/XgQMHNGjQIHXq1KnJz20PelxcnD7++GONHz9e\nkpSRkXHR++jUqZMGDx7s6akZzeFweHsKMAxrCp7EemqeyMjIc/7M9qD7+fnp6aeftntYAACM1vxv\nogEAgDaLoAMAYACC7gNSUlK8PQUYhjUFT2I9eYbtl60BAADP4x06AAAGIOgAABiAoAMAYACCDgCA\nAQg6AAAGIOgAABiAoLdhdXV1mj17tiZOnKj77rtP7733nnbv3q34+HglJCQ0uYXut99+q1GjRqm2\ntlbS6UfVPvzww5o0aZLGjx+vzz//3P276enp7scV/ny7EydOaNq0aUpISNCUKVP0zTff2HTEsFpr\n19T51sb51tQPdu7cqcGDBzd5He1Ta9fTD862Li60noYPH67ExEQlJibqpZdesvAo2w+C3oYVFRUp\nNDRUq1at0ooVK7R48WJlZGRo5syZys/PV0NDg4qLiyVJH330kZKTk3Xo0CH39jk5Ofr1r3+tvLw8\nZWRkaNGiRe6fVVZWyuFwnHW7v/zlLxo0aJDy8/N1++236w9/+IN9Bw1LtXZNnW9tnG9NSaf/gvnc\nc8+pY8eO9hwsLNfa9SSde12cbz3t3r1bAwcOVG5urnJzc/Xoo49af7DtAEFvw8aMGaO0tDRJpx+b\nFxAQoLKyMveT5oYPH65NmzZJkgICArRy5Ur16NHDvf3999/vfqpdXV2d+z+YnTt3Kioq6pzbTZ48\nWY888ogkae/evWf8DO1ba9fUudbGhdaUJC1YsEAzZ84862Mf0T61dj1JZ18XF1pPpaWl2r9/vxIT\nE/XQQw+pvLzc0uNsLwh6G9a5c2d16dJFx48fV1pamh599FH99MZ+Xbt21bFjxyRJN910k3r06HHG\nz4ODg9WhQwcdOHBAs2fP1qxZsyRJ77//vkaMGHHO7aTTT8WbPHmyVq1apZtvvtniI4VdWrumpLOv\njQutqaysLI0YMUIDBgxosj+0X61dT+daFxdaT5dccokeeugh5ebm6sEHH9Tjjz9u8ZG2DwS9jauq\nqtLkyZPldDo1duxY+fv/+K+spqZG3bt3P+P3/fz8zvjzjh07NGXKFM2aNcv9t+Z///vfuuGGG867\nnST96U9/Un5+vlJTUz11OGgDWrumpKZr40JrqqioSK+//romTZqkgwcPKjk52ZOHBC9qzXo617q4\n0HoaNGiQYmJiJEk33HCDDhw44PHjao9sfx46mu+HBb5gwQINHTpUknT11Vdr8+bNGjJkiDZu3Oh+\n/Qc//Vvsl19+qRkzZujll1/WgAEDJEnV1dXq1q1bk/9J/3S7V155Rb1799add96pLl26KCAgwKpD\nhM1au6bOtjaas6beeecd9z/HxMTo1VdfteLwYLPWrqezrYvmrKesrCyFhITogQce0Pbt2xUREWHF\n4bU7BL0NW758uaqrq7Vs2TJlZ2fLz89PLpdLS5Ys0alTpxQVFaXRo0efsc1P/yN48cUXVVtbq/T0\ndDU2Nqp79+669dZbNWzYsCZj/XS7e+65R3PmzNHrr7+uxsZGZWRkWHeQsFVr19TZ1sbGjRsvuKZ+\n/jqn3c3Q2vX089cbGxubtZ5+OM3+wQcfKDAwkP9H/T+etgYAgAH4DB0AAAMQdAAADEDQAQAwAEEH\nAMAABB0AAAMQdAAADEDQAQAwAEEHAMAABB2AJGn27Nlas2aN+8+JiYn6z3/+oylTpujuu+/WxIkT\ntW3bNknSF198ocTERI0bN04xMTHKz8+XdPqWnA888IBuu+02rV692ivHAfgqbv0KQNLp27pmZmZq\n3Lhx2rt3r7799ls988wzWrBgga666irt3LlT06dP14YNG7RmzRpNmzZNQ4cOVUVFhe68804lJCRI\nkmpra7V+/XovHw3ge7j1KwC3UaNGKScnR+vWrVNjY6N+97vf6YorrnDfe/3IkSN644031K1bN334\n4YfasWOHduzYobfeekvbtm1TVlaWvv/+e/ejegHYh3foANzuuusurV+/Xhs2bNDy5cuVk5OjwsJC\n98/379+vHj16KDU1VSEhIRo5cqRuvfVWvfXWW+7f6dixozemDvg8PkMH4OZ0OlVQUKBLL71UERER\nioyMVFFRkSTp448/dp9W/+STT/Sb3/xGMTEx+vTTTyWJJ6gBXsY7dABu4eHhCg8P11133SVJev75\n57Vw4UKtWLFCHTp00MsvvyxJSk1N1YQJE9S9e3f169dPDodDlZWV3pw64PP4DB2A2/79+5WYmKj1\n69crKCjI29MBcBE45Q5AkvT222/L6XTqscceI+ZAO8Q7dAAADMA7dAAADEDQAQAwAEEHAMAABB0A\nAAMQdAAADPB/eEvZLDfI/mUAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11a92f5c0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.set_context(font_scale=1.5)\n",
"sns.boxplot(x=\"year\", y=\"rate\", hue=\"age group\",\n",
" data=inpatient_pool_race_samples.assign(rate=inpatient_pool_race_samples.value*10000),\n",
" palette=\"gray\", linewidth=0.6, fliersize=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Pooled across years"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>under_5</th>\n",
" <th>year</th>\n",
" <th>black</th>\n",
" <th>hispanic</th>\n",
" <th>cases</th>\n",
" <th>n</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>552</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>566</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>533</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>8</td>\n",
" <td>13471</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>10</td>\n",
" <td>13511</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>13</td>\n",
" <td>13591</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>17</td>\n",
" <td>6909</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>10</td>\n",
" <td>6994</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>15</td>\n",
" <td>7134</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>11</td>\n",
" <td>20479</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>24</td>\n",
" <td>19942</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>20</td>\n",
" <td>19290</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>983</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>914</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>891</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>40556</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>40656</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" <td>40334</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>15653</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>14692</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>13889</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>47487</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>47527</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" <td>47077</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" under_5 year black hispanic cases n\n",
"0 1 2 1 1 0 552\n",
"1 1 1 1 1 0 566\n",
"2 1 0 1 1 0 533\n",
"3 1 2 1 0 8 13471\n",
"4 1 1 1 0 10 13511\n",
"5 1 0 1 0 13 13591\n",
"6 1 2 0 1 17 6909\n",
"7 1 1 0 1 10 6994\n",
"8 1 0 0 1 15 7134\n",
"9 1 2 0 0 11 20479\n",
"10 1 1 0 0 24 19942\n",
"11 1 0 0 0 20 19290\n",
"12 0 2 1 1 0 983\n",
"13 0 1 1 1 0 914\n",
"14 0 0 1 1 0 891\n",
"15 0 2 1 0 1 40556\n",
"16 0 1 1 0 0 40656\n",
"17 0 0 1 0 4 40334\n",
"18 0 2 0 1 1 15653\n",
"19 0 1 0 1 3 14692\n",
"20 0 0 0 1 2 13889\n",
"21 0 2 0 0 0 47487\n",
"22 0 1 0 0 2 47527\n",
"23 0 0 0 0 4 47077"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"inpatient_pool_year_data = (setting_data[INPATIENT].drop('setting', axis=1)\n",
" .sort(columns=['under_5', 'black', 'hispanic', 'year'], ascending=False)).reset_index(drop=True)\n",
"\n",
"inpatient_pool_year_data"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"inpatient_model_pool_year = generate_inpatient_model(inpatient_pool_year_data, pool_years=True)"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Assigned Metropolis to weighted_cases\n",
" [-----------------100%-----------------] 2000 of 2000 complete in 105.1 sec"
]
}
],
"source": [
"with inpatient_model_pool_year:\n",
" start = find_MAP()\n",
" step = NUTS(scaling=start)\n",
" inpatient_pool_year_trace = sample(2000, step, start, njobs=2, random_seed=seed_numbers)"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"inpatient_pool_year_labels = (inpatient_pool_year_data[['under_5', 'black', 'hispanic']]\n",
" .reset_index(drop=True)\n",
" .replace(label_map)\n",
" .rename(columns={'black':'race', 'hispanic':'ethnicity', 'under_5':'age'})\n",
" .drop_duplicates().reset_index(drop=True))"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/fonnescj/anaconda3/lib/python3.5/site-packages/numpy/core/fromnumeric.py:225: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n",
" return reshape(newshape, order=order)\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>age</th>\n",
" <th>race</th>\n",
" <th>ethnicity</th>\n",
" <th>mean</th>\n",
" <th>sd</th>\n",
" <th>mc_error</th>\n",
" <th>hpd_2.5</th>\n",
" <th>hpd_97.5</th>\n",
" <th>median</th>\n",
" <th>hpd_25</th>\n",
" <th>hpd_75</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>&lt;5</td>\n",
" <td>black</td>\n",
" <td>hispanic</td>\n",
" <td>0.012</td>\n",
" <td>0.318</td>\n",
" <td>0.007</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>&lt;5</td>\n",
" <td>black</td>\n",
" <td>non-hispanic</td>\n",
" <td>26.795</td>\n",
" <td>4.774</td>\n",
" <td>0.225</td>\n",
" <td>17.589</td>\n",
" <td>36.073</td>\n",
" <td>26.370</td>\n",
" <td>23.418</td>\n",
" <td>29.633</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>&lt;5</td>\n",
" <td>white</td>\n",
" <td>hispanic</td>\n",
" <td>71.156</td>\n",
" <td>10.641</td>\n",
" <td>0.409</td>\n",
" <td>50.333</td>\n",
" <td>91.705</td>\n",
" <td>70.631</td>\n",
" <td>61.987</td>\n",
" <td>76.206</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>&lt;5</td>\n",
" <td>white</td>\n",
" <td>non-hispanic</td>\n",
" <td>31.473</td>\n",
" <td>3.894</td>\n",
" <td>0.139</td>\n",
" <td>23.883</td>\n",
" <td>38.592</td>\n",
" <td>31.386</td>\n",
" <td>29.269</td>\n",
" <td>34.573</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5+</td>\n",
" <td>black</td>\n",
" <td>hispanic</td>\n",
" <td>0.003</td>\n",
" <td>0.079</td>\n",
" <td>0.002</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" <td>0.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>5+</td>\n",
" <td>black</td>\n",
" <td>non-hispanic</td>\n",
" <td>1.267</td>\n",
" <td>0.550</td>\n",
" <td>0.021</td>\n",
" <td>0.273</td>\n",
" <td>2.238</td>\n",
" <td>1.189</td>\n",
" <td>0.749</td>\n",
" <td>1.422</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>5+</td>\n",
" <td>white</td>\n",
" <td>hispanic</td>\n",
" <td>3.815</td>\n",
" <td>1.511</td>\n",
" <td>0.066</td>\n",
" <td>1.351</td>\n",
" <td>6.796</td>\n",
" <td>3.527</td>\n",
" <td>2.091</td>\n",
" <td>3.913</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>5+</td>\n",
" <td>white</td>\n",
" <td>non-hispanic</td>\n",
" <td>1.283</td>\n",
" <td>0.534</td>\n",
" <td>0.023</td>\n",
" <td>0.410</td>\n",
" <td>2.338</td>\n",
" <td>1.193</td>\n",
" <td>0.754</td>\n",
" <td>1.419</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" age race ethnicity mean sd mc_error hpd_2.5 hpd_97.5 \\\n",
"0 <5 black hispanic 0.012 0.318 0.007 0.000 0.000 \n",
"1 <5 black non-hispanic 26.795 4.774 0.225 17.589 36.073 \n",
"2 <5 white hispanic 71.156 10.641 0.409 50.333 91.705 \n",
"3 <5 white non-hispanic 31.473 3.894 0.139 23.883 38.592 \n",
"4 5+ black hispanic 0.003 0.079 0.002 0.000 0.000 \n",
"5 5+ black non-hispanic 1.267 0.550 0.021 0.273 2.238 \n",
"6 5+ white hispanic 3.815 1.511 0.066 1.351 6.796 \n",
"7 5+ white non-hispanic 1.283 0.534 0.023 0.410 2.338 \n",
"\n",
" median hpd_25 hpd_75 \n",
"0 0.000 0.000 0.000 \n",
"1 26.370 23.418 29.633 \n",
"2 70.631 61.987 76.206 \n",
"3 31.386 29.269 34.573 \n",
"4 0.000 0.000 0.000 \n",
"5 1.189 0.749 1.422 \n",
"6 3.527 2.091 3.913 \n",
"7 1.193 0.754 1.419 "
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"estimates_pooled = (df_summary(inpatient_pool_year_trace[1000:], varnames=['λ'],\n",
" stat_funcs=[lambda x: pd.Series(np.median(x, 0), name='median'),\n",
" lambda x: _hpd_df(x, 0.5)], extend=True) * rate_factor).round(3)\n",
"estimates_pooled.index = inpatient_pool_year_labels.index\n",
"pd.concat([inpatient_pool_year_labels, estimates_pooled], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/fonnescj/anaconda3/lib/python3.5/site-packages/numpy/core/fromnumeric.py:225: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n",
" return reshape(newshape, order=order)\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>age</th>\n",
" <th>5+</th>\n",
" <th>&lt;5</th>\n",
" </tr>\n",
" <tr>\n",
" <th>race</th>\n",
" <th>ethnicity</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">black</th>\n",
" <th>hispanic</th>\n",
" <td>0.00 (0.00, 0.00)</td>\n",
" <td>0.01 (0.00, 0.00)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>non-hispanic</th>\n",
" <td>1.27 (0.27, 2.24)</td>\n",
" <td>26.80 (17.59, 36.07)</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">white</th>\n",
" <th>hispanic</th>\n",
" <td>3.81 (1.35, 6.80)</td>\n",
" <td>71.16 (50.33, 91.71)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>non-hispanic</th>\n",
" <td>1.28 (0.41, 2.34)</td>\n",
" <td>31.47 (23.88, 38.59)</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"age 5+ <5\n",
"race ethnicity \n",
"black hispanic 0.00 (0.00, 0.00) 0.01 (0.00, 0.00)\n",
" non-hispanic 1.27 (0.27, 2.24) 26.80 (17.59, 36.07)\n",
"white hispanic 3.81 (1.35, 6.80) 71.16 (50.33, 91.71)\n",
" non-hispanic 1.28 (0.41, 2.34) 31.47 (23.88, 38.59)"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"generate_table(inpatient_pool_year_trace, inpatient_pool_year_labels, index=['race','ethnicity'], columns=['age'])"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"inpatient_pool_year_samples = pd.concat(\n",
" [inpatient_pool_year_data[inpatient_pool_year_data.year==0].reset_index(drop=True)[['under_5', 'black', 'hispanic']], \n",
" pd.DataFrame(inpatient_pool_year_trace['λ'][-1000:]).T], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"inpatient_pool_year_samples = (pd.melt(inpatient_pool_year_samples, id_vars=['under_5', 'black', 'hispanic'])\n",
" .replace({'under_5':{0:'5+', 1:'<5'},\n",
" 'black':{0:'white', 1:'black'},\n",
" 'hispanic':{0:'non-hispanic', 1:'hispanic'}})\n",
" .rename(columns={'black':'race', 'hispanic':'ethnicity', 'under_5':'age group'}))\n",
"\n",
"inpatient_pool_year_samples['race/ethnicity'] = inpatient_pool_year_samples.apply(lambda x: x.race + ', ' + x.ethnicity, axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plot of rates pooled by year"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x11c9eb4a8>"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtgAAAGGCAYAAABBv/YfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XtcVdW+///3AkQRvOAlNTE1wtxk7naC2g0T1CxPndAs\nIynb7spMtqXbhyIomqJophXY1dKHqJEew+yyrdDKzIrqVKaY+k1KULRAVESQ2/r94c91YntDGGvN\nBb6ef8Gca47xWYvh5M10zDFtdrvdLgAAAABGeFhdAAAAANCQELABAAAAgwjYAAAAgEEEbAAAAMAg\nAjbOKzk52eoSgLNibMKdMT7hrhibrmFjFRGcz9VXX61du3ZZXQZwBsYm3BnjE+6KsekaTr+C/eOP\nPyo6OlqStHPnTj3wwAN68MEH9Y9//EOHDx+WJK1evVrDhg3TiBEj9Omnnzq7JAAAAMBpvJzZ+JIl\nS/TOO+/I19dXkjRnzhxNnz5dV199td566y299tprGj16tFJTU5Wenq7S0lLdf//9uummm9SoUSNn\nlgYAAAA4hVOvYHfu3FmLFy92fL9o0SJdffXVkqSKigp5e3tr27Zt6tWrl7y8vOTn56cuXbrwXxcA\nAACot5x6BXvgwIHav3+/4/s2bdpIkv73f/9Xq1at0ooVK/T555+rWbNmjtc0bdpURUVFteqvtLRU\n27dvV9u2beXp6Vm34uGQm5trdQnAWTE24c4Yn3BXjE0zKisr9ccff6hHjx5q0qRJtX1ODdhn88EH\nH+iVV17Rq6++Kn9/f/n5+en48eOO/cXFxWrevPkF20lOTlZKSoozS8X/LyIiwuoSgLNibMKdMT7h\nrhibzufSgP3OO+9o9erVSk1NdYTonj176rnnnlNZWZlOnjypvXv3Kigo6IJtxcTEKCYmptq23377\nTYMGDdLKlSvVvn17p7wHAAAA4ODBg3rggQf00UcfqXPnztX2uSxgV1VVac6cObr88sv1xBNPyGaz\nqXfv3ho3bpyio6MVFRUlu92uCRMmyNvbu1Z9nJ4W0r59ewUEBJgsHwAAADjD2aYlOz1gd+zYUWlp\naZKkr7/++qyvGT58uIYPH+7sUgAAAACn40mOAAAAgEEEbAAAAMAgAjYAAABgEAEbAAAAMIiADQAA\nABhEwAYAAAAMImADAAAABhGwAQAAAINc+qh0AAAAXLqOHTumuLg4nThxQoWFhZo1a5aCg4M1ZcoU\n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\nHTqkkpIS9e3bV5mZmerdu7c2b96svn371qptAAAAwGrnDdgBAQEKCAjQ+vXrdeTIEZWUlMhut6uy\nslI7d+7UDTfccNEd3nrrrfr22291zz33yG63a8aMGerYsaPi4+NVXl6uwMBADR48uNZvCAAAALBS\njeZgL1y4UCtXrlRFRYVatmyp33//XT169NCaNWtq1em//vWvM7alpqbWqi0AAADAndRomb733ntP\nn332me644w6lpqZq6dKlatWqlbNrAwAAAOqdGgXstm3bys/PT0FBQfr555/Vt29f5efnO7s2AAAA\noN6p0RSRZs2aad26dbrmmmu0YsUKXXbZZbVeRQQAAABoyGp0BbuqqkqFhYXq06ePOnbsqOnTp+vJ\nJ590dm0AAABAvVOjK9hHjx7V8OHDJUlTpkxxakEAAABAfVajgO3h4aHw8HDHg2FOW758udMKAwAA\nAOqjGgXsSZMmObsOAAAAoEGoUcDu3bu3s+sAAAAAGoQa3eQIAAAAoGYI2AAAAIBBBGwAAADAIAI2\nAAAAYBABGwAAADCIgA0AAAAYRMAGAAAADCJgAwAAAAYRsAEAAACDCNgAAACAQQRsAAAAwCACNgAA\nAGAQARsAAAAwiIANAAAAGETABgAAAAwiYAMAAAAGEbABAAAAgwjYAAAAgEEEbAAAAMAgAjYAAABg\nEAEbAAAAMIiADQAAABhEwAYAAAAMImADAAAABhGwAQAAAIMI2AAAAIBBBGwAAADAIAI2AAAAYBAB\nGwAAADCIgA0AAAAYRMAGAAAADCJgAwAAAAYRsAEAAACDvKwuAACA09LT05WVlVXr47Ozs5WYmFin\nGoKDgxUZGVmnNgBc2gjYAAC3ERkZSbgFUO8xRQQAAAAwiIANAAAAGETABgAAAAwiYAMAAAAGWXaT\nY0FBgYYNG6alS5fK09NTU6ZMkYeHh4KCgpSQkGBVWQAAAGcwscJN165d61QDK9zUH5YE7IqKCiUk\nJKhJkyaSpLlz52rChAkKCQlRQkKCMjIyNGDAACtKAwAAOENdV7hJTExUXFycwYrgziyZIjJv3jzd\nf//9uuyyy2S325WVlaWQkBBJUlhYmL788ksrygIAAADqzOUB++2331br1q110003yW63S5Kqqqoc\n+319fVVUVOTqsgAAAAAjXD5F5O2335bNZtMXX3yhXbt2afLkySosLHTsLy4uVvPmzS/YTnJyslJS\n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\nXnvtNTVq1Ei5ubm64447NGbMmDPazM7O1qOPPqqCggL1799f48aNU3R0tJ5++mkVFhZq3rx5atSo\nkZo0aaL1/T3xAAAMeUlEQVQXXnhBH374oTIyMlRcXKwjR45o7NixGjRokD788EOtXLlSlZWVstls\nSklJ0e7du6vVMGTIED322GOKjY3VkCFDFBoaqtjYWB04cEDl5eWaPn26/vrXvzrnh4WzGjp0qJYs\nWaLmzZurT58+WrFihf7yl79o6NChWrhwoQoKCjRu3Dj9/vvv6t69u55++mnFxsbqjjvu0EcffaRf\nfvlFL774oh588EFNnTpVR48elSTFxcWpW7du5+yXc+ely4oxx7nTvRGw3VzTpk31yiuv6PDhw7r3\n3nsVFhbm2Ldnzx5NmTJFQUFBeu+99/T222/riiuu0JIlS/Tuu+/K29tbCxcu1IkTJyRJ8+bNk6en\n53nDtSS1b99es2bNUmZmpl5//XXdeuutjn3r1q1TQkKCevToobS0NFVWVkqSrrjiCiUlJemzzz7T\n/PnztWDBArVo0UKvv/667Ha7hgwZot9//12S5O3trddee01bt27V0qVLddNNNzn+ap43b57GjBmj\nm266SZ988ol27typG2+80eRHiguwYsydbUxMnz5daWlpatu2rVJTU7V48WL1799feXl5evfdd1Va\nWqpbbrnlrL8kysvL9eKLL6qiosLxS+K0jIwM3X777XrooYe0adMmHTt2TJJUWlqqZcuWqaCgQMOH\nD9eAAQP066+/6rXXXlPjxo01ffp0bdmyRZdddtkZNTz22GOO9t98800FBARo4cKF2rdvnz799NN6\n/UuiPhowYIC2bNmidu3aqVOnTtq6dau8vb3VtWtXNWrUSMXFxUpKSpKvr68GDRqkw4cPSzp19W7M\nmDHas2ePxo4dqwULFujGG2/UiBEj9Ntvvyk2NlarVq06Z7+cOy9dVo05zp3ui4Dt5nr16iVJatWq\nlZo1a6bCwkLHCbVdu3ZavHixfHx8dPz4cfn5+SknJ0fdunWTt7e3JDnmU+Xn52v37t3q3LnzBfu8\n5pprJElt2rRRSUlJtX1z5szRG2+8odzcXP3tb39zXNns27evJOn6669XUlKSmjRpovz8fE2cOFFN\nmzZVSUmJY55gcHCwpFO/jE6ePFmt/ezsbMc/qP79+1/kpwUTrBhz/zkmDh8+LD8/P7Vt21aSFBIS\nokWLFql///7q1q2bbDabfHx81KRJE0nSmDFjdOLECXXr1k2DBg1SUFCQvLy85OXlJU9Pz2p9jRkz\nRi+99JIeeughtW/fXj179pQkhYaGSpJat26t5s2b6/Dhw2rVqpUmT54sHx8fZWdn6/rrr5eks9Zw\nWnZ2tvr16yfpVHh68MEHL+bjhwEDBw7Uyy+/rMsvv1xPPfWUli9frsrKSg0aNEiS1KlTJ/n5+Uk6\n9fMuLS09azu7d+/W119/rQ8++EB2u90RKM6Fc+ely6oxx7nTfXGTo5vbtm2bJOmPP/7QiRMn1KpV\nK8eJOTExUf/85z81d+5cx38hderUSXv37lV5ebmkUzfYHDp0SG3atNHrr7+uPXv26PPPPz9vn+eb\nb7t69WrNnDlTqamp2rFjh3744QdJ0o4dOyRJ3333nYKCgvTZZ5/p4MGDevbZZ/XUU0+ptLTUUffZ\n2j+976qrrnLc7PDuu+9q5cqVNfugYIw7jLlWrVqpuLhY+fn5kk7dfNOlS5dzHv/yyy9r+fLlio+P\nP2t7f7Z+/XoNGzZMy5cv11VXXaXVq1dLkrZv3y7p1B8GxcXFatKkiZKTk7Vo0SIlJiaqcePGjs/h\nfK666irHZ5iTk6OJEyde8BiYFRQUpJycHG3btk39+vVTcXGxNm3a5Pjl/Wf/+TP18PBQVVWVJCkw\nMFCjRo3S8uXL9fzzz+uuu+46b7+cOy9d7jLmOHe6D65gu7mTJ0/qoYceUklJiZ5++mlJ//cP4K67\n7tL48ePVokULtWvXTkeOHFGrVq30j3/8QyNHjpTNZlN4eLjatWvnaC8xMVGPPPKIVq9ercWLF2vo\n0KHq3r17jevp1q2boqKi5Ovrqw4dOqhnz55au3atNm/erIyMDFVVVSkpKUmNGzfWSy+9pOjoaEmn\nQtjp/+Y8m9PvadKkSZo+fbpeeukl+fj46Jlnnrnozwx14y5jbtasWRo3bpw8PDzUvHlzJSUlaffu\n3bW+4fL0cT179lRcXJx8fHzk6empp59+WpmZmcrPz9eoUaN0/PhxzZgxQ35+furVq5fuvfdeeXp6\nqmXLlvr999/VsWPH89Zw3333KTY2VtHR0aqqqtLUqVNrVS/qpnfv3jpw4IDj619++cVxxezPP7//\n/Fm2bt1a5eXlevbZZzVmzBhNnTpVaWlpKi4uVkxMjKRTV6M5d+I/ucuY49zpHmz2mvxZgQZp5cqV\nCgsLU6dOnerUzukbFKxalg31h6kxZ1p6erqys7PPukQV8J84d8LVOHfWP1zBvoRFRESoffv2VpeB\nSwhjDg0B4xiuxpirf7iCDQAAABjETY4AAACAQQRsAAAAwCACNgAAAGAQARsAAAAwiIANAAAAGETA\nBoAGbP369Vq1atU593/yySdatmyZJCklJUUpKSk1bnv79u2aNm1ajfavXr1aH3zwQY3bBoD6jHWw\nAaAB27x5s5588slz7j/9qO7a6NGjh3r06FGj/d9//7369OlT674AoD4hYAOAG8jMzNQzzzyjqqoq\ntWjRQh4eHioqKtIff/yhIUOGaOLEiSorK9PMmTP13XffqVGjRnr88cd1xx13aNu2bUpKSlJpaan8\n/f01c+ZMBQQEyG6368CBAwoICNC+ffs0Y8YMHTlyRD4+PoqPj5e3t7fS0tIkSR07dpQkbdu2TSNG\njNDvv/+uoUOHaty4cUpPT9fnn3+uo0ePKicnRzfffLOmT5+uzMxMJScnKzU1VTt37lRCQoJKS0vV\nokULLViwQL/99puSk5M1duxYbdq0SV9//bWaNWumuLg4bdy4Ub6+vtq/f78ee+wxvffee1Z+/ABg\nFAEbANzEb7/9pk2bNmnNmjXy9/fX3XffrePHj6tfv34aPXq01q5dq5KSEm3YsEH5+fl6+OGHNXDg\nQE2bNk2vvPKK2rdvry1btmjatGlaunSpfvrpJ1177bWSpMmTJyshIUHdu3fXL7/8oieeeEIbNmzQ\niBEjJEmRkZFKSUlRQUGB3nrrLRUVFSk8PFx///vfJUk//PCD3n//fdlsNg0ePFj333+/JMlms0mS\nJk2apEmTJqlfv35KS0vT8uXL1a9fP9lsNt1www0KDw9Xnz59FBERoYyMDH344YcaOnSo1q1bp7vv\nvtuCTxsAnIeADQBuomvXrvLz89PDDz+sr7/+Wm+88Yb27NmjiooKlZSU6JtvvtF9990nSWrTpo3e\nffdd7dmzR/v27dPjjz+u0w/mPXHihKRT00PCwsJ04sQJ/fTTT4qNjXW8prS0VEePHj2jhrCwMHl5\necnf31/+/v6O1/ztb3+Tj4+PJKlTp07Vji0sLNQff/yhfv36SZIjtGdmZp71fQ4dOlQpKSkaOnSo\n3nvvPS1fvrzOnx0AuBMCNgC4icaNG0uSkpKStH//ft15550aMGCAvvzyS9ntdnl5VT9l79u3T5WV\nlbriiiuUnp4uSbLb7crPz5d0KuA++uijKisrU5MmTRyvkaRDhw6pRYsWZ9Tg6enp+NpmszkCube3\nd7XXnd4uSY0aNaq2r6ysTIcOHTrn+wwNDdWhQ4f08ccfq1OnTmrbtu25PxQAqIdYRQQA3MzWrVs1\nevRoDRo0SAcOHNChQ4dUWVmpkJAQ/fvf/5YkFRQUKDo6WgEBATp69Ki+/fZbSdKaNWs0ceJEFRYW\nytfXV97e3vLz81Pnzp21fv16SdIXX3yhkSNHSjoVqCsrK89ax59D9Pn4+fmpQ4cO+vLLLyVJ69at\nU3JycrXXeHp6qry83PH93XffrdmzZ2vo0KEX8ckAQP3AFWwAcDOPPfaYJk2apObNm6tNmzbq0aOH\ncnNzFRUVpdmzZ+uuu+6SzWbTtGnT5Ofnp+eff16zZ8/WyZMn1axZMyUlJWnLli26+eabHW0uWLBA\n06dP15IlS+Tt7a3nnntO0qmryVOmTFGbNm3OqOP0/OqabJ8/f75mzJih+fPny9/fX/Pnz9fevXsd\n+2+88UYtWrRILVq00KBBg3THHXdo6dKlioiIqOvHBQBux2av6SUKAAAMsNvtWrVqlX799VfFxcVZ\nXQ4AGMcVbACAS40bN055eXl6/fXXrS4FAJyCK9gAAACAQdzkCAAAABhEwAYAAAAMImADAAAABhGw\nAQAAAIMI2AAAAIBB/x+85v9ciMpMJQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11c9eb208>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.set_context(font_scale=1.5)\n",
"plt.subplots(figsize=(12,6))\n",
"sns.boxplot(x=\"race/ethnicity\", y=\"rate\", hue=\"age group\", \n",
" data=inpatient_pool_year_samples.assign(rate=inpatient_pool_year_samples.value*10000),\n",
" palette=\"gray_r\", linewidth=0.6, fliersize=0)\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Outpatient Model\n",
"\n",
"Import outpatient denominator information."
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from redcap import Project\n",
"api_url = 'https://redcap.vanderbilt.edu/api/'\n",
"api_key = open(\"/Users/fonnescj/Dropbox/Collaborations/Halasa/Tokens/outpatient_token.txt\").read()"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"outpatient_project = Project(api_url, api_key)"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"outpatients = outpatient_project.export_records(format='df')"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"year\n",
"2012 15969\n",
"2015 17562\n",
"Name: year, dtype: int64"
]
},
"execution_count": 77,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"outpatients.groupby('year').year.count()"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(393, 15)"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"outpatients[(outpatients.ptage<5) & (outpatients.ptethnicity=='HL') & (outpatients.year==2012)].shape"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"outpatients_kids = outpatients[(outpatients.ptage<=18) \n",
" & (outpatients.ptrace.isin(['B','W'])) \n",
" & (outpatients.ptethnicity.isin(['NH', 'HL']))].copy()"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"B 12119\n",
"W 10179\n",
"Name: ptrace, dtype: int64"
]
},
"execution_count": 80,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"outpatients_kids.ptrace.value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"NH 18859\n",
"HL 3439\n",
"Name: ptethnicity, dtype: int64"
]
},
"execution_count": 81,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"outpatients_kids.ptethnicity.value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"outpatients_kids['under_5'] = (outpatients_kids.ptage<5).astype(int)\n",
"outpatients_kids['black'] = (outpatients_kids.ptrace=='B').astype(int)\n",
"outpatients_kids['hispanic'] = (outpatients_kids.ptethnicity=='HL').astype(int)"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>year</th>\n",
" <th>black</th>\n",
" <th>hispanic</th>\n",
" <th>under_5</th>\n",
" <th>n</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2012</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2692</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2012</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>379</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2012</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1262</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2012</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>176</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2012</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>5081</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>2012</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>455</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>2012</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>88</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>2012</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>14</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>2015</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2276</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>2015</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1629</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>2015</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1129</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>2015</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>636</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>2015</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>4301</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>2015</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>2046</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>2015</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>84</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>2015</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>50</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" year black hispanic under_5 n\n",
"0 2012 0 0 0 2692\n",
"1 2012 0 0 1 379\n",
"2 2012 0 1 0 1262\n",
"3 2012 0 1 1 176\n",
"4 2012 1 0 0 5081\n",
"5 2012 1 0 1 455\n",
"6 2012 1 1 0 88\n",
"7 2012 1 1 1 14\n",
"8 2015 0 0 0 2276\n",
"9 2015 0 0 1 1629\n",
"10 2015 0 1 0 1129\n",
"11 2015 0 1 1 636\n",
"12 2015 1 0 0 4301\n",
"13 2015 1 0 1 2046\n",
"14 2015 1 1 0 84\n",
"15 2015 1 1 1 50"
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"outpatient_n = (outpatients_kids.rename(columns={'ptname':'n'})\n",
" .groupby(['year', 'black', 'hispanic', 'under_5'])\n",
" .n.count()\n",
" .reset_index())\n",
"outpatient_n"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>black</th>\n",
" <th>hispanic</th>\n",
" <th>under_5</th>\n",
" <th>n</th>\n",
" <th>year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2553</td>\n",
" <td>2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>795</td>\n",
" <td>2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1217</td>\n",
" <td>2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>329</td>\n",
" <td>2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>4821</td>\n",
" <td>2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>985</td>\n",
" <td>2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>86</td>\n",
" <td>2013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>26</td>\n",
" <td>2013</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" black hispanic under_5 n year\n",
"0 0 0 0 2553 2013\n",
"1 0 0 1 795 2013\n",
"2 0 1 0 1217 2013\n",
"3 0 1 1 329 2013\n",
"4 1 0 0 4821 2013\n",
"5 1 0 1 985 2013\n",
"6 1 1 0 86 2013\n",
"7 1 1 1 26 2013"
]
},
"execution_count": 84,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"interp_2013 = (outpatient_n.groupby(['black','hispanic','under_5'])\n",
" .apply(lambda x: np.interp(2013, x.year, x.n))\n",
" .astype(int)\n",
" .reset_index()).assign(year=2013).rename(columns={0:'n'})\n",
"interp_2013"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>black</th>\n",
" <th>hispanic</th>\n",
" <th>n</th>\n",
" <th>under_5</th>\n",
" <th>year</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2692</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>379</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1262</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>176</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>5081</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>455</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>88</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>14</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>2553</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>795</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1217</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>329</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>4821</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>985</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>86</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>26</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" black hispanic n under_5 year\n",
"0 0 0 2692 0 0\n",
"1 0 0 379 1 0\n",
"2 0 1 1262 0 0\n",
"3 0 1 176 1 0\n",
"4 1 0 5081 0 0\n",
"5 1 0 455 1 0\n",
"6 1 1 88 0 0\n",
"7 1 1 14 1 0\n",
"0 0 0 2553 0 1\n",
"1 0 0 795 1 1\n",
"2 0 1 1217 0 1\n",
"3 0 1 329 1 1\n",
"4 1 0 4821 0 1\n",
"5 1 0 985 1 1\n",
"6 1 1 86 0 1\n",
"7 1 1 26 1 1"
]
},
"execution_count": 85,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"outpatient_n = pd.concat([outpatient_n, interp_2013], axis=0)\n",
"outpatient_n = outpatient_n[outpatient_n.year<2015]\n",
"outpatient_n = outpatient_n.assign(year=outpatient_n.year-2012)\n",
"outpatient_n"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"outpatient_data_full = setting_data[OUTPATIENT].drop(['setting','n'], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"outpatient_merged = outpatient_data_full.merge(outpatient_n, on=['black','hispanic','under_5','year'])"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>under_5</th>\n",
" <th>year</th>\n",
" <th>black</th>\n",
" <th>hispanic</th>\n",
" <th>cases</th>\n",
" <th>n</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>28</td>\n",
" <td>2692</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>68</td>\n",
" <td>1262</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>52</td>\n",
" <td>5081</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>22</td>\n",
" <td>2553</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>63</td>\n",
" <td>1217</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>35</td>\n",
" <td>4821</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>40</td>\n",
" <td>379</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>144</td>\n",
" <td>176</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>109</td>\n",
" <td>455</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>38</td>\n",
" <td>795</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>138</td>\n",
" <td>329</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>96</td>\n",
" <td>985</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>26</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>88</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>86</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>14</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" under_5 year black hispanic cases n\n",
"0 0 0 0 0 28 2692\n",
"1 0 0 0 1 68 1262\n",
"2 0 0 1 0 52 5081\n",
"3 0 1 0 0 22 2553\n",
"4 0 1 0 1 63 1217\n",
"5 0 1 1 0 35 4821\n",
"6 1 0 0 0 40 379\n",
"7 1 0 0 1 144 176\n",
"8 1 0 1 0 109 455\n",
"9 1 1 0 0 38 795\n",
"10 1 1 0 1 138 329\n",
"11 1 1 1 0 96 985\n",
"12 1 1 1 1 1 26\n",
"13 0 0 1 1 0 88\n",
"14 0 1 1 1 0 86\n",
"15 1 0 1 1 0 14"
]
},
"execution_count": 88,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"outpatient_merged"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def generate_outpatient_model(outpatient_data, pool_years=False):\n",
"\n",
" with Model() as model:\n",
"\n",
" cases,n = outpatient_data[['cases','n']].values.T\n",
"\n",
" ω = monitoring_rate[INPATIENT]\n",
"\n",
" shape = outpatient_data.shape[0]\n",
"\n",
" if pool_years:\n",
" \n",
" assert not len(cases) % 3\n",
" \n",
" shape = int(len(cases)/3)\n",
" \n",
" cases = cases.reshape((pooled_shape, 3)).sum(-1)\n",
" \n",
" π = Beta('π', 1, 10, shape=shape)\n",
"\n",
" AGE_obs = Binomial('AGE_obs', n, π*ω, observed=cases)\n",
" \n",
" return model"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Applied logodds-transform to π and added transformed π_logodds to model.\n"
]
}
],
"source": [
"outpatient_model_full = generate_outpatient_model(outpatient_merged)"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" [-----------------100%-----------------] 2000 of 2000 complete in 3.9 sec"
]
}
],
"source": [
"with outpatient_model_full:\n",
" start = find_MAP()\n",
" step = NUTS(scaling=start)\n",
" outpatient_full_trace = sample(2000, step, start, njobs=2, random_seed=seed_numbers)"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.gridspec.GridSpec at 0x1221b8be0>"
]
},
"execution_count": 92,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAMPCAYAAAD/0y6/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3X98lXXdx/H3GYcfKihpobdlopCArBKVPAzWAXGSGwM2\nAXG6WZmWqVkLEXKh0rSmtQgQNSoWVFoYM3PU7IY495QdRNPkQE6THdHUO+UWGb82jvvef5x2YDLG\ndnaN872uvZ6Px3lcO+c653t9dnHOxXvf73Wur88YYwQAAGCRtFQXAAAA8GEEFAAAYB0CCgAAsA4B\nBQAAWIeAAgAArENAAQAA1iGgoNutXLlSX/jCF5SXl6dvf/vbev/99xPrAoGA8vLyErcnnnhCkvTI\nI48oJydHs2bN0r/+9a/E86+//npt27at3e397W9/01e+8hXl5eUpNzdXX/va1/TKK690+ff43ve+\npyVLlkiSvvrVr+rVV1/VM888o9zc3DafP2/ePC1fvrxT21iyZIlKS0uP+rz7779f69at61TbyWjv\n9wPQMcOHD9eUKVM0bdo05eXl6Qtf+IJmzJihSCTS5vM7ehz4sGuvvVY7d+7sarnW8Ke6AHhbOBzW\nz3/+c/3ud7/ToEGD9Ic//EHf/e53tWjRItXX12vgwIGqrKw87HXLli1TdXW1nnzySf3617/WnDlz\n9Oc//1lDhw7V2WeffcTtbdq0SXPmzNHSpUs1YsQISdIf//hHFRYW6k9/+pM+8pGPOPJ7PfTQQ5Kk\nHTt2ONJeZ4XDYX3qU59KybYBdI7P59PKlSt10kknJR77xS9+odLSUj3yyCOObefpp592rC0bEFDQ\nrbZu3aoxY8Zo0KBBkqRLL71UJSUlisViev7555WWlqaioiLt3LlTkyZN0te//nX5fD717t1b+/fv\n1969exM/L1++/Kg9EosXL9aNN96YCCeSlJubq379+qm5uVnPPPOM7r77bh133HHav3+/Vq1apZqa\nGj344IOKxWLq16+f5syZo/POO0+7d+9WSUmJ6urq9LGPfUy9evXSBRdcIEm6+OKLtXjxYknSnj17\n9I1vfEPbt2/XiSeeqO9973s688wzW9X16quv6p577tHOnTvV3NyswsJC5efnt/u7zJs3TyeccIJe\nfvllvf322zr77LP14x//WKtXr1YkEtG9996rtLQ0BYNB/fCHP9SmTZvU3NysESNGqKSkRCeccIIu\nvvhiffazn9XLL7+sG2+8UQ888ID++Mc/SpIaGho0ceJErV27Vs8++6weeughxWIx/d///Z+mTp2q\nW265pVU9zz77rMrKytTc3Cyfz6evfvWrysrK6sC7AOjZjDE69JqoH3zwgd58800NHDjwiK959dVX\nVVRUpHfeeUcf/ehH9eMf/1gf/ehH9de//rXVZ3XatGn6xje+oXnz5kmSioqKtGzZMp166qnd/nt1\nOwN0o02bNpkJEyaYN9980xhjzMqVK83w4cPNO++8Y373u9+Z0tJSc+DAAdPQ0GBmzZplfvnLXxpj\njKmurjZ5eXnmuuuuMzt27DA//vGPzR/+8Iejbm/UqFHmn//85xHXb9y40Zx77rnmrbfeMsYYE41G\nzeTJk83OnTuNMca88sorZuzYsWbfvn3m7rvvNnPnzjXGGLNjxw4TDAbN4sWLjTHGTJgwwUQikUR7\nL7zwgjHGmN/+9rdmxowZxhhj5s6da37xi1+YWCxmcnJyzNatW40xxjQ0NJjs7Gzz97///bD6Fi9e\nbL73ve8lXn/llVeaAwcOmAMHDpi8vDyzevVqY4wxV199tXnyySeNMcYsWbLE3HvvvYk2ysvLzV13\n3ZWoc+nSpYl1EydONJFIxBhjzG9+8xtz6623GmOMKSoqMq+99poxxpj//d//Neeee6557733zMaN\nG83kyZONMcZcc801pqqqyhhjzEsvvWQWLFjQ/j8GAGOMMcOGDTO5ublmypQpZty4cWbixImmtLTU\n7Nixo83nL1682FxyySXmvffeM8YY8/Wvfz3xOT7SZ7VlOy3HMi+gBwXd6sILL9SNN96oG2+8UWlp\nabr88st10kknqXfv3poxY0bief3799eXvvQlrVy5UkVFRbr00kt16aWXSpK2b9+uv//977rlllt0\nzz336F//+pdGjx6tL37xi4dtLy0trdVfKm057bTTdNppp0mKd4m+++67+uIXv5h4nd/vVzQaVW1t\nrW6//XZJ0sknn6xLLrmkzfaGDRumz372s5KkvLw83XXXXdq9e3difTQa1fbt2/Wd73wnsY3GxkZt\n3bpVn/nMZ9qtNTMzU35//GN6zjnntDp/p6Wt9evXq6GhIdG9G4vFdMoppySed+GFFyZ+vvzyy1VZ\nWamRI0dq9erVmjNnjiTpgQce0Pr16/X4448nzvHZt29fq1ouu+wyLViwQOvWrVNGRoa+9a1vtVs7\ngINahnj+8Y9/6LrrrtOoUaN08sknH/H5GRkZiR6W4cOHJ4aTj/RZbXnu0Y5/bkJAQbfas2ePRo8e\nrcsvv1xS/JyNn/zkJzrppJP0hz/8QcOHD9ewYcMkxT9YvXv3PqyNH/zgB7rtttu0YcMG7d27V/ff\nf7+uvfZaTZw4UWeccUar55533nl6/vnnNXTo0FaPL1iwQFlZWerVq5eOP/74xOPNzc0aM2aMysvL\nE4+9/fbbGjRokHw+X6sPe0tQ+LC0tIPnmhtjEkNULT744AOdeOKJrc612bFjhwYMGHDkHfcf/fr1\nS/z84XoObf/2229XZmampPjBqrGxMbH+0N83Pz9f+fn5mj59uhoaGjR69Gjt27dPeXl5ysrK0oUX\nXqjp06frv//7vw/b1hVXXKGLL75YTz/9tP7nf/5HS5Ys0eOPP67+/fsf9fcAerqWz9OIESM0b948\n3X777TrvvPN0+umn6/rrr9e///1v+Xw+feMb35CkVscQn88nKf7ZnjZtmi699NJ2P6te0SO+xdNy\nrgDa1x376d///rcKCwsTPQpLly7V5MmTJUmvvPKKFi9erObmZu3fv1+/+tWvlJ2d3er1f/3rX3Xq\nqadq+PDhampqahUS9u/ff9j2vva1r2np0qXaunVr4rHVq1frySefTAShQwUCAT399NOJv0RCoZCm\nTp2qpqYmZWZm6tFHH5UxRu+//77Wrl2beN2uXbsSP7/00kt66aWXJEm//e1vdf7556tv376J9Wed\ndZb69u2rxx9/XJL01ltvafLkydqyZUsH9+Lh/H6/YrGYpHgvy69//WsdOHBAzc3Nuv3221sFrkOd\neuqp+vSnP6358+cnerBee+017dmzR9/85jc1fvx4bdy4UQcOHNAHH3zQ6rWzZs3S1q1bNW3aNC1Y\nsEANDQ2t9kNb+Ox1HPvKebbu05ycHJ1//vm6++67JUk//elP9dhjj6myslITJkxIPO/D9b/22mva\nu3fvET+rhx4XUs2Jfd8jAkrLV0PRvu7YT2eddZauv/56zZw5U5dddpkaGxsTwwo33XSTTjrpJOXm\n5mrq1Km64IILNH369MRrm5qa9OCDDyaGEsaOHat//etfmjZtmj7xiU+0+S2WCy+8UKWlpSotLVVe\nXp4mT56sv/zlL1qxYkWb3alDhw7VggULVFxcrGnTpmnRokV64IEH1K9fP918883y+/267LLL9PWv\n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\n8vLyY1ydXY62r1588UVdddVVuuqqq3TLLbeoqakpRZWm3tH21eOPP678/HzNmDFDDz/8cIqqdL+/\n//3vKiwsTHUZHXakeisqKjR58mQVFRWpqKhI0Wj02Bd3FLFYTHPmzNFVV12lmTNnat26dc40bDzi\nySefNHPnzjXGGPPCCy+YG264IbHuwIEDJisryzQ0NJimpiZz+eWXmx07dqSq1JRrb1/t37/fZGVl\nmcbGRmOMMcXFxWbdunUpqTPV2ttPLR5++GFzxRVXmB/96EfHujyrHG1fTZ061Wzfvt0YY8yqVatM\nfX39sS7RGkfbV2PHjjW7du0yTU1NJisry+zatSsVZbrasmXLzOTJk80VV1yR6lI6pL16Z8+ebbZs\n2ZKCqjru97//vbnnnnuMMcbs3LnTjB8/3pF2PdOD8txzzykzM1OS9NnPflaRSCSx7tVXX9WZZ56p\n/v37q3fv3rrgggu0adOmVJWacu3tqz59+uiRRx5Rnz59JMWTcd++fVNSZ6q1t58k6fnnn9fmzZs1\na9asVJRnlfb2VX19vQYOHKjly5ersLBQ77//vgYPHpyiSlPvaO+r4cOH6/3331djY6MkyefzHfMa\n3e7MM8/U/fffn+oyOqy9erds2aKHHnpIBQUF+ulPf3qMK+uYyy67TLfccoskqbm5WX6/P7Hu4osv\nTrrH1DMBZffu3RowYEDivt/vV3Nzc5vrTjjhBDU0NBzzGm3R3r7y+Xw6+eSTJUkrV67Uvn37lJGR\nkZI6U629/fTOO+9oyZIlmj9/vgwXY253X7333nt64YUXVFhYqOXLl2vDhg3auHFjqkpNufb2lSR9\n6lOf0uWXX67c3FyNHz9e/fv3T0WZrpaVlaVevXqluowOa6/enJwc3XXXXVqxYoWee+45hUKhY1zd\n0R133HE6/vjjtXv3bt1yyy365je/qXnz5qmwsFA7duzQtddeqy996Uudbtd/9Ke4Q//+/bVnz57E\n/ebmZqWlpSXW7d69O7Fuz549OvHEE495jbZob19J8THye++9V6+99pqWLFmSihKt0N5++vOf/6yd\nO3fquuuu0zvvvKPGxkadffbZmjZtWqrKTan29tXAgQP1yU9+UmeddZYkKTMzU5FIxNVzjHRFe/uq\nrq5O69ev17p163T88cdr9uzZqq6u1qRJk1JVLlLsmmuuSYTUYDCorVu3KhgMpriqw7311lu66aab\ndPXVVysnJ0c5OTmS4j0ov/jFL9S7d+9Ot+mZHpTzzz8/kSxfeOEFnXPOOYl1Q4YM0WuvvaZdu3ap\nqalJmzZt0nnnnZeqUlOuvX0lSd/97nd14MABLV26NDHU0xO1t58KCwv1+9//XitWrND111+vyZMn\n99hwIrW/r8444wzt3bs3cTLoc889p6FDh6akThu0t68GDBig4447Tn369En0Zu7atStVpbqe23o3\nP1zv7t27NXnyZO3bt0/GGIXDYY0cOTJF1R3Zu+++q2uvvVa33nqr8vLyWq3z+XxJ/zt4pgclKytL\nTz/9dOJ8gO9///t64okntG/fPs2YMUPz5s3Tl7/8ZRljNGPGDA0aNCjFFadOe/tq5MiRWr16tS64\n4AIVFhbK5/OpqKhIl1xySYqrPvaO9p7CQUfbV3fffbeKi4slSaNGjbLyL8Bj5Wj7quUbdH369NEn\nP/nJww746Di3nb/TUu+h74fi4mIVFhaqb9++GjNmjD7/+c+nuMrDPfTQQ9q1a5eWLl2q+++/Xz6f\nTz/72c/Up08frV27Nul2mc0YAABYxzNDPAAAwDsIKAAAwDoEFAAAYB0CCgAAsA4BBQAAWIeAAuD/\n261jAQAAAIBB/tbT2FEUAewICgCwEySoqpa1KI3MAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x104884320>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.subplots(figsize=(8,12))\n",
"forestplot(outpatient_full_trace[1000:], varnames=['π'])"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"outpatient_data_labels = inpatient_data_labels[inpatient_data_labels.year.isin(['2012/13','2013/14'])]"
]
},
{
"cell_type": "code",
"execution_count": 94,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/fonnescj/anaconda3/lib/python3.5/site-packages/numpy/core/fromnumeric.py:225: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n",
" return reshape(newshape, order=order)\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr>\n",
" <th></th>\n",
" <th>race</th>\n",
" <th colspan=\"2\" halign=\"left\">black</th>\n",
" <th colspan=\"2\" halign=\"left\">white</th>\n",
" </tr>\n",
" <tr>\n",
" <th></th>\n",
" <th>ethnicity</th>\n",
" <th>hispanic</th>\n",
" <th>non-hispanic</th>\n",
" <th>hispanic</th>\n",
" <th>non-hispanic</th>\n",
" </tr>\n",
" <tr>\n",
" <th>age</th>\n",
" <th>year</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">5+</th>\n",
" <th>2012/13</th>\n",
" <td>973.57 (804.49, 1149.48)</td>\n",
" <td>103.82 (78.73, 131.44)</td>\n",
" <td>542.07 (411.50, 646.74)</td>\n",
" <td>107.32 (71.36, 149.99)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2013/14</th>\n",
" <td>539.15 (27.72, 1234.00)</td>\n",
" <td>396.80 (0.10, 1126.13)</td>\n",
" <td>521.78 (405.35, 652.50)</td>\n",
" <td>90.36 (55.57, 128.20)</td>\n",
" </tr>\n",
" <tr>\n",
" <th rowspan=\"2\" valign=\"top\">&lt;5</th>\n",
" <th>2012/13</th>\n",
" <td>105.93 (0.10, 322.00)</td>\n",
" <td>7748.09 (7142.60, 8349.21)</td>\n",
" <td>1051.22 (756.89, 1333.33)</td>\n",
" <td>74.36 (51.22, 98.51)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2013/14</th>\n",
" <td>102.21 (0.01, 308.45)</td>\n",
" <td>4084.32 (3576.56, 4616.85)</td>\n",
" <td>486.26 (338.46, 627.66)</td>\n",
" <td>2363.01 (1974.50, 2774.73)</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"race black \\\n",
"ethnicity hispanic non-hispanic \n",
"age year \n",
"5+ 2012/13 973.57 (804.49, 1149.48) 103.82 (78.73, 131.44) \n",
" 2013/14 539.15 (27.72, 1234.00) 396.80 (0.10, 1126.13) \n",
"<5 2012/13 105.93 (0.10, 322.00) 7748.09 (7142.60, 8349.21) \n",
" 2013/14 102.21 (0.01, 308.45) 4084.32 (3576.56, 4616.85) \n",
"\n",
"race white \n",
"ethnicity hispanic non-hispanic \n",
"age year \n",
"5+ 2012/13 542.07 (411.50, 646.74) 107.32 (71.36, 149.99) \n",
" 2013/14 521.78 (405.35, 652.50) 90.36 (55.57, 128.20) \n",
"<5 2012/13 1051.22 (756.89, 1333.33) 74.36 (51.22, 98.51) \n",
" 2013/14 486.26 (338.46, 627.66) 2363.01 (1974.50, 2774.73) "
]
},
"execution_count": 94,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"generate_table(outpatient_full_trace, outpatient_data_labels, varnames=['π'], \n",
" index=['age', 'year'], columns=['race', 'ethnicity'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ED Model"
]
},
{
"cell_type": "code",
"execution_count": 95,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"ED2 = pd.read_excel('FINAL year 2 for CDC.xlsx', skiprows=3, parse_cols='B:H', index_col=0).fillna(0)\n",
"ED3 = pd.read_excel('Final year 3 CDC.xlsx', skiprows=3, parse_cols='B:H', index_col=0).fillna(0)\n",
"ED2.columns = ED3.columns"
]
},
{
"cell_type": "code",
"execution_count": 96,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"ED2_total = ED2.sum()\n",
"ED2_eligible = (ED2_total['Total Eligible on Date (Age > 14 Days and < 5 Years)'], \n",
" ED2_total[['Total Eligible on Date (Age > 5 Years and < 11 Years)',\n",
" 'Total Eligible on Date (Age > 11 Years and < 18 Years)']])\n",
"ED2_visits = (ED2_total['Total Visits to ED on Date (Age > 14 Days and < 5 Years)'],\n",
" ED2_total[['Total Visits to ED on Date (Age > 5 Years and < 11 Years)',\n",
" 'Total Visits to ED on Date (Age > 11 Years and < 18 Years)']])"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"ED3_total = ED3.sum()\n",
"ED3_eligible = (ED3_total['Total Eligible on Date (Age > 14 Days and < 5 Years)'], \n",
" ED3_total[['Total Eligible on Date (Age > 5 Years and < 11 Years)',\n",
" 'Total Eligible on Date (Age > 11 Years and < 18 Years)']])\n",
"ED3_visits = (ED3_total['Total Visits to ED on Date (Age > 14 Days and < 5 Years)'],\n",
" ED3_total[['Total Visits to ED on Date (Age > 5 Years and < 11 Years)',\n",
" 'Total Visits to ED on Date (Age > 11 Years and < 18 Years)']])"
]
},
{
"cell_type": "code",
"execution_count": 98,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"ED_all = pd.concat([ED2, ED3])\n",
"eligible_cols = ED_all.columns[ED_all.columns.str.contains('Eligible')]"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"ED_counts = ED_all[eligible_cols].sum(1).astype(int)"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"rotavirus_ed = rotavirus_data[rotavirus_data.ED==1]\n",
"surveillance_counts = rotavirus_data.groupby(['Enrollment Date'])['Record ID'].count()"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"ED_counts.name = 'count24'\n",
"surveillance_counts.name = 'count8'"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"surveillance = pd.concat([ED_counts, surveillance_counts], axis=1).dropna()\n",
"# Drop days where 8-hour count exceeds 24-hour count\n",
"surveillance = surveillance[surveillance.count8<=surveillance.count24]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here is what it looks like if you resample to weekly"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x12332b940>"
]
},
"execution_count": 103,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n6urq3BgtIaLtN2nSJOeDDz5wHMdxfv3rXztHjx5N9YjXpCtfn47jOO+++67z0EMPOeFwOJXjXbNo\n+91zzz1OU1OT09bW5pSWljpNTU1ujBmXSLudPn3a+fa3v+00NTU54XDYmT17tnP8+HG3Ro3b5s2b\nnYkTJzozZsy44v3BYNApLS11zp8/77S1tTlTpkxxTp06FfX2UvKUeCAQ0KhRoyRJw4YNU21tbfux\njIwMbd++vf3/1V+6dEmZmZmpGCthIu3n9Xr1xhtvKCsrS2fOnJHjOPL5fG6NGrNIu0nSu+++q/fe\ne6/9X26zJtp+dXV12rRpk2bOnKnnnnvOjRGvSaT9jh49qry8PL3wwgsqKyvTuXPnTD17IEX//H1i\nzZo1WrVqlTweTyrHu2bR9rvtttt07tw5ffzxx5Jkar9Iu3344Ye6/fbblZOTI4/HozvuuEMHDx50\na9S4FRQUaMOGDR3e/49//EMFBQXKzs6Wz+dTcXGxDhw4EPX2UhLs5uZm5eTktL+dnp6ucDgs6fIX\n2CdPN27dulUtLS365je/mYqxEibSftLlaP/+97/XpEmTdPfdd6tPnz5ujBmXSLs1NjaqqqpKy5cv\nl2P0gnnRPncTJkzQqlWrtGXLFgUCAf3xj390Y8y4RdrvzJkzOnjwoMrKyvTCCy/oz3/+s95++223\nRo1LtM+fdPmpxyFDhpj8p3yj7Td48GBNmTJF3/3ud/Wtb31L2dnZbowZl0i7DRw4UH//+991+vRp\ntbS0qKamRi0tLW6NGrfS0lKlpaV1eP9/756VlaXz589Hvb2UBDs7O1sXLlxofzscDsvr/fSuHcfR\nk08+qZqaGlVVVaVipISKtp90+RP3pz/9SW1tbXr11VdTPWLcIu32u9/9TmfPntXDDz+s5557Tjt3\n7jS1mxT9c/fQQw8pLy9P6enpuvfee3X48GE3xoxbpP3y8vJ0880368tf/rLS09M1atSoTh+hdldd\n+d7bsWOHpk+fnurREiLSfkeOHNGbb76pvXv3au/evTp16pR27drl1qgxi7Rbbm6uFi9eLL/fr4UL\nF6qwsFB9+/Z1a9SEy87OVnNzc/vbFy5cUG5ubtTzUhLs4cOHtz8yOXjwoIYMGXLF8WXLlikYDGrj\nxo2mfuHlE5H2a25uVllZmdra2iRJvXv3NvW0VaTdysrK9Morr2jLli165JFHNHHiRE2ePNmtUeMS\n7XM3ceJEtbS0yHEcvfXWWyosLHRr1LhE2m/AgAG6ePGiPvzwQ0mXn6K85ZZbXJkzXtF+tkhSbW2t\n7rzzzlSPlhCR9svJyVHv3r2VkZHR/kxlU1OTW6PGLNJuoVBIdXV1evnll/Xzn/9cR48e1fDhw90a\n9Zr99zOQgwYN0rFjx9TU1KS2tjYdOHBAX/va16LeTkp+S7y0tFT79+9vf53ziSee0M6dO9XS0qLC\nwkL99re/VXFxscrKyuTxeDR79myNGTMmFaMlRKT9pk2bpu9973uaNWuWfD6fbr31Vk2aNMnlibsu\n2m7WRdtvwYIFKisrU2Zmpr7xjW9o9OjRLk8cm2j7rVu3rv03+++8807de++9bo4bs2j7nT59+oqn\nHq2Jtt/06dM1c+ZMZWRk6Oabb9Z9993n8sRd15WfLffdd58yMzM1d+5c5eXluTnuNfnkQdpn91uy\nZInmzp0rx3E0bdo0feELX4h+O47VFx8BALiOcOEUAAAMINgAABhAsAEAMIBgAwBgAMEGAMAAgg0A\ngAEEGwAAA/4faigpzbUnsTQAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11e558470>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"weekly_surveillance = surveillance.reindex(pd.to_datetime(surveillance.index)).resample('1W').sum()\n",
"(weekly_surveillance.count8 / weekly_surveillance.count24).hist()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will just use the proportion of the pooled suveillance"
]
},
{
"cell_type": "code",
"execution_count": 104,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"count24 3486.0\n",
"count8 1849.0\n",
"dtype: float64"
]
},
"execution_count": 104,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"surveillance_total = surveillance.sum()\n",
"surveillance_total"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.53040734366035569"
]
},
"execution_count": 105,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"surveillance_proportion = surveillance_total.count8 / surveillance_total.count24\n",
"surveillance_proportion"
]
},
{
"cell_type": "code",
"execution_count": 106,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def generate_ed_model(ED_data):\n",
"\n",
" with Model() as model:\n",
" \n",
" data_len = ED_data.shape[0]\n",
"\n",
" cases, n = ED_data[['cases','n']].values.T\n",
"\n",
" weights = (np.array(monitoring_rate)[ED] \n",
" * np.array(ed_market_share[:-1])[ED_data.year]\n",
" * surveillance_proportion)\n",
"\n",
" weighted_cases = DiscreteUniform('weighted_cases', cases, n, shape=data_len,\n",
" testval=(cases/weights).astype(int))\n",
" weighting = Binomial('weighting', n=weighted_cases, p=weights, observed=cases)\n",
"\n",
"\n",
" θ = Normal('θ', 0, sd=1000, shape=data_len)\n",
"\n",
" λ = Deterministic('λ', tt.exp(θ))\n",
"\n",
" age_vanderbilt = Poisson('age_vanderbilt', λ * n, observed=weighted_cases)\n",
" \n",
" return model"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>under_5</th>\n",
" <th>year</th>\n",
" <th>cases</th>\n",
" <th>n</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>219</td>\n",
" <td>102191</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>203</td>\n",
" <td>103789</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>497</td>\n",
" <td>40548</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>533</td>\n",
" <td>41013</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" under_5 year cases n\n",
"0 0 0 219 102191\n",
"1 0 1 203 103789\n",
"2 1 0 497 40548\n",
"3 1 1 533 41013"
]
},
"execution_count": 107,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ed_pool_race_data = (setting_data[ED].drop('setting', axis=1)\n",
" .query('year<2')\n",
" .groupby(['under_5', 'year'])[['cases','n']]\n",
" .sum()\n",
" .reset_index())\n",
"ed_pool_race_data"
]
},
{
"cell_type": "code",
"execution_count": 108,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"ed_model = generate_ed_model(ed_pool_race_data)"
]
},
{
"cell_type": "code",
"execution_count": 109,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Assigned Metropolis to weighted_cases\n",
" [-----------------100%-----------------] 2000 of 2000 complete in 3.7 sec"
]
}
],
"source": [
"with ed_model:\n",
" start = find_MAP()\n",
" step = NUTS(scaling=start)\n",
" ed_trace = sample(2000, step, start, njobs=2, random_seed=seed_numbers)"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.gridspec.GridSpec at 0x126433f28>"
]
},
"execution_count": 110,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiYAAAGCCAYAAADUqwgjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAH6NJREFUeJzt3XtU1HX+x/HXEK5Wlm6Weto2t3JT013N9IQWi4p4A1K8\nZSVkWdZmaVleUH+leEmqNRPFzC5ubnsqS7PS1FaTyMRLm56DZhfzUqZd2Cy8wsjn98essyICijPM\ne/D5OGfOCDPznfd8mfny5Dtf0OOccwIAADAgItQDAAAAHEOYAAAAMwgTAABgBmECAADMIEwAAIAZ\nhAkAADCDMEFQzZs3T126dFFSUpIefvhh/fLLL/7LoqKilJSU5D+9++67kqRXX31V8fHx6tevn3bv\n3u2//qBBg/T111+XeX///ve/dddddykpKUmJiYm699579eWXX57x45gwYYJmzJghSbrnnnu0bds2\nrVu3TomJiSe9fmpqql566aXTuo8ZM2Zo4sSJ5V5v5syZWrly5WktuyLKenwAyte4cWPddNNN6tGj\nh5KSktSlSxf16dNHubm5J73+qW4DTjRw4EDt27fvTMc1IzLUA6DqysnJ0QsvvKDXX39ddevW1aJF\ni/R///d/mj59urZv367atWtr4cKFJW43Z84cLVu2TMuXL9crr7yiESNGaOnSpWrYsKGuvPLKUu9v\n/fr1GjFihDIzM9WkSRNJ0jvvvKPk5GS99957+u1vfxuQxzV79mxJUl5eXkCWd7pycnL0xz/+MST3\nDeDUeTwezZs3T7Vq1fJ/7sUXX9TEiRP16quvBux+Vq9eHbBlWUCYIGi2bNmiNm3aqG7dupKkTp06\naezYsfJ6vfr0008VERGhlJQU7du3T507d9Z9990nj8ejatWq6fDhwzp48KD/3y+99FK5eyAyMjI0\nePBgf5RIUmJiomrUqKGioiKtW7dOkyZN0rnnnqvDhw9r/vz5ys7O1rPPPiuv16saNWpoxIgRatGi\nhfbv36+xY8fq888/1yWXXKJzzjlH1113nSSpQ4cOysjIkCQdOHBAQ4YM0a5du3ThhRdqwoQJatCg\nQbG5tm3bpsmTJ2vfvn0qKipScnKyevbsWeZjSU1N1fnnn68vvvhCe/fu1ZVXXqmnn35aCxYsUG5u\nrp544glFREQoJiZGTz31lNavX6+ioiI1adJEY8eO1fnnn68OHTqoefPm+uKLLzR48GDNmjVL77zz\njiQpPz9fsbGxWrFihTZs2KDZs2fL6/XqP//5j7p3766hQ4cWm2fDhg1KT09XUVGRPB6P7rnnHsXF\nxZ3CswA4eznndPzfMD169Ki+++471a5du9TbbNu2TSkpKfrxxx918cUX6+mnn9bFF1+sDz74oNjr\ntEePHhoyZIhSU1MlSSkpKZozZ47q1asX9McVdA4IkvXr17v27du77777zjnn3Lx581zjxo3djz/+\n6F5//XU3ceJEV1hY6PLz812/fv3c3//+d+ecc8uWLXNJSUnu7rvvdnl5ee7pp592ixYtKvf+rr32\nWvfVV1+VevnatWvdNddc4/bs2eOcc27Hjh0uISHB7du3zznn3JdffuluuOEGd+jQITdp0iQ3atQo\n55xzeXl5LiYmxmVkZDjnnGvfvr3Lzc31L2/jxo3OOedee+0116dPH+ecc6NGjXIvvvii83q9Lj4+\n3m3ZssU551x+fr7r1q2b27RpU4n5MjIy3IQJE/y3v+WWW1xhYaErLCx0SUlJbsGCBc455/r37++W\nL1/unHNuxowZ7oknnvAvY+rUqW78+PH+OTMzM/2XxcbGutzcXOecc//85z/d8OHDnXPOpaSkuJ07\ndzrnnPv+++/dNddc437++We3du1al5CQ4Jxz7vbbb3eLFy92zjm3detWl5aWVvYXA4Br1KiRS0xM\ndDfddJO78cYbXWxsrJs4caLLy8s76fUzMjJcx44d3c8//+ycc+6+++7zv4ZLe50eu59j27GqgD0m\nCJpWrVpp8ODBGjx4sCIiItSrVy/VqlVL1apVU58+ffzXq1mzpu644w7NmzdPKSkp6tSpkzp16iRJ\n2rVrlzZt2qShQ4dq8uTJ2r17t1q3bq0BAwaUuL+IiIhiP52cTP369VW/fn1Jvt2fP/30kwYMGOC/\nXWRkpHbs2KE1a9ZozJgxkqSLLrpIHTt2POnyGjVqpObNm0uSkpKSNH78eO3fv99/+Y4dO7Rr1y6N\nHj3afx9HjhzRli1b9Oc//7nMWaOjoxUZ6XuJXn311cWOzzm2rFWrVik/P9+/K9fr9apOnTr+67Vq\n1cr/7169emnhwoVq2rSpFixYoBEjRkiSZs2apVWrVuntt9/2H8Nz6NChYrN07dpVaWlpWrlypdq2\nbauHHnqozNkB+Bx7K+ezzz7T3XffrWuvvVYXXXRRqddv27atf49K48aN/W8Zl/Y6PXbd8rZ94YQw\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x126433cc0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"forestplot(ed_trace[1000:], varnames=['λ'])"
]
},
{
"cell_type": "code",
"execution_count": 111,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"ed_data_labels = (ed_pool_race_data[['under_5', 'year']]\n",
" .reset_index(drop=True)\n",
" .replace(label_map)\n",
" .rename(columns={'under_5':'age'}))"
]
},
{
"cell_type": "code",
"execution_count": 112,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/fonnescj/anaconda3/lib/python3.5/site-packages/numpy/core/fromnumeric.py:225: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n",
" return reshape(newshape, order=order)\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>age</th>\n",
" <th>5+</th>\n",
" <th>&lt;5</th>\n",
" </tr>\n",
" <tr>\n",
" <th>year</th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2012/13</th>\n",
" <td>75.29 (66.11, 84.55)</td>\n",
" <td>429.88 (396.08, 469.63)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2013/14</th>\n",
" <td>70.02 (61.57, 79.29)</td>\n",
" <td>464.98 (418.34, 507.64)</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"age 5+ <5\n",
"year \n",
"2012/13 75.29 (66.11, 84.55) 429.88 (396.08, 469.63)\n",
"2013/14 70.02 (61.57, 79.29) 464.98 (418.34, 507.64)"
]
},
"execution_count": 112,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"generate_table(ed_trace, ed_data_labels, index=['year'], columns=['age'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create data frame of MCMC samples for plotting"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"ed_rate_samples = pd.concat([ed_pool_race_data[['under_5', 'year']], \n",
" pd.DataFrame(ed_trace['λ'][-1000:]).T], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"ed_rate_samples = (pd.melt(ed_rate_samples, id_vars=['under_5', 'year'])\n",
" .replace({'under_5':{0:'5+', 1:'<5'},\n",
" 'year':{0:'2012/13', 1:'2013/14'}})\n",
" .rename(columns={'under_5':'age group'}))\n"
]
},
{
"cell_type": "code",
"execution_count": 122,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x122de23c8>"
]
},
"execution_count": 122,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfkAAAFqCAYAAAAZRCMJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X1UlHX+//HXDDcqDoh6TE12RVm0DFvPCkXriYOQSXdb\npHQERU22DhazFrapYVKriN3aLtieWjdbB/Muw1zruAW2Ubq72p7KNYratBJFS0OFSQFhfn/4cza/\nmGDOMPCZ5+MvvYbrmvfV6fLJXHPNXBaXy+USAAAwjtXXAwAAAO8g8gAAGIrIAwBgKCIPAIChiDw6\nlaKiIl+PAPgljj0zWbi6Hp3J8OHDVVVV5esxAL/DsWemQG8/wfPPP6+tW7eqqalJGRkZiouL09y5\nc2W1WhUdHa38/HxJ0rp167R27VoFBQUpOztbiYmJ3h4NAACjefV0/Y4dO/T+++9rzZo1cjgcqqmp\nUWFhoXJzc1VSUqKWlhaVlZXp8OHDcjgcWrt2rZYvX66nnnpKTU1N3hwNAADjeTXy7777roYNG6Z7\n7rlHM2fOVGJioiorKxUbGytJSkhI0Pbt27Vr1y6NHj1agYGBstlsioyM5LQRAAAXyaun62tra3Xg\nwAE999xz2rdvn2bOnKmWlhb34z179lR9fb2cTqdCQ0Pdy0NCQlRXV3fBz3fy5Ent3r1b/fr1U0BA\ngEf2AR2vurra1yMAfoljr+tpbm7WN998o5iYGHXv3r3V416NfHh4uKKiohQYGKghQ4aoW7duOnTo\nkPtxp9OpsLAw2Ww21dfXt1p+PkVFRSouLvba7PCd5ORkX48A+CWOPbPk5OR4N/KjR4+Ww+HQ9OnT\ndejQIZ04cULx8fHasWOHrrrqKlVUVCg+Pl4jR47U0qVL1djYqIaGBu3Zs0fR0dHn3bbdbpfdbj9r\n2Zdffqnrr79eq1at0oABA7y5awAA+NzBgwc1efJkvfHGGxo8eHCrx70a+cTERL333nuaOHGiXC6X\nHnnkEQ0aNEjz589XU1OToqKilJKSIovFoszMTGVkZMjlcik3N1fBwcEX/HxnTtEPGDBAERERnt4d\nAAA6pR96i9rrH6F74IEHWi1zOBytlqWlpSktLc3b4wAA4Df4xjsAAAxF5AEAMBSRBwDAUEQeAABD\nEXkAAAxF5AEAMBSRBwDAUEQeAABDef3LcDqj48ePKy8vT999951qa2u1cOFCjRgxQnPnztW+ffs0\ndOhQ7d+/XytWrNDGjRu1Zs0aSVJGRoZ+9atfubfjcrnOWufAgQN64YUXNG7cOA0aNEjjxo1Tjx49\ntHr1agUEBGj8+PG68847NW/ePKWnp+vKK69UcXGxhg4dqoaGBr355puqq6vTyZMn9dhjj2no0KG+\n+k8EADCAX0b+yy+/VEZGhq655hq9/vrreu2113TgwAHZbDa99NJL2rFjh4qLi1VbW6uSkhKtXbtW\nkjR58mSNHTvWfce8srKyVutI0uHDh/Xaa6/J6XQqKytL69evl8Vi0fTp05WQkPCDcwUHB8vhcOi9\n997TM888oz/84Q/e/48BADCWX0a+b9++cjgc2rRpk+rq6jRo0CB98cUXGjlypCRp1KhRkqR9+/bp\n4MGDuvPOO+VyueR0OrV//35ddtllkqS9e/e2WkeS+vfvr+DgYH3yyScaPny4+zuFr7zySu3du/es\nWVwul/vPcXFx7p/76quvvLT3AAB/4Zfvyb/44osaN26cCgsLNWLECLlcLkVFRek///mPJOnDDz+U\nJEVERGjo0KFauXKlHA6HbrnllrNufBMVFaXdu3eftY4kWSwW9/pVVVVqbm5Wc3OzPvjgA/30pz9V\ncHCw+5a7H3/8sXu9yspK97Y4VQ8AuFh++Uo+MTFRCxcu1IsvvqhLLrlEkpSUlKQ333xTmZmZ6t+/\nvwIDA9WnTx/dcsstysjI0MmTJ3XttdfKZrO5t5OUlKSysrKz1pH+F/k+ffooIyND6enpamlp0bhx\n4zRs2DBNmDBBeXl5WrNmjcLDw93b27Nnj6ZNm6aWlhYVFhZ24H8RAICJLK7vny/u4qqrq5WcnKzy\n8vILvtXs559/rq+++kpjx47Ve++9pw0bNrQZ2h+zzg8pLS3V4cOHddddd/2o9QEA/qet7vnlK/lz\nGTBggBYvXqznn39egYGB+t3vfueVdQAA6ChE/v/r2bOn/vznP3t9nR+Smprqke0AAHCGX154BwCA\nPyDyAAAYyi9P1zc3N6u6utqj24yIiHB/Hh4AgM7ALyNfXV2te++91/2Rt4t16tQpLVu2TIMHD/bI\n9gAA8AS/jLwkBQYGKjg4uMOf9/bbb3d/1j4iIkKLFy/u8BkAAP7BbyPvC42NjZKklStX+ngSAIA/\n4MK7DvTJJ5/ou+++U1ZWlqZPn37WV+EmJSW5fwkAAMATeCXfgbp3766srCylpaXpiy++0F133aW4\nuDjt27dPR44cUVZWlgIDA7VixQpfjwoAMACR70CRkZHui/MiIyMVHh6uWbNmqX///kpKStILL7yg\noKAgH08JADCF30b+1KlTHb6tDRs26NNPP1V+fr4OHTokp9Opfv36STp9UxuDbiMAAOgE/DLyERER\nWrZsmce32ZaJEydq3rx5ysjIkNVq1eLFi2W1nr4sory83KPzAADgl5EPCAjwyWfag4KC9OSTT3b4\n8wIA/BNX1wMAYCgiDwCAoYg8AACGIvIAABjKLy+84y50AAB/4JeRr66u1po1axQeHu6R7R09elST\nJk3iLnQAgE7FLyMvSeHh4erTp4+vx9CxY8c0fvx4DRs2TJI0btw4ZWZm+ngqAIAJ/Dbyvnbq1Clt\n3bpVx44d080336z58+f7eiQA8IrS0lJVVlZ6fLt79+7VkCFDPLrNESNGKDU11aPb9CUi38H27dun\n9evXa8eOHUpISFBQUJB2796tzMxM9e3bV3l5ee6vugUAE6SmpnolnAUFBcrLy/P4dk3C1fUd6KWX\nXtKUKVMUGxurNWvW6J577lFUVJRmzZolh8Oh5ORkLVy40NdjAgAMwSv5DnTTTTepsbFRzz//vP71\nr39p4sSJuvrqq9WjRw9Jp9+PLyoq8vGUAABT+G3kjx492uHb6tWrl6ZPn67p06dr586dKi4u1rff\nfqs77rhDN9xwg7Zv364rrrjCY3MBAPybX0Y+IiJCkyZN8vg2L0RcXJzi4uK0f/9+zZs3T6tXr1ZI\nSIgWLVrk0bkAAP7LLyPvq7vQncugQYO0cuVKX48BADAQF94BAGAor7+Sv/3222Wz2SSdPqWdnZ2t\nuXPnymq1Kjo6Wvn5+ZKkdevWae3atQoKClJ2drYSExO9PRoAAEbzauQbGxsl6azT0TNnzlRubq5i\nY2OVn5+vsrIyjRo1Sg6HQ6WlpTp58qTS09M1ZswYBQUFeXM8AACM5tXIf/LJJ/ruu++UlZWl5uZm\n3X///aqsrFRsbKwkKSEhQdu2bZPVatXo0aMVGBgom82myMhIVVVVKSYmxpvjAQBgNK9Gvnv37srK\nylJaWpq++OIL3XXXXXK5XO7He/bsqfr6ejmdToWGhrqXh4SEqK6uzpujAQBgPK9GPjIy0n0Ve2Rk\npMLDw8/6/mKn06mwsDDZbDbV19e3Wn4+RUVFKi4u9s7gAAB0IcnJya2W5eTkeDfyGzZs0Keffqr8\n/HwdOnRI9fX1GjNmjHbs2KGrrrpKFRUVio+P18iRI7V06VI1NjaqoaFBe/bsUXR09Hm3bbfbZbfb\nz1pWXV19zh0FAMBk5eXl5/y+Fq9GfuLEiZo3b54yMjJktVq1ZMkShYeHa/78+WpqalJUVJRSUlJk\nsViUmZmpjIwMuVwu5ebmKjg42JujAQBgPK9GPigoSE8++WSr5Q6Ho9WytLQ0paWleXMcAAD8Cl+G\nAwCAoYg8AACG8svvrof/KS0tPeuTHZ6yd+9eDRkyxOPbHTFihFJTUz2+XQD+hcjDL6SmpnolmgUF\nBcrLy/P4dgHAEzhdDwCAoYg8AACG4nQ9AECStGjRItXW1vp6jHarqanR7NmzfT1Gu/Tu3Vvz58/v\n8Ocl8gAASVJtba3i4+N9PYaR/vnPf/rkeTldDwCAoYg8AACGIvIAABiKyAMAYCgiDwCAoYg8AACG\n4iN0AABJpz93vmXLFl+PYaQTJ0745HmJPABAkjRw4EA+J+8lfE4eAAB4FJEHAMBQRB4AAEMReQAA\nDEXkAQAwFFfXAwAknb4dqq+uAv8xampqNHDgQF+P0S69e/f2yfMSeQCAJPnkfucXo6CgQHl5eb4e\no1PjdD0AAIYi8gAAGIrT9eh0Fi1apNraWl+P0S41NTWaPXu2r8dot969e3e5U7IAfjwij06ntraW\nr9b0kq50URWAi8fpegAADEXkAQAwFJEHAMBQRB4AAEMReQAADMXV9eh0ampqtGXLFl+PYaQTJ074\negQAHYjIo9MZOHAgH6HzEj5CB/gXTtcDAGAoIg8AgKGIPAAAhiLyAAAYisgDAGAoIg8AgKH4CB06\nnd69e3eZj3rV1NRo4MCBvh6j3Xr37u3rEQB0ICKPTqcr3e+8oKBAeXl5vh4DAM6J0/UAABjK66/k\njxw5ogkTJmjFihUKCAjQ3LlzZbVaFR0drfz8fEnSunXrtHbtWgUFBSk7O1uJiYneHgsA0EFKS0tV\nWVnp8e3u3btXBQUFHt3miBEjlJqa6tFt+pJXI3/q1Cnl5+ere/fukqTCwkLl5uYqNjZW+fn5Kisr\n06hRo+RwOFRaWqqTJ08qPT1dY8aMUVBQkDdHAwB0kNTUVKPC2ZV49XT9Y489pvT0dF1yySVyuVyq\nrKxUbGysJCkhIUHbt2/Xrl27NHr0aAUGBspmsykyMlJVVVXeHAsAAL/gtci/8sor6tu3r8aMGSOX\nyyVJamlpcT/es2dP1dfXy+l0KjQ01L08JCREdXV13hoLAAC/4bXT9a+88oosFou2bdumqqoqzZkz\nR7W1te7HnU6nwsLCZLPZVF9f32p5W4qKilRcXOyV2QEA6EqSk5NbLcvJyfFe5EtKStx/njp1qh59\n9FE9/vjj2rlzp+Li4lRRUaH4+HiNHDlSS5cuVWNjoxoaGrRnzx5FR0e3uX273S673X7Wsurq6nPu\nKAAAJisvL1dERESr5R36Ofk5c+bo4YcfVlNTk6KiopSSkiKLxaLMzExlZGTI5XIpNzdXwcHBHTkW\nAABG6pDIr1y50v1nh8PR6vG0tDSlpaV1xCgAAPgNvgwHAABDEXkAAAxF5AEAMBSRBwDAUEQeAABD\nEXkAAAxF5AEAMBSRBwDAUEQeAABDEXkAAAxF5AEAMBSRBwDAUB16FzrAV0pLS1VZWenx7e7du1cF\nBQUe3+6IESOUmprq8e0C8C9EHn4hNTWVaALwO5yuBwDAUEQeAABDEXkAAAxF5AEAMBSRBwDAUEQe\nAABDEXkAAAxF5AEAMBSRBwDAUEQeAABDEXkAAAxF5AEAMBSRBwDAUEQeAABDEXkAAAxF5AEAMBSR\nBwDAUEQeAABDEXkAAAxF5AEAMBSRBwDAUEQeAABDEXkAAAxF5AEAMBSRBwDAUEQeAABDEXkAAAzV\n7sj/9a9/1dKlS3XixAlt3LjRmzMBAAAPaFfkn3zySb399tt644031NzcrA0bNmjJkiXeng0AAFyE\ndkX+3Xff1RNPPKFu3brJZrNpxYoVqqio8PZsAADgIgS254es1tO/C1gsFklSY2Oje9n5tLS0aP78\n+dq7d6+sVqseffRRBQcHa+7cubJarYqOjlZ+fr4kad26dVq7dq2CgoKUnZ2txMTEH7lLAABAamfk\nU1JSdN999+nYsWN68cUXtWnTJt10001trrd161ZZLBatXr1aO3bs0NNPPy2Xy6Xc3FzFxsYqPz9f\nZWVlGjVqlBwOh0pLS3Xy5Emlp6drzJgxCgoKuugdBADAX7Ur8nfffbfeeecdXXrppaqpqZHdbtfY\nsWPbXO+6665TUlKSJOnAgQPq1auXtm/frtjYWElSQkKCtm3bJqvVqtGjRyswMFA2m02RkZGqqqpS\nTEzMRewaAAD+rV2RX7hwoR5++GFde+217mVz5szRY4891ua6VqtVc+fOVVlZmX7/+99r27Zt7sd6\n9uyp+vp6OZ1OhYaGupeHhISorq7uvNstKipScXFxe8YHAMBoycnJrZbl5OScP/J5eXnat2+fdu/e\nrc8++8y9vLm5WcePH2/3ky9ZskRHjhzRxIkT1dDQ4F7udDoVFhYmm82m+vr6VsvPx263y263n7Ws\nurr6nDsKAIDJysvLFRER0Wr5eSM/c+ZM7d+/XwUFBcrJyXEvDwgIUFRUVJtP+uqrr+rQoUO6++67\n1a1bN1mtVsXExGjHjh266qqrVFFRofj4eI0cOVJLly5VY2OjGhoatGfPHkVHR/+I3QQAAGecN/IR\nERGKiIjQpk2bdPToUZ04cUIul0vNzc36+OOPdc0115x349dff73mzZunKVOm6NSpU5o/f76GDh2q\n+fPnq6mpSVFRUUpJSZHFYlFmZqYyMjLcF+YFBwd7dEcBAPA3FpfL5Wrrh55++mmtWrVKp06dUnh4\nuL7++mvFxMRo/fr1HTFju505Xf9Dpy0AADBJW91r15fhbN68WW+//bZuvPFGORwOrVixQn369PH4\nsAAAwHPaFfl+/frJZrMpOjpan3zyieLj43X48GFvzwYAAC5Cuz5CFxoaqo0bN+qKK65QSUmJLrnk\nkgu6uh4AAHS8dr2Sb2lpUW1tra6++moNGjRICxYs0H333eft2QAAwEVo1yv5Y8eOKS0tTZI0d+5c\nrw4EAAA8o903qElKStKQIUPUrVs39/KVK1d6bTAAAHBx2hX53/72t96eAwAAeFi7In/VVVd5ew4A\nAOBh7brwDgAAdD1EHgAAQxF5AAAMReQBADAUkQcAwFBEHgAAQxF5AAAMReQBADAUkQcAwFBEHgAA\nQxF5AAAMReQBADAUkQcAwFBEHgAAQxF5AAAMReQBADAUkQcAwFBEHgAAQxF5AAAMReQBADAUkQcA\nwFBEHgAAQxF5AAAMReQBADAUkQcAwFBEHgAAQxF5AAAMReQBADAUkQcAwFBEHgAAQxF5AAAMReQB\nADAUkQcAwFBEHgAAQxF5AAAMFeitDZ86dUoPPfSQ9u/fr6amJmVnZ+tnP/uZ5s6dK6vVqujoaOXn\n50uS1q1bp7Vr1yooKEjZ2dlKTEz01lgAAPgNr0V+06ZN6t27tx5//HEdP35ct956qy677DLl5uYq\nNjZW+fn5Kisr06hRo+RwOFRaWqqTJ08qPT1dY8aMUVBQkLdGAwDAL3gt8jfccINSUlIkSc3NzQoI\nCFBlZaViY2MlSQkJCdq2bZusVqtGjx6twMBA2Ww2RUZGqqqqSjExMd4aDQAAv+C19+R79OihkJAQ\n1dfXa9asWbr//vvlcrncj/fs2VP19fVyOp0KDQ11Lw8JCVFdXZ23xgIAwG947ZW8JNXU1CgnJ0dT\npkzRTTfdpCeeeML9mNPpVFhYmGw2m+rr61stb0tRUZGKi4u9MjcAAF1JcnJyq2U5OTnei/zhw4eV\nlZWlBQsWKD4+XpJ0+eWXa+fOnYqLi1NFRYXi4+M1cuRILV26VI2NjWpoaNCePXsUHR3d5vbtdrvs\ndvtZy6qrq8+5owAAmKy8vFwRERGtlnst8s8995yOHz+uZ599VsuWLZPFYlFeXp4WLVqkpqYmRUVF\nKSUlRRaLRZmZmcrIyJDL5VJubq6Cg4O9NRYAAH7D4vr+G+Vd3JlX8j/0Gw0AACZpq3t8GQ4AAIYi\n8gAAGIrIAwBgKCIPAIChiDwAAIYi8gAAGIrIAwBgKCIPAIChiDwAAIYi8gAAGIrIAwBgKCIPAICh\niDwAAIYi8gAAGIrIAwBgKCIPAIChiDwAAIYi8gAAGIrIAwBgKCIPAIChiDwAAIYi8gAAGIrIAwBg\nKCIPAIChiDwAAIYi8gAAGIrIAwBgKCIPAIChiDwAAIYi8gAAGIrIAwBgKCIPAIChiDwAAIYi8gAA\nGIrIAwBgKCIPAIChiDwAAIYi8gAAGIrIAwBgKCIPAIChiDwAAIYi8gAAGIrIAwBgKK9H/sMPP1Rm\nZqYk6auvvlJGRoamTJmiRx991P0z69at04QJEzRp0iT9/e9/9/ZIAAD4Ba9Gfvny5Zo/f76ampok\nSYWFhcrNzVVJSYlaWlpUVlamw4cPy+FwaO3atVq+fLmeeuop988DAIAfz6uRHzx4sJYtW+b++0cf\nfaTY2FhJUkJCgrZv365du3Zp9OjRCgwMlM1mU2RkpKqqqrw5FgAAfsGrkR83bpwCAgLcf3e5XO4/\n9+zZU/X19XI6nQoNDXUvDwkJUV1dnTfHAgDALwR25JNZrf/7ncLpdCosLEw2m0319fWtlrelqKhI\nxcXFXpkTAICuJDk5udWynJycjo38iBEjtHPnTsXFxamiokLx8fEaOXKkli5dqsbGRjU0NGjPnj2K\njo5uc1t2u112u/2sZdXV1efcUQAATFZeXq6IiIhWyzs08nPmzNHDDz+spqYmRUVFKSUlRRaLRZmZ\nmcrIyJDL5VJubq6Cg4M7ciwAAIxkcX3/jfIu7swr+R/6jQYAAJO01T2+DAcAAEMReQAADNWh78nj\n3EpLS1VZWenx7e7du1dDhgzx+HZHjBih1NRUj28XAOBZRL4TSE1N9Uo0CwoKlJeX5/HtAgC6BiIP\nwG9xFg2mI/IA/BZn0WA6LrwDAMBQvJK/AA899JAOHjzo6zHa7ciRI5oxY4avx2i3AQMGaPHixb4e\nAwCMQeQvwEcffaTjx4/7eowL0pXmPXLkiK9HAACjEPkL0LdvX3Xr1s3XYxjLZrP5egR0UpxF8y7O\nopmLyF+AAQMGdLl/aPr27evrMdptwIABvh4BndTBgwfPultlZ9etW7cuNW9X+ncNF4bIX4Cu9psu\nV/jCFEeOHOlSbz11NQ0NDb4eAV5C5AF0erxV5l28VWYuIg+g0+OtMu/irTJzEXkAnR5vlQE/Dl+G\nAwCAoXgl3wl48/uzCwoKPL5dvj8bALoGIt8JeOv7swEA/o3IA/BbnEWD6Yg8AL/FWTSYjgvvAAAw\nFJEHAMBQRB4AAEMReQAADEXkAQAwFJEHAMBQRB4AAEMReQAADEXkAQAwFJEHAMBQRB4AAEMReQAA\nDEXkAQAwFJEHAMBQRB4AAEMReQAADEXkAQAwFJEHAMBQRB4AAEMReQAADEXkAQAwFJEHAMBQRB4A\nAEMF+nqAM1wulx555BFVVVUpODhYBQUF+slPfuLrsQAA6LI6zSv5srIyNTY2as2aNZo9e7YKCwt9\nPRIAAF1ap4n8v//9b1177bWSpJ///OfavXu3jycCAKBr6zSn6+vr6xUaGur+e2BgoFpaWmS1tv/3\nkObmZknSwYMHPT4fAACdzZnenenf/9VpIm+z2eR0Ot1/byvwRUVFKi4uPudjkydP9vh8AAB0Vtdf\nf32rZTk5OZ0n8r/4xS/01ltvKSUlRR988IGGDRt23p+32+2y2+1nLTt58qR2796tfv36KSAgwJvj\nwkuSk5NVXl7u6zEAv8Ox1zU1Nzfrm2++UUxMjLp3797qcYvL5XL5YK5Wvn91vSQVFhZqyJAhPp4K\nHW348OHu/wcAdByOPTN1mlfyFotFjz76qK/HAADAGJ3m6noAAOBZRB4AAEMReXQqOTk5vh4B8Esc\ne2bqNBfeAQAAz+KVPAAAhiLyAAAYisgDAGAoIg8AgKGIPAAAhiLyAAAYisjDI06dOqUHH3xQkydP\n1h133KGtW7fqq6++UkZGhqZMmdLqK4u//fZbjR8/Xo2NjZJO32o4OztbmZmZmjRpkj744AP3zxYU\nFKi6uvqc6504cUL33HOPpkyZohkzZujrr7/uoD0GOoeLPfbOdwyd79g74/PPP1dsbGyr5egciDw8\nYtOmTerdu7dWrVql5cuXa+HChSosLFRubq5KSkrU0tKisrIySdK7776rrKwsHTlyxL3+ihUr9Mtf\n/lIOh0OFhYX63e9+536surpaERER51xv3bp1iomJUUlJiW655Rb96U9/6ridBjqBiz32zncMne/Y\nk07/cv7444+rW7duHbOzuGBEHh5xww03aNasWZJO3/owICBAlZWVio2NlSQlJCToH//4hyQpICBA\nL774onr16uVe/84779SkSZMknX5lcuYfjc8//1xRUVE/uN60adM0c+ZMSdKBAwfOegzwBxd77P3Q\nMdTWsSdJCxYsUG5u7jlvcYrOgcjDI3r06KGQkBDV19dr1qxZuv/++/X9L1Ps2bOn6urqJEnXXHON\nevXqddbjNptNwcHB+uabb/Tggw9q9uzZkqS33npLiYmJP7iedPoOhtOmTdOqVat03XXXeXlPgc7l\nYo896dzHUFvHXnFxsRITEzV8+PBW20PnQeThMTU1NZo2bZpSU1N10003yWr93/9eTqdTYWFhZ/28\nxWI56+9VVVWaMWOGZs+e7X4V8v7772v06NHnXU+S/vKXv6ikpER2u91TuwN0GRd77Emtj6G2jr1N\nmzbp5ZdfVmZmpg4fPqysrCxP7hI8pNPcTx5d25mDfMGCBYqPj5ckXX755dq5c6fi4uJUUVHhXn7G\n93/7/+9//6v77rtPzzzzjIYPHy5JOn78uEJDQ1v9g/T99Z5//nn1799ft956q0JCQhQQEOCtXQQ6\npYs99s51DLXn2HvjjTfcf05KStILL7zgjd3DRSLy8IjnnntOx48f17PPPqtly5bJYrEoLy9PixYt\nUlNTk6KiopSSknLWOt//B+Tpp59WY2OjCgoK5HK5FBYWphtvvFHXXnttq+f6/noTJkzQnDlz9PLL\nL8vlcqmwsNB7Owl0Qhd77J3rGKqoqGjz2Pu/yzll3zlxFzoAAAzFe/IAABiKyAMAYCgiDwCAoYg8\nAACGIvIAABiKyAMAYCgiDwCAoYg8AACGIvIAzuvBBx/U+vXr3X+fOnWqdu3apRkzZuj222/X5MmT\n9fHHH0uSPvvsM02dOlVpaWlKSkpSSUmJpNM3M/n1r3+tm2++WatXr/bJfgD+iK+1BXBeEyZMUFFR\nkdLS0nRvkxmkAAABmklEQVTgwAF9++23WrJkiRYsWKDLLrtMn3/+ue69915t2bJF69ev1z333KP4\n+Hjt27dPt956q6ZMmSJJamxs1ObNm328N4B/4WttAbRp/PjxWrFihTZu3CiXy6U//vGPio6Odn9f\n+dGjR/Xqq68qNDRU77zzjqqqqlRVVaXXX39dH3/8sYqLi9XQ0OC+hTCAjsEreQBtuu2227R582Zt\n2bJFzz33nFasWKHS0lL344cOHVKvXr1kt9sVHh6usWPH6sYbb9Trr7/u/plu3br5YnTAr/GePIA2\npaamas2aNbr00ks1cOBADR48WJs2bZIkbdu2zX1Kfvv27frNb36jpKQk7dixQ5K4OxngQ7ySB9Cm\nAQMGaMCAAbrtttskSU888YTy8/O1fPlyBQcH65lnnpEk2e12paenKywsTEOGDFFERISqq6t9OTrg\n13hPHkCbDh06pKlTp2rz5s0KCgry9TgA2onT9QDO629/+5tSU1P1wAMPEHigi+GVPAAAhuKVPAAA\nhiLyAAAYisgDAGAoIg8AgKGIPAAAhvp/5hpu5NdEvvwAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1223bf128>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.set_context(font_scale=1.5)\n",
"sns.boxplot(x=\"year\", y=\"rate\", hue=\"age group\",\n",
" data=ed_rate_samples.assign(rate=ed_rate_samples.value*10000),\n",
" palette=\"gray\", linewidth=0.6, fliersize=0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Virus rates"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"census_data_virus = (census_data_child.assign(under_5=census_data_child.AGEGRP==1)\n",
" .groupby(['under_5','YEAR'])['TOT_POP'].sum()).reset_index()\n",
"\n",
"census_data_virus['YEAR'] = census_data_virus.YEAR - 2011"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"census_virus_clean = census_data_virus.rename(columns={'YEAR':'year', 'TOT_POP':'n'})\n",
"census_virus_clean.head()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"virus_summary = (rotavirus_data.groupby(['under_5', 'year', 'setting', 'rotavirus', 'sapovirus',\n",
" 'astrovorus', 'norovirus'])\n",
" ['Record ID'].count()\n",
" .reset_index()\n",
" .rename(columns={'Record ID':'cases', 'astrovorus':'astrovirus'}))\n",
"\n",
"virus_summary.head()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"merged_virus_data = virus_summary.merge(census_virus_clean, on=['under_5', 'year'], how='left')\n",
"merged_virus_data.head(10)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"rota_data = (merged_virus_data[merged_virus_data.rotavirus==1]\n",
" .groupby(['under_5', 'year', 'setting'])\n",
" .agg({'cases':sum, 'n':max}))\n",
"\n",
"sapo_data = (merged_virus_data[merged_virus_data.sapovirus==1]\n",
" .groupby(['under_5', 'year', 'setting'])\n",
" .agg({'cases':sum, 'n':max})\n",
" .reindex_like(rota_data).fillna({'cases':0}).fillna(method='pad'))\n",
"\n",
"astro_data = (merged_virus_data[merged_virus_data.astrovirus==1]\n",
" .groupby(['under_5', 'year', 'setting'])\n",
" .agg({'cases':sum, 'n':max})\n",
" .reindex_like(rota_data).fillna({'cases':0}).fillna(method='pad'))\n",
"\n",
"noro_data = (merged_virus_data[merged_virus_data.norovirus==1]\n",
" .groupby(['under_5', 'year', 'setting'])\n",
" .agg({'cases':sum, 'n':max})\n",
" .reindex_like(rota_data).fillna({'cases':0}).fillna(method='pad'))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"virus_totals = pd.concat([astro_data.reset_index().assign(virus='astrovirus'),\n",
" noro_data.reset_index().assign(virus='norovirus'),\n",
" rota_data.reset_index().assign(virus='rotavirus'),\n",
" sapo_data.reset_index().assign(virus='sapovirus')])\n",
"virus_totals['cases'] = virus_totals.cases.astype(int)\n",
"virus_totals['n'] = virus_totals.n.astype(int)\n",
"virus_totals.head(10)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"n_lookup = virus_totals.groupby(['under_5', 'year', 'virus']).agg({'n':max})\n",
"n_lookup"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"with Model() as virus_model:\n",
" \n",
" n_total = int(n_lookup.shape[0])\n",
" \n",
" p_enroll = Beta('p_enroll', 1, 1, testval=0.9)\n",
" enrolled = Binomial('enrolled', n=rotavirus_data.shape[0], p=p_enroll, \n",
" observed=rotavirus_data.stool_collected.sum())\n",
" \n",
" weights = (np.array(monitoring_rate)[virus_totals.setting] \n",
" * np.array(market_share)[virus_totals.year])\n",
" \n",
" weighted_cases = DiscreteUniform('weighted_cases', virus_totals.cases, \n",
" virus_totals.n, shape=virus_totals.shape[0],\n",
" testval=np.maximum((virus_totals.cases.values/weights).astype(int), 1))\n",
"\n",
" p_weight = Deterministic('p_weight', weights*p_enroll)\n",
" weighting = Binomial('weighting', n=weighted_cases, p=p_weight, observed=virus_totals.cases)\n",
" \n",
" weighted_cases_total = Deterministic('weighted_cases_total',\n",
" weighted_cases.reshape((n_total, 3)).sum(1))\n",
" \n",
" θ = Normal('θ', 0, sd=1000, shape=n_total, testval=np.ones(n_total))\n",
" \n",
" λ = Deterministic('λ', tt.exp(θ))\n",
" \n",
" virus_like = Potential('virus_like', \n",
" Poisson.dist(λ * (n_lookup.n/10000.)).logp(weighted_cases_total))\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"with virus_model:\n",
" virus_trace = sample(20000, njobs=2, random_seed=seed_numbers)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"traceplot(virus_trace[10000:], varnames=['p_enroll'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [],
"source": [
"forestplot(virus_trace[10000:], varnames=['weighted_cases_total'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"virus_samples = pd.concat([n_lookup.reset_index()[['under_5', 'year', 'virus']], \n",
" pd.DataFrame(virus_trace['λ'][-1000:]).T], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"virus_samples = (pd.melt(virus_samples, id_vars=['under_5', 'year', 'virus'])\n",
" .replace({'under_5':{0:'5+', 1:'<5'},\n",
" 'year':{0:'2012/13', 1:'2013/14', 2:'2014/15'}})\n",
" .rename(columns={'under_5':'age group'}))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"sns.set(style=\"ticks\")\n",
"\n",
"rateplot = sns.factorplot(x=\"year\", y=\"rate\", hue=\"age group\", col='virus', \n",
" data=virus_samples.rename(columns={'value':'rate'}),\n",
" palette=\"PRGn\", size=6, aspect=.75, kind='box', linewidth=0.6,\n",
" col_wrap=2)\n",
"\n",
"rateplot.despine(left=True)\n",
"\n"
]
}
],
"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.5.1"
},
"widgets": {
"state": {},
"version": "1.0.0"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment