Skip to content

Instantly share code, notes, and snippets.

@fonnesbeck
Created June 30, 2016 15:48
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/6906a39eb2ed300a27d5bdfea869f2d6 to your computer and use it in GitHub Desktop.
Save fonnesbeck/6906a39eb2ed300a27d5bdfea869f2d6 to your computer and use it in GitHub Desktop.
AGE Rates.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "raw",
"source": "%matplotlib inline\nimport numpy as np\nimport pandas as pd\nimport seaborn as sns\nimport matplotlib.pylab as plt\nsns.set_context('notebook')\n\nseed_numbers = 20090425, 19700903\n\nfrom datetime import timedelta, datetime"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Import data"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rotavirus_data = pd.read_csv('ROTA.csv')\nrotavirus_data.index.is_unique",
"execution_count": 2,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "True"
},
"metadata": {},
"execution_count": 2
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Rename columns and recode data"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "race_cols = [race for race in rotavirus_data.columns if race.startswith('Race')]\n\n(rotavirus_data[race_cols]=='Checked').sum()",
"execution_count": 3,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "Race (choice=White) 2249\nRace (choice=Black/African American) 1545\nRace (choice=American Indian/Alaskan Native) 5\nRace (choice=Asian) 86\nRace (choice=Native Hawaiian/Other Pacific Islander) 5\nRace (choice=Other) 18\nRace (choice=Unknown) 3\nRace (choice=None) 1\ndtype: int64"
},
"metadata": {},
"execution_count": 3
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rotavirus_data['white'] = (rotavirus_data['Race (choice=White)']=='Checked').astype(int)\nrotavirus_data['black'] = (rotavirus_data['Race (choice=Black/African American)']=='Checked').astype(int)\n\nrotavirus_data = rotavirus_data[(rotavirus_data.white + rotavirus_data.black)==1].drop(race_cols, axis=1)",
"execution_count": 4,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rotavirus_data['hispanic'] = (rotavirus_data.Ethnicity=='Hispanic or Latino').astype(int)",
"execution_count": 5,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rotavirus_data['rotavirus'] = (rotavirus_data['Result of rotavirus testing'] == 'Positive').astype(int)\nrotavirus_data['sapovirus'] = (rotavirus_data['Result of sapovirus testing'] == 'Positive').astype(int)\nrotavirus_data['astrovorus'] = (rotavirus_data['Result of astrovirus testing'] == 'Positive').astype(int)\nrotavirus_data['norovirus'] = (rotavirus_data['Result of Norovirus Testing'] == 'GII').astype(int)\n\nrotavirus_data = rotavirus_data.drop([col for col in rotavirus_data.columns if col.startswith('Result')], axis=1)",
"execution_count": 6,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "rotavirus_data['Enrollment Date'] = pd.to_datetime(rotavirus_data['Enrollment Date'])\nrotavirus_data['Date of Birth'] = pd.to_datetime(rotavirus_data['Date of Birth'])",
"execution_count": 7,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "pd.crosstab(rotavirus_data.black, rotavirus_data.hispanic)",
"execution_count": 162,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": "<div>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th>hispanic</th>\n <th>0</th>\n <th>1</th>\n </tr>\n <tr>\n <th>black</th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>719</td>\n <td>1359</td>\n </tr>\n <tr>\n <th>1</th>\n <td>1357</td>\n <td>17</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": "hispanic 0 1\nblack \n0 719 1359\n1 1357 17"
},
"metadata": {},
"execution_count": 162
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Calculate age, and compare to given age."
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "rotavirus_data['age_months'] = (rotavirus_data['Enrollment Date']\n - rotavirus_data['Date of Birth'] + timedelta(1)).astype('timedelta64[M]') ",
"execution_count": 8,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "np.abs((rotavirus_data['Age in months (auto calculated) '] - rotavirus_data['age_months']) > 1).sum()",
"execution_count": 9,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "0"
},
"metadata": {},
"execution_count": 9
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Group into ages under 5 and 5 or over"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "rotavirus_data['under_5'] = ((rotavirus_data.age_months / 12) < 5).astype(int)",
"execution_count": 10,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Calculate natural year"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rotavirus_data['Enrollment Date'].sort_values(ascending=False).tail()",
"execution_count": 152,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "1291 2012-12-02\n1295 2012-12-02\n1293 2012-12-02\n1292 2012-12-02\n1290 2012-12-02\nName: Enrollment Date, dtype: datetime64[ns]"
},
"metadata": {},
"execution_count": 152
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rotavirus_data['year'] = rotavirus_data.Year - 2\nrotavirus_data.year.value_counts()",
"execution_count": 11,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "0 1215\n1 1178\n2 1059\nName: year, dtype: int64"
},
"metadata": {},
"execution_count": 11
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rotavirus_data.setting.value_counts()",
"execution_count": 154,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "0 2117\n2 1190\n1 145\nName: setting, dtype: int64"
},
"metadata": {},
"execution_count": 154
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Recode sex and stool"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "rotavirus_data['male'] = rotavirus_data['Sex updated']=='Male'\nrotavirus_data['stool_collected'] = rotavirus_data['Was stool collected?']=='Yes'",
"execution_count": 12,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "# Drop extraneous columns\nrotavirus_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)",
"execution_count": 13,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rotavirus_data = pd.concat([rotavirus_data, pd.get_dummies(rotavirus_data.Setting)], axis=1).drop('Setting', axis=1)",
"execution_count": 14,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Summary of counts by setting"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rotavirus_data.groupby(['year', 'setting'])['Record ID'].count()",
"execution_count": 158,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "year setting\n0 0 716\n 1 58\n 2 441\n1 0 736\n 1 49\n 2 393\n2 0 665\n 1 38\n 2 356\nName: Record ID, dtype: int64"
},
"metadata": {},
"execution_count": 158
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rotavirus_data.shape",
"execution_count": 159,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "(3452, 18)"
},
"metadata": {},
"execution_count": 159
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rotavirus_data['setting'] = rotavirus_data.IP.astype(int)\nrotavirus_data.loc[rotavirus_data.OP==1, 'setting'] = 2\nrotavirus_data.setting.value_counts()",
"execution_count": 15,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "0 2117\n2 1190\n1 145\nName: setting, dtype: int64"
},
"metadata": {},
"execution_count": 15
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rotavirus_data.shape",
"execution_count": 16,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "(3452, 18)"
},
"metadata": {},
"execution_count": 16
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rotavirus_data.head()",
"execution_count": 17,
"outputs": [
{
"output_type": "execute_result",
"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 \\\n0 EN1C-0001 2012-12-03 1 0 1 1 0 \n1 EN1C-0002 2012-12-03 0 1 0 0 0 \n2 EN1C-0003 2012-12-03 0 1 0 0 0 \n3 EN1C-0004 2012-12-04 1 0 1 0 0 \n4 EN1C-0006 2012-12-04 0 1 0 0 0 \n\n astrovorus norovirus age_months under_5 year male stool_collected \\\n0 0 0 77.0 0 0 True True \n1 0 0 87.0 0 0 True False \n2 0 0 63.0 0 0 False False \n3 0 0 36.0 1 0 False True \n4 0 0 64.0 0 0 False False \n\n ED IP OP setting \n0 0.0 0.0 1.0 2 \n1 0.0 0.0 1.0 2 \n2 0.0 0.0 1.0 2 \n3 0.0 0.0 1.0 2 \n4 0.0 0.0 1.0 2 "
},
"metadata": {},
"execution_count": 17
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rotavirus_data.isnull().sum()",
"execution_count": 18,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "Record ID 0\nEnrollment Date 0\nwhite 0\nblack 0\nhispanic 0\nrotavirus 0\nsapovirus 0\nastrovorus 0\nnorovirus 0\nage_months 0\nunder_5 0\nyear 0\nmale 0\nstool_collected 0\nED 0\nIP 0\nOP 0\nsetting 0\ndtype: int64"
},
"metadata": {},
"execution_count": 18
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rotavirus_data.describe()",
"execution_count": 19,
"outputs": [
{
"output_type": "execute_result",
"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 \\\ncount 3452.000000 3452.000000 3452.000000 3452.000000 3452.000000 \nmean 0.601970 0.398030 0.398610 0.108633 0.081112 \nstd 0.489563 0.489563 0.489683 0.311223 0.273047 \nmin 0.000000 0.000000 0.000000 0.000000 0.000000 \n25% 0.000000 0.000000 0.000000 0.000000 0.000000 \n50% 1.000000 0.000000 0.000000 0.000000 0.000000 \n75% 1.000000 1.000000 1.000000 0.000000 0.000000 \nmax 1.000000 1.000000 1.000000 1.000000 1.000000 \n\n astrovorus norovirus age_months under_5 year \\\ncount 3452.000000 3452.000000 3452.000000 3452.000000 3452.000000 \nmean 0.037080 0.152665 44.912804 0.715527 0.954809 \nstd 0.188985 0.359717 45.485356 0.451228 0.810492 \nmin 0.000000 0.000000 0.000000 0.000000 0.000000 \n25% 0.000000 0.000000 11.000000 0.000000 0.000000 \n50% 0.000000 0.000000 27.000000 1.000000 1.000000 \n75% 0.000000 0.000000 67.000000 1.000000 2.000000 \nmax 1.000000 1.000000 215.000000 1.000000 2.000000 \n\n ED IP OP setting \ncount 3452.000000 3452.000000 3452.000000 3452.000000 \nmean 0.613268 0.042005 0.344728 0.731460 \nstd 0.487072 0.200629 0.475348 0.941349 \nmin 0.000000 0.000000 0.000000 0.000000 \n25% 0.000000 0.000000 0.000000 0.000000 \n50% 1.000000 0.000000 0.000000 0.000000 \n75% 1.000000 0.000000 1.000000 2.000000 \nmax 1.000000 1.000000 1.000000 2.000000 "
},
"metadata": {},
"execution_count": 19
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Aggregate data by age group and setting"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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\nrotavirus_summary.head()",
"execution_count": 20,
"outputs": [
{
"output_type": "execute_result",
"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\n0 0 0 0 0 0 57\n1 0 0 0 0 1 62\n2 0 0 0 1 0 99\n3 0 0 0 1 1 1\n4 0 0 1 0 0 4"
},
"metadata": {},
"execution_count": 20
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Census data\n\nThe 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"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "davidson_census = pd.read_csv('davidson_county.csv')\ndavidson_census.head()",
"execution_count": 21,
"outputs": [
{
"output_type": "execute_result",
"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 \\\n0 50 47 37 Tennessee Davidson County 1 2008 0 \n1 50 47 37 Tennessee Davidson County 1 2008 1 \n2 50 47 37 Tennessee Davidson County 1 2008 2 \n3 50 47 37 Tennessee Davidson County 1 2008 3 \n4 50 47 37 Tennessee Davidson County 1 2008 4 \n\n TOT_POP TOT_MALE ... HWAC_MALE HWAC_FEMALE HBAC_MALE \\\n0 626681 303540 ... 30400 24829 2178 \n1 44691 22868 ... 3838 3664 302 \n2 37613 18977 ... 2910 2826 266 \n3 33904 17479 ... 2154 1890 166 \n4 38999 19674 ... 2029 1783 166 \n\n HBAC_FEMALE HIAC_MALE HIAC_FEMALE HAAC_MALE HAAC_FEMALE HNAC_MALE \\\n0 2006 1501 1183 381 374 271 \n1 303 185 189 63 53 26 \n2 205 145 140 45 50 22 \n3 170 105 91 25 29 18 \n4 174 111 82 29 29 22 \n\n HNAC_FEMALE \n0 211 \n1 35 \n2 23 \n3 16 \n4 16 \n\n[5 rows x 81 columns]"
},
"metadata": {},
"execution_count": 21
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Identify racial/ethnic subgroup populations"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "census_data_child = davidson_census.loc[(davidson_census.YEAR>2010) & davidson_census.AGEGRP.isin([1,2,3,4])].copy()\ncensus_data_child['HISPANIC_WHITE'] = census_data_child[['HWA_MALE', 'HWA_FEMALE']].sum(axis=1)\ncensus_data_child['HISPANIC_BLACK'] = census_data_child[['HBA_MALE', 'HBA_FEMALE']].sum(axis=1)\ncensus_data_child['NONHISPANIC_WHITE'] = census_data_child[['NHWA_MALE', 'NHWA_FEMALE']].sum(axis=1)\ncensus_data_child['NONHISPANIC_BLACK'] = census_data_child[['NHBA_MALE', 'NHBA_FEMALE']].sum(axis=1)",
"execution_count": 22,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false,
"scrolled": true
},
"cell_type": "code",
"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\ncensus_data['YEAR'] = census_data.YEAR - 2011\ncensus_data",
"execution_count": 23,
"outputs": [
{
"output_type": "execute_result",
"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 \\\n0 False 0 13889 891 47077 \n1 False 1 14692 914 47527 \n2 False 2 15653 983 47487 \n3 True 0 7134 533 19290 \n4 True 1 6994 566 19942 \n5 True 2 6909 552 20479 \n\n NONHISPANIC_BLACK \n0 40334 \n1 40656 \n2 40556 \n3 13591 \n4 13511 \n5 13471 "
},
"metadata": {},
"execution_count": 23
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Reshape data"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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\ncensus_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 \ncensus_clean",
"execution_count": 24,
"outputs": [
{
"output_type": "execute_result",
"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\n0 False 0 13889 0 1\n1 False 1 14692 0 1\n2 False 2 15653 0 1\n3 True 0 7134 0 1\n4 True 1 6994 0 1\n5 True 2 6909 0 1\n6 False 0 891 1 1\n7 False 1 914 1 1\n8 False 2 983 1 1\n9 True 0 533 1 1\n10 True 1 566 1 1\n11 True 2 552 1 1\n12 False 0 47077 0 0\n13 False 1 47527 0 0\n14 False 2 47487 0 0\n15 True 0 19290 0 0\n16 True 1 19942 0 0\n17 True 2 20479 0 0\n18 False 0 40334 1 0\n19 False 1 40656 1 0\n20 False 2 40556 1 0\n21 True 0 13591 1 0\n22 True 1 13511 1 0\n23 True 2 13471 1 0"
},
"metadata": {},
"execution_count": 24
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "census_full = pd.concat([census_clean.assign(setting=i) for i in range(3)])",
"execution_count": 25,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "merged_data = (rotavirus_summary.merge(census_full, on=['under_5', 'year', 'black', 'hispanic','setting'], how='right')\n .fillna(0).astype(int))",
"execution_count": 26,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "merged_data.head()",
"execution_count": 27,
"outputs": [
{
"output_type": "execute_result",
"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\n0 0 0 0 0 0 57 47077\n1 0 0 0 0 1 62 13889\n2 0 0 0 1 0 99 40334\n3 0 0 0 1 1 1 891\n4 0 0 1 0 0 4 47077"
},
"metadata": {},
"execution_count": 27
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "VUMC market share for 2011-13, excluding Normal Newborns, Neonates, Women’s Health, and Behavioral Health"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "inpatient_market_share = 0.94, 0.90, 0.83\ned_market_share = 0.95, 0.94, 0.92\nY2012, Y2013, Y2014 = 0, 1, 2",
"execution_count": 28,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Will estimate 2014 market shares by extrapolating a linear fit to the previous years."
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "from sklearn import linear_model",
"execution_count": 29,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "inpatient_df = pd.DataFrame(dict(x=range(3), y=inpatient_market_share))\ninpatient_fit = linear_model.LinearRegression().fit(X=inpatient_df.x.reshape(-1, 1), y=inpatient_df.y)\ninpatient_market_share = list(inpatient_market_share[1:]) + [inpatient_market_share[-1] + inpatient_fit.coef_[0]]\ninpatient_market_share",
"execution_count": 30,
"outputs": [
{
"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",
"name": "stderr"
},
{
"output_type": "execute_result",
"data": {
"text/plain": "[0.9, 0.83, 0.77500000000000002]"
},
"metadata": {},
"execution_count": 30
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "ed_df = pd.DataFrame(dict(x=range(3), y=ed_market_share))\ned_fit = linear_model.LinearRegression().fit(X=ed_df.x.reshape(-1, 1), y=ed_df.y)\ned_market_share = list(ed_market_share[1:]) + [ed_market_share[-1] + ed_fit.coef_[0]]\ned_market_share",
"execution_count": 31,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "[0.94, 0.92, 0.90500000000000014]"
},
"metadata": {},
"execution_count": 31
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Enrollment days/week for ED, inpatient, outpatient"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "monitoring_days = 4, 7, 4\n\n# Indices to each value\nED, INPATIENT, OUTPATIENT = 0, 1, 2\n\nmonitoring_rate = np.array(np.array(monitoring_days)/7)\nmonitoring_rate",
"execution_count": 32,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "array([ 0.57142857, 1. , 0.57142857])"
},
"metadata": {},
"execution_count": 32
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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",
"execution_count": 33,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "(157, 18)"
},
"metadata": {},
"execution_count": 33
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "setting_data = dict(list(merged_data.groupby('setting')))",
"execution_count": 34,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Virus data"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "viruses = ['rotavirus','sapovirus','astrovorus','norovirus']",
"execution_count": 35,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rotavirus_data.groupby(['under_5', 'year', 'setting']).stool_collected.sum().astype(int)",
"execution_count": 36,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "under_5 year setting\n0 0 0 142\n 1 8\n 2 110\n 1 0 150\n 1 4\n 2 82\n 2 0 125\n 1 1\n 2 63\n1 0 0 406\n 1 44\n 2 249\n 1 0 439\n 1 42\n 2 220\n 2 0 365\n 1 35\n 2 209\nName: stool_collected, dtype: int64"
},
"metadata": {},
"execution_count": 36
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rotavirus_data[rotavirus_data.stool_collected].groupby(['under_5', 'year', 'setting'])[viruses].mean().round(2)",
"execution_count": 37,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": "<div>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th></th>\n <th></th>\n <th>rotavirus</th>\n <th>sapovirus</th>\n <th>astrovorus</th>\n <th>norovirus</th>\n </tr>\n <tr>\n <th>under_5</th>\n <th>year</th>\n <th>setting</th>\n <th></th>\n <th></th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th rowspan=\"9\" valign=\"top\">0</th>\n <th rowspan=\"3\" valign=\"top\">0</th>\n <th>0</th>\n <td>0.24</td>\n <td>0.11</td>\n <td>0.04</td>\n <td>0.09</td>\n </tr>\n <tr>\n <th>1</th>\n <td>0.12</td>\n <td>0.00</td>\n <td>0.00</td>\n <td>0.12</td>\n </tr>\n <tr>\n <th>2</th>\n <td>0.12</td>\n <td>0.09</td>\n <td>0.05</td>\n <td>0.12</td>\n </tr>\n <tr>\n <th rowspan=\"3\" valign=\"top\">1</th>\n <th>0</th>\n <td>0.14</td>\n <td>0.07</td>\n <td>0.03</td>\n <td>0.18</td>\n </tr>\n <tr>\n <th>1</th>\n <td>0.25</td>\n <td>0.00</td>\n <td>0.00</td>\n <td>0.25</td>\n </tr>\n <tr>\n <th>2</th>\n <td>0.07</td>\n <td>0.09</td>\n <td>0.02</td>\n <td>0.15</td>\n </tr>\n <tr>\n <th rowspan=\"3\" valign=\"top\">2</th>\n <th>0</th>\n <td>0.19</td>\n <td>0.05</td>\n <td>0.02</td>\n <td>0.11</td>\n </tr>\n <tr>\n <th>1</th>\n <td>1.00</td>\n <td>0.00</td>\n <td>0.00</td>\n <td>0.00</td>\n </tr>\n <tr>\n <th>2</th>\n <td>0.11</td>\n <td>0.03</td>\n <td>0.02</td>\n <td>0.22</td>\n </tr>\n <tr>\n <th rowspan=\"9\" valign=\"top\">1</th>\n <th rowspan=\"3\" valign=\"top\">0</th>\n <th>0</th>\n <td>0.16</td>\n <td>0.13</td>\n <td>0.03</td>\n <td>0.16</td>\n </tr>\n <tr>\n <th>1</th>\n <td>0.23</td>\n <td>0.02</td>\n <td>0.02</td>\n <td>0.14</td>\n </tr>\n <tr>\n <th>2</th>\n <td>0.15</td>\n <td>0.12</td>\n <td>0.08</td>\n <td>0.18</td>\n </tr>\n <tr>\n <th rowspan=\"3\" valign=\"top\">1</th>\n <th>0</th>\n <td>0.12</td>\n <td>0.12</td>\n <td>0.06</td>\n <td>0.23</td>\n </tr>\n <tr>\n <th>1</th>\n <td>0.19</td>\n <td>0.17</td>\n <td>0.17</td>\n <td>0.31</td>\n </tr>\n <tr>\n <th>2</th>\n <td>0.08</td>\n <td>0.16</td>\n <td>0.08</td>\n <td>0.25</td>\n </tr>\n <tr>\n <th rowspan=\"3\" valign=\"top\">2</th>\n <th>0</th>\n <td>0.15</td>\n <td>0.09</td>\n <td>0.04</td>\n <td>0.22</td>\n </tr>\n <tr>\n <th>1</th>\n <td>0.17</td>\n <td>0.06</td>\n <td>0.00</td>\n <td>0.23</td>\n </tr>\n <tr>\n <th>2</th>\n <td>0.10</td>\n <td>0.08</td>\n <td>0.03</td>\n <td>0.29</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " rotavirus sapovirus astrovorus norovirus\nunder_5 year setting \n0 0 0 0.24 0.11 0.04 0.09\n 1 0.12 0.00 0.00 0.12\n 2 0.12 0.09 0.05 0.12\n 1 0 0.14 0.07 0.03 0.18\n 1 0.25 0.00 0.00 0.25\n 2 0.07 0.09 0.02 0.15\n 2 0 0.19 0.05 0.02 0.11\n 1 1.00 0.00 0.00 0.00\n 2 0.11 0.03 0.02 0.22\n1 0 0 0.16 0.13 0.03 0.16\n 1 0.23 0.02 0.02 0.14\n 2 0.15 0.12 0.08 0.18\n 1 0 0.12 0.12 0.06 0.23\n 1 0.19 0.17 0.17 0.31\n 2 0.08 0.16 0.08 0.25\n 2 0 0.15 0.09 0.04 0.22\n 1 0.17 0.06 0.00 0.23\n 2 0.10 0.08 0.03 0.29"
},
"metadata": {},
"execution_count": 37
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Inpatient Model"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "from pymc3 import Model, Deterministic, sample, NUTS, find_MAP, Potential\nfrom pymc3 import Binomial, Beta, Poisson, Normal, DiscreteUniform\nfrom pymc3 import traceplot, forestplot, summary, df_summary\n\nimport theano.tensor as tt",
"execution_count": 38,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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",
"execution_count": 39,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Full (unpooled) model"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "inpatient_model_full = generate_inpatient_model(setting_data[INPATIENT].drop('setting', axis=1))",
"execution_count": 40,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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)",
"execution_count": 41,
"outputs": [
{
"output_type": "stream",
"text": "Assigned Metropolis to weighted_cases\n [-----------------100%-----------------] 2000 of 2000 complete in 564.3 sec",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "plt.subplots(figsize=(8,12))\nforestplot(inpatient_full_trace[1000:], varnames=['λ'])",
"execution_count": 42,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "<matplotlib.gridspec.GridSpec at 0x11bd5e6d8>"
},
"metadata": {},
"execution_count": 42
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiAAAAMJCAYAAAA6XY1WAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3X98FNW9//H3LsOvDVGxJva2D1usVKPkrtUstUZEomC6\nQCKLaDUC2nqrbbXaImr9mqsVY6u2jRYU9dLWVG65WrykjaY2valYqlRludolUNAriWlrrVsbNboY\nGHa+f0QCuBB2s5PZnOX1fDx8uNmZOeeTk9md95wddnyO4zgCAADwkD/XBQAAgIMPAQQAAHiOAAIA\nADxHAAEAAJ4jgAAAAM8RQAAAgOcIIHDF8uXL9fnPf16RSETXXHON3n777b5ln/vc5xSJRPr+e/zx\nxyVJDz/8sGbMmKELLrhAf/3rX/vWv+yyy7R169Z++/vf//1f/du//ZsikYiqqqr0la98RS+//HLW\nv8ett96qe+65R5J0+eWX65VXXtHzzz+vqqqqfa5/ww036MEHH8yoj3vuuUd1dXUHXO/ee+/Vk08+\nmVHbA9Hf7wfgwEpKSlRdXa1Zs2YpEono85//vM477zy1tbXtc/103wM+7NJLL9Vbb72VbblDhpXr\nAmC+Z599Vj/+8Y/185//XMXFxfrlL3+pf//3f9fixYvV3t6uww47TI2NjSnbLVu2TC0tLfrNb36j\nn/3sZ7ruuuv061//WuPHj9enPvWp/fa3bt06XXfddVq6dKmOP/54SdJjjz2mefPm6YknntDYsWNd\n+b0eeOABSdKbb77pSnuZevbZZ/XpT386J30DSJ/P59Py5ct16KGH9j33k5/8RHV1dXr44Ydd6+eZ\nZ55xra2hgACCrG3atEmnnnqqiouLJUlnn322amtrZdu2XnjhBfn9fs2fP19vvfWWKisr9bWvfU0+\nn0/Dhw/X+++/r0Qi0ff4wQcfPOCMwpIlS3TFFVf0hQ9Jqqqq0qhRo5RMJvX888/rtttu0+jRo/X+\n++9r5cqV+v3vf6/7779ftm1r1KhRuu666/SZz3xG7777rmpra7VlyxYVFRVp2LBhKisrkySdeeaZ\nWrJkiSTpvffe01VXXaXOzk4dcsghuvXWW/XJT35yr7peeeUVfec739Fbb72lZDKpefPmafbs2f3+\nLjfccIMKCgr00ksv6fXXX9enPvUp3XXXXVq1apXa2tp05513yu/364wzztD3v/99rVu3TslkUscf\nf7xqa2tVUFCgM888UyeeeKJeeuklXXHFFbrvvvv02GOPSZK6u7t11lln6be//a2i0ageeOAB2bat\nf/7znzrnnHN09dVX71VPNBrVHXfcoWQyKZ/Pp8svv1zTpk1LYy8ADl6O42jP7/TcuXOnXnvtNR12\n2GH73eaVV17R/PnzFY/HdcQRR+iuu+7SEUccodWrV+/1Op01a5auuuoq3XDDDZKk+fPna9myZTry\nyCMH/fcadA6QpXXr1jkVFRXOa6+95jiO4yxfvtwpKSlx4vG48/Of/9ypq6tzduzY4XR3dzsXXHCB\n89Of/tRxHMdpaWlxIpGI8+Uvf9l58803nbvuusv55S9/ecD+TjrpJOf//u//9rv8ueeec0444QTn\nb3/7m+M4jtPR0eHMnDnTeeuttxzHcZyXX37ZOe2005xt27Y5t912m/Otb33LcRzHefPNN50zzjjD\nWbJkieM4jlNRUeG0tbX1tffiiy86juM4jzzyiHPeeec5juM43/rWt5yf/OQnjm3bzowZM5xNmzY5\njuM43d3dzvTp050//vGPKfUtWbLEufXWW/u2v/DCC50dO3Y4O3bscCKRiLNq1SrHcRxn7ty5zm9+\n8xvHcRznnnvuce68886+Nurr651bbrmlr86lS5f2LTvrrLOctrY2x3EcZ8WKFc61117rOI7jzJ8/\n33n11Vcdx3Gcv//9784JJ5zgdHV1Oc8995wzc+ZMx3Ec5+KLL3aam5sdx3GczZs3O4sWLer/jwHA\nOe6445yqqiqnurramTRpknPWWWc5dXV1zptvvrnP9ZcsWeJMnTrV6erqchzHcb72ta/1vYb39zrd\n1c+u97F8wAwIshYKhXTFFVfoiiuukN/v17nnnqtDDz1Uw4cP13nnnde33pgxY/TFL35Ry5cv1/z5\n83X22Wfr7LPPliR1dnbqj3/8o66++mp95zvf0V//+ldNnDhRl1xySUp/fr9/r7ONffnoRz+qj370\no5J6py3/8Y9/6JJLLunbzrIsdXR06A9/+INuvPFGSdLhhx+uqVOn7rO94447TieeeKIkKRKJ6JZb\nbtG7777bt7yjo0OdnZ36f//v//X10dPTo02bNikYDPZb6+mnny7L6n0pHnvssXtdP7Orraeeekrd\n3d19U7C2besjH/lI33qhUKjv8bnnnqvGxkZNmDBBq1at0nXXXSdJuu+++/TUU0+pqamp7xqbbdu2\n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\n",
"text/plain": "<matplotlib.figure.Figure at 0x11bdea3c8>"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"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'}}",
"execution_count": 43,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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'}))",
"execution_count": 44,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Rate factor for population "
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "rate_factor = 10000",
"execution_count": 45,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "rate_df_index = pd.MultiIndex.from_tuples(inpatient_data_labels.values.tolist(), names=inpatient_data_labels.columns)",
"execution_count": 46,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "inpatient_data_labels",
"execution_count": 47,
"outputs": [
{
"output_type": "execute_result",
"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\n0 5+ 2012/13 white non-hispanic\n1 5+ 2012/13 white hispanic\n2 5+ 2012/13 black non-hispanic\n3 5+ 2013/14 white non-hispanic\n4 5+ 2013/14 white hispanic\n5 5+ 2014/15 white hispanic\n6 5+ 2014/15 black non-hispanic\n7 <5 2012/13 white non-hispanic\n8 <5 2012/13 white hispanic\n9 <5 2012/13 black non-hispanic\n10 <5 2013/14 white non-hispanic\n11 <5 2013/14 white hispanic\n12 <5 2013/14 black non-hispanic\n13 <5 2014/15 white non-hispanic\n14 <5 2014/15 white hispanic\n15 <5 2014/15 black non-hispanic\n16 5+ 2012/13 black hispanic\n17 5+ 2013/14 black hispanic\n18 5+ 2014/15 black hispanic\n19 <5 2012/13 black hispanic\n20 <5 2013/14 black hispanic\n21 <5 2014/15 black hispanic\n22 5+ 2014/15 white non-hispanic\n23 5+ 2013/14 black non-hispanic"
},
"metadata": {},
"execution_count": 47
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "from pymc3 import hpd\ndef _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)",
"execution_count": 48,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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)\nestimates.index = inpatient_data_labels.index\npd.concat([inpatient_data_labels, estimates], axis=1)",
"execution_count": 49,
"outputs": [
{
"output_type": "execute_result",
"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.845</td>\n <td>0.430</td>\n <td>0.009</td>\n <td>0.205</td>\n <td>1.772</td>\n <td>0.773</td>\n <td>0.396</td>\n <td>0.895</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.429</td>\n <td>0.984</td>\n <td>0.020</td>\n <td>0.094</td>\n <td>3.421</td>\n <td>1.197</td>\n <td>0.271</td>\n <td>1.329</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.004</td>\n <td>0.500</td>\n <td>0.012</td>\n <td>0.172</td>\n <td>1.917</td>\n <td>0.915</td>\n <td>0.422</td>\n <td>1.034</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.418</td>\n <td>0.299</td>\n <td>0.007</td>\n <td>0.017</td>\n <td>1.024</td>\n <td>0.352</td>\n <td>0.063</td>\n <td>0.376</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.060</td>\n <td>1.180</td>\n <td>0.028</td>\n <td>0.259</td>\n <td>4.427</td>\n <td>1.834</td>\n <td>0.937</td>\n <td>2.254</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.605</td>\n <td>0.641</td>\n <td>0.014</td>\n <td>0.000</td>\n <td>1.775</td>\n <td>0.405</td>\n <td>0.000</td>\n <td>0.405</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.253</td>\n <td>0.247</td>\n <td>0.006</td>\n <td>0.000</td>\n <td>0.738</td>\n <td>0.186</td>\n <td>0.000</td>\n <td>0.186</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.429</td>\n <td>2.432</td>\n <td>0.047</td>\n <td>7.174</td>\n <td>16.208</td>\n <td>11.257</td>\n <td>9.176</td>\n <td>12.480</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>22.628</td>\n <td>5.570</td>\n <td>0.139</td>\n <td>12.106</td>\n <td>33.637</td>\n <td>22.098</td>\n <td>16.911</td>\n <td>24.050</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.254</td>\n <td>2.636</td>\n <td>0.051</td>\n <td>5.234</td>\n <td>15.231</td>\n <td>10.017</td>\n <td>7.652</td>\n <td>11.122</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.066</td>\n <td>2.614</td>\n <td>0.051</td>\n <td>9.129</td>\n <td>19.126</td>\n <td>13.886</td>\n <td>12.318</td>\n <td>15.786</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.146</td>\n <td>4.843</td>\n <td>0.098</td>\n <td>8.274</td>\n <td>26.776</td>\n <td>16.796</td>\n <td>12.789</td>\n <td>19.115</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.824</td>\n <td>2.480</td>\n <td>0.050</td>\n <td>4.343</td>\n <td>13.940</td>\n <td>8.641</td>\n <td>7.006</td>\n <td>10.218</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.849</td>\n <td>1.850</td>\n <td>0.036</td>\n <td>3.491</td>\n <td>10.579</td>\n <td>6.633</td>\n <td>5.111</td>\n <td>7.435</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.361</td>\n <td>6.633</td>\n <td>0.141</td>\n <td>18.231</td>\n <td>43.795</td>\n <td>29.874</td>\n <td>25.511</td>\n <td>34.154</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.424</td>\n <td>2.293</td>\n <td>0.044</td>\n <td>3.092</td>\n <td>11.894</td>\n <td>7.274</td>\n <td>5.583</td>\n <td>8.557</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.005</td>\n <td>0.151</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>17</th>\n <td>5+</td>\n <td>2013/14</td>\n <td>black</td>\n <td>hispanic</td>\n <td>0.006</td>\n <td>0.135</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>18</th>\n <td>5+</td>\n <td>2014/15</td>\n <td>black</td>\n <td>hispanic</td>\n <td>0.004</td>\n <td>0.165</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>19</th>\n <td>&lt;5</td>\n <td>2012/13</td>\n <td>black</td>\n <td>hispanic</td>\n <td>0.029</td>\n <td>0.910</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>20</th>\n <td>&lt;5</td>\n <td>2013/14</td>\n <td>black</td>\n <td>hispanic</td>\n <td>0.013</td>\n <td>0.388</td>\n <td>0.009</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.005</td>\n <td>0.107</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>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.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 <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.000</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 <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 \\\n0 5+ 2012/13 white non-hispanic 0.845 0.430 0.009 0.205 \n1 5+ 2012/13 white hispanic 1.429 0.984 0.020 0.094 \n2 5+ 2012/13 black non-hispanic 1.004 0.500 0.012 0.172 \n3 5+ 2013/14 white non-hispanic 0.418 0.299 0.007 0.017 \n4 5+ 2013/14 white hispanic 2.060 1.180 0.028 0.259 \n5 5+ 2014/15 white hispanic 0.605 0.641 0.014 0.000 \n6 5+ 2014/15 black non-hispanic 0.253 0.247 0.006 0.000 \n7 <5 2012/13 white non-hispanic 11.429 2.432 0.047 7.174 \n8 <5 2012/13 white hispanic 22.628 5.570 0.139 12.106 \n9 <5 2012/13 black non-hispanic 10.254 2.636 0.051 5.234 \n10 <5 2013/14 white non-hispanic 14.066 2.614 0.051 9.129 \n11 <5 2013/14 white hispanic 17.146 4.843 0.098 8.274 \n12 <5 2013/14 black non-hispanic 8.824 2.480 0.050 4.343 \n13 <5 2014/15 white non-hispanic 6.849 1.850 0.036 3.491 \n14 <5 2014/15 white hispanic 30.361 6.633 0.141 18.231 \n15 <5 2014/15 black non-hispanic 7.424 2.293 0.044 3.092 \n16 5+ 2012/13 black hispanic 0.005 0.151 0.003 0.000 \n17 5+ 2013/14 black hispanic 0.006 0.135 0.004 0.000 \n18 5+ 2014/15 black hispanic 0.004 0.165 0.004 0.000 \n19 <5 2012/13 black hispanic 0.029 0.910 0.020 0.000 \n20 <5 2013/14 black hispanic 0.013 0.388 0.009 0.000 \n21 <5 2014/15 black hispanic 0.005 0.107 0.003 0.000 \n22 5+ 2014/15 white non-hispanic 0.000 0.002 0.000 0.000 \n23 5+ 2013/14 black non-hispanic 0.000 0.002 0.000 0.000 \n\n hpd_97.5 median hpd_25 hpd_75 \n0 1.772 0.773 0.396 0.895 \n1 3.421 1.197 0.271 1.329 \n2 1.917 0.915 0.422 1.034 \n3 1.024 0.352 0.063 0.376 \n4 4.427 1.834 0.937 2.254 \n5 1.775 0.405 0.000 0.405 \n6 0.738 0.186 0.000 0.186 \n7 16.208 11.257 9.176 12.480 \n8 33.637 22.098 16.911 24.050 \n9 15.231 10.017 7.652 11.122 \n10 19.126 13.886 12.318 15.786 \n11 26.776 16.796 12.789 19.115 \n12 13.940 8.641 7.006 10.218 \n13 10.579 6.633 5.111 7.435 \n14 43.795 29.874 25.511 34.154 \n15 11.894 7.274 5.583 8.557 \n16 0.000 0.000 0.000 0.000 \n17 0.000 0.000 0.000 0.000 \n18 0.000 0.000 0.000 0.000 \n19 0.000 0.000 0.000 0.000 \n20 0.000 0.000 0.000 0.000 \n21 0.000 0.000 0.000 0.000 \n22 0.000 0.000 0.000 0.000 \n23 0.000 0.000 0.000 0.000 "
},
"metadata": {},
"execution_count": 49
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "trace, labels = inpatient_full_trace, inpatient_data_labels",
"execution_count": 50,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "index=['age', 'year']\ncolumns=['race', 'ethnicity']\nvarnames=['λ']",
"execution_count": 51,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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)",
"execution_count": 52,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"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)",
"execution_count": 53,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "generate_table(inpatient_full_trace, inpatient_data_labels, index=['age', 'year'], columns=['race', 'ethnicity'])",
"execution_count": 54,
"outputs": [
{
"output_type": "execute_result",
"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.00 (0.17, 1.92)</td>\n <td>1.43 (0.09, 3.42)</td>\n <td>0.85 (0.20, 1.77)</td>\n </tr>\n <tr>\n <th>2013/14</th>\n <td>0.01 (0.00, 0.00)</td>\n <td>0.00 (0.00, 0.00)</td>\n <td>2.06 (0.26, 4.43)</td>\n <td>0.42 (0.02, 1.02)</td>\n </tr>\n <tr>\n <th>2014/15</th>\n <td>0.00 (0.00, 0.00)</td>\n <td>0.25 (0.00, 0.74)</td>\n <td>0.60 (0.00, 1.77)</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.03 (0.00, 0.00)</td>\n <td>10.25 (5.23, 15.23)</td>\n <td>22.63 (12.11, 33.64)</td>\n <td>11.43 (7.17, 16.21)</td>\n </tr>\n <tr>\n <th>2013/14</th>\n <td>0.01 (0.00, 0.00)</td>\n <td>8.82 (4.34, 13.94)</td>\n <td>17.15 (8.27, 26.78)</td>\n <td>14.07 (9.13, 19.13)</td>\n </tr>\n <tr>\n <th>2014/15</th>\n <td>0.01 (0.00, 0.00)</td>\n <td>7.42 (3.09, 11.89)</td>\n <td>30.36 (18.23, 43.80)</td>\n <td>6.85 (3.49, 10.58)</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": "race black white \\\nethnicity hispanic non-hispanic hispanic \nage year \n5+ 2012/13 0.01 (0.00, 0.00) 1.00 (0.17, 1.92) 1.43 (0.09, 3.42) \n 2013/14 0.01 (0.00, 0.00) 0.00 (0.00, 0.00) 2.06 (0.26, 4.43) \n 2014/15 0.00 (0.00, 0.00) 0.25 (0.00, 0.74) 0.60 (0.00, 1.77) \n<5 2012/13 0.03 (0.00, 0.00) 10.25 (5.23, 15.23) 22.63 (12.11, 33.64) \n 2013/14 0.01 (0.00, 0.00) 8.82 (4.34, 13.94) 17.15 (8.27, 26.78) \n 2014/15 0.01 (0.00, 0.00) 7.42 (3.09, 11.89) 30.36 (18.23, 43.80) \n\nrace \nethnicity non-hispanic \nage year \n5+ 2012/13 0.85 (0.20, 1.77) \n 2013/14 0.42 (0.02, 1.02) \n 2014/15 0.00 (0.00, 0.00) \n<5 2012/13 11.43 (7.17, 16.21) \n 2013/14 14.07 (9.13, 19.13) \n 2014/15 6.85 (3.49, 10.58) "
},
"metadata": {},
"execution_count": 54
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "inpatient_rate_samples = pd.concat(\n [inpatient_data_labels, \n pd.DataFrame(inpatient_full_trace['λ'][-1000:]).T], axis=1)",
"execution_count": 55,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "inpatient_rate_samples = (pd.melt(inpatient_rate_samples, id_vars=['age', 'year', 'race', 'ethnicity']))\n\ninpatient_rate_samples['race/ethnicity'] = inpatient_rate_samples.apply(lambda x: x.race + ', ' + x.ethnicity, axis=1)",
"execution_count": 56,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Plot of rates broken down by year/age/race/ethnicity."
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "sns.set(style=\"ticks\")\nrateplot = 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)\nrateplot.despine(left=True)\n\n",
"execution_count": 57,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "<seaborn.axisgrid.FacetGrid at 0x114c90128>"
},
"metadata": {},
"execution_count": 57
},
{
"output_type": "display_data",
"data": {
"image/png": "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\nkZGR2rBhg6KioirMP/ebr/n/p555eHhU+c23X79+rvpOnjwpSdqxY4eeeuopSZKvr6+GDh2qtLQ0\neXl56eabb1b79u0lSVdeeaXy8vKqrDE4OFienp7y9fWVr69vhdd17txZ7dq107hx4zRo0CDNnDnT\n9a09JCRE7dq1k/TjIdHPP/9ckyZN0q5du/TKK6/o0KFDysvL06lTp+q8X9F46Edqt+xPNbd+ZMiQ\nIZKkgICASjUFBATom2++UXh4uAYMGKDZs2e75v3mN7+Rw+HQFVdcoVtvvVVffvlltZ8TSeftf5xO\np7777jvX//HGOsSKn4eA1gDatm3r+n3hwoXKysrS3XffraFDh2r79u0yxsjTs+KuPnz4sMrKynTV\nVVcpJSVFkmSM0XfffVdp/atWraqxhv79+2v16tXy9PTUbbfdpoyMDP3tb39T9+7dXX/Q27RpU2EZ\nc57HsBpj9Morr6hDhw6Sfjx5tmPHjjXWUd2yl19+ufbu3VvhddXVc7ZeSZUOGUjSBRdcUOHfhw4d\ncgWVn+ratat+8Ytf6KOPPlJubq5uvPHGCvM7d+5c5Um7VTn3ff5pzWeVl5ertLS00nacfe2zzz6r\n1NRUeXh46OGHH5ZUcT+c28FLksPh0F//+lft3LlTmzdv1n333ae1a9dKUoXPVHl5udq0aaM1a9bo\ngw8+0NixY9WvXz8dPHiwXvvV39//PHsEDYl+pOZlW0I/8tP38Fw+Pj565513tH37dm3atEn33nuv\n64KLc7ezrKxMbdq00aJFi5SZmVnpcyJV3f+c9dNtLy4uVk5Ojq688spabQMaB1dxNrBt27YpPDxc\nd9xxh44ePaqcnByVlZUpMDBQ//znPyX9eG5FWFiYunXrpry8PH3xxReSpDfffFN/+MMf6tTupZde\nqnbt2umTTz7Rrbfeqr59+2rFihUaNGhQrdfRpk0bV7jo27evKwh8/fXXGjlypOubWU2qWvb06dNq\n06aNysrKfuaWVda7d29Xp7V161bNnTtX0r87oHO3Q5JGjRqlhIQE3XvvvfVu+6yzbfXt21d/+9vf\nJEknTpzQxx9/fN4TpB9++GFt2LBBKSkpVb43P/1jt3fvXk2YMEG9e/fWH//4RwUEBCgjI0OS9NFH\nH6mkpER5eXnatGmT+vXrp61bt2rs2LEKCQmRMUb79u2r9T6vbr+i8dGPtK5+5KzU1FTNnj1bAwYM\n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\nwMBAXXzxxZKkq666Sk6n01VDp06dJEn+/v764YcfKiyXlpampUuXSpIGDBigAQMGKCsrq8paQkND\nNXnyZEVGRmrDhg2KioqqMP/cb77m/6+X8fDwqPKbb79+/Vz1nTx5UpK0Y8cOPfXUU5IkX19fDR06\nVGlpafLy8tLNN9+s9u3bS5KuvPJK5eXlVVljcHCwPD095evrK19f3wqv69y5s9q1a6dx48Zp0KBB\nmjlzputbe0hIiNq1ayfpx/f+888/16RJk7Rr1y698sorOnTokPLy8nTq1Kk671c0HvqRilpqPzJk\nyBBJUkBAQKWaAgIC9M033yg8PFwDBgzQ7NmzXfN+85vfyOFw6IorrtCtt96qL7/8strPiaTz9j9O\np1Pfffed6/94Yx1ibUxlZWXKzMxs0HV269ZNbdq0adB1ng8BrQG0bdvW9fvChQuVlZWlu+++W0OH\nDtX27dtljJGnZ8VdffjwYZWVlemqq65SSkqKJMkYo++++67S+mt7/PvcD05VbT7yyCPy8fHRoEGD\ndOedd+q9996TpEqv+9e//iU/Pz95eHjomWee0ezZszVmzJhaH+4yxuiVV15Rhw4dJP144u3ll1+u\nvXv3Vlvv2eUkuQKIVPX5KxdccEGFfx86dMgVVH6qa9eu+sUvfqGPPvpIubm5uvHGGyvM79y5c5Un\n7Vbl3Pf5pzWfVV5ertLS0krbcfa1zz77rFJTU+Xh4aGHH35YUsX9cG4HL0kOh0N//etftXPnTm3e\nvFn33Xef1q5dK6ni+1ZeXq42bdpozZo1+uCDDzR27Fj169dPBw8erNd+9ff3P88eQUOiH6mopfYj\nP91P5/Lx8dE777yj7du3a9OmTbr33ntd+/fc7SwrK1ObNm20aNEiZWZmVvqcSFX3P2f9dNuLi4uV\nk5NTq0PPzUVmZqamT59+3v39c5SWluq55577WV8y6ourOBvYtm3bFB4erjvuuENHjx5VTk6OysrK\nFBgYqH/+85+Sfjy3IiwsTN26dVNeXp6++OILSdKbb76pP/zhD3Vue8uWLSooKNCZM2f0j3/8Q7ff\nfnul2h5++GENHjxYaWlpkn78TxsYGKh//OMfkn7spB588EFXUOjbt6+ioqIUFxdX6zr69u3rChFf\nf/21Ro4cqdOnT6tNmzYqKyur8/ad1bt3b1entXXrVs2dO9e1LdKPHdnZkCRJo0aNUkJCgu699956\nt33W2bb69u2rv/3tb5KkEydO6OOPP65w3s1PPfzww9qwYYNSUlI0aNCgatd71t69ezVhwgT17t1b\nf/zjHxUQEKCMjAxJ0kcffaSSkhLl5eVp06ZN6tevn7Zu3aqxY8cqJCRExhjt27ev1vu8uv2Kxkc/\n0rr6kbNSU1M1e/ZsDRgwQLGxsfLy8lJ2drYkud73rKws7dq1S4GBgdq6dWuVn5OaeHt7q0uXLtq+\nfbskacOGDY1y1Xhj8/T01IUXXtggPz8n6I0aNUr333+/7r//fj3++ON1r7/OS6JKU6dO1ezZs9Wh\nQwddfvnl6tWrlzIzMzV+/HglJCRo5MiR8vDw0Jw5c+Tt7a1ly5YpISFBxcXF8vb21qJFi+rc9rXX\nXqsHHnhABQUFuvvuu3X77bdXGLKPjIzUuHHj1KFDB/n5+alr167KzMzUww8/rLi4ON1zzz3y9PTU\n008/Lenf3zrPnvSenJyssLCwGuuIi4vT3LlzXQ+PXbJkiS666CLdeOONeu6557R06VJde+21FZb5\nOVd6zZkzR7GxsVq7dq3at2+vxMTECuvo3bu3oqOj1bFjR/3ud7/THXfcoTlz5jTow2zPtjV9+nTN\nnz9fd999t4wxioiI0PXXX699+/ZV+frarves66+/XjfddJNCQkLUvn173XDDDQoODtbu3bvVrl07\njR8/XoWFhZo6dar8/f31+9//XvPmzdOqVavk5eWlW265RZmZmbrqqqtqbLu6/YrGRz/SuvqRswYM\nGKAPPvhAISEhatu2re644w4FBARIkk6fPq1Ro0appKRECQkJuuSSS6r9nNTUjiQtXrxY8+bN0+LF\ni+Xr66vFixc32Ha1ZsXFxZKkV199td7r4ka1qLO0tDSlpKQ02k376mrz5s164403tGLFiqYupcGc\nveprxowZTVwJUD/0IzWLiYlR3759G3T0rqX79ttv9cgjj1Q61FtXxcXFWrZsWY2HOHft2qU//vGP\n6tq1q8rKyvToo4/qV7/6laQfz+98//33a12T20fQnn/+eaWmpqqkpETjx493fStxOBwKCAio9tYD\nQEN46qmntGnTJr3wwgtNXQqAZop+BLXVrl07hYeHa8yYMfrmm2/04IMPqnfv3jpy5Ihyc3MVHh4u\nT09PrV69usZ1uXUELS0tTatXr9af//xnnTp1Si+99JL27Nmj8PBwBQYGKj4+Xv3799fQoUPdVQIA\n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\nbQrAHo/MAAAAAElFTkSuQmCC\n",
"text/plain": "<matplotlib.figure.Figure at 0x11c6ecf60>"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Pooled across race/ethnicity"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "inpatient_pool_race_data = (setting_data[INPATIENT].drop('setting', axis=1)\n .groupby(['under_5', 'year'])[['cases','n']]\n .sum()\n .reset_index())\ninpatient_pool_race_data",
"execution_count": 58,
"outputs": [
{
"output_type": "execute_result",
"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\n0 0 0 10 102191\n1 0 1 5 103789\n2 0 2 2 104679\n3 1 0 48 40548\n4 1 1 44 41013\n5 1 2 36 41411"
},
"metadata": {},
"execution_count": 58
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "inpatient_model_pool_race = generate_inpatient_model(inpatient_pool_race_data)",
"execution_count": 59,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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)",
"execution_count": 60,
"outputs": [
{
"output_type": "stream",
"text": "Assigned Metropolis to weighted_cases\n [-----------------100%-----------------] 2000 of 2000 complete in 3.1 sec",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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'}))",
"execution_count": 61,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "generate_table(inpatient_pool_race_trace, inpatient_pool_race_data_labels, index=['year'], columns=['age'])",
"execution_count": 62,
"outputs": [
{
"output_type": "execute_result",
"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.06 (0.41, 1.70)</td>\n <td>13.09 (9.32, 16.38)</td>\n </tr>\n <tr>\n <th>2013/14</th>\n <td>0.58 (0.14, 1.05)</td>\n <td>13.21 (9.34, 17.32)</td>\n </tr>\n <tr>\n <th>2014/15</th>\n <td>0.25 (0.01, 0.60)</td>\n <td>11.43 (7.74, 15.17)</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": "age 5+ <5\nyear \n2012/13 1.06 (0.41, 1.70) 13.09 (9.32, 16.38)\n2013/14 0.58 (0.14, 1.05) 13.21 (9.34, 17.32)\n2014/15 0.25 (0.01, 0.60) 11.43 (7.74, 15.17)"
},
"metadata": {},
"execution_count": 62
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"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)",
"execution_count": 63,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"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",
"execution_count": 64,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Plot of rates pooled by ethnicity"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "sns.set_context(font_scale=1.5)\nsns.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)",
"execution_count": 65,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "<matplotlib.axes._subplots.AxesSubplot at 0x11ada9ef0>"
},
"metadata": {},
"execution_count": 65
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfQAAAFqCAYAAADsuqi5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHe9JREFUeJzt3XtU1VX+//EXV2+ooIvEPA0qmYV2WZNONmvpUojE7OKp\nbCkiknQx5Qxm5aXjpa8KWLma1gDO2DjhACYz5qIYa7Kgi12cyWZNziDqlFGCoqmpKGbI5feHv87k\n4AXhfM6BfZ6Pv+Jz2J/9/qx2vfjs8/ns7dfU1NQkAADQofl7uwAAANB2BDoAAAYg0AEAMACBDgCA\nAQh0H5CVleXtEmAYxhTcifHkHn485W6+wYMHa/fu3d4uAwZhTMGdGE/uEWjVievr6/X0009r3759\nOnPmjGbMmKG+ffvq0UcfVf/+/SVJkydP1rhx46wqAQAAn2FZoBcXFyssLEzPPfecjh8/rgkTJmjW\nrFmaPn26kpOTreoWAACfZFmgjxs3TvHx8ZKkxsZGBQYGaseOHfrqq69UUlKiyMhIOZ1Ode3a1aoS\nAADwGZYFepcuXSRJJ0+eVFpammbPnq26ujpNnDhR0dHR+t3vfqesrCzNmzfvss99+vRplZWVKTw8\nXAEBAe4u3UhVVVXeLgGGYUzBnRhPl9bQ0KBDhw5p6NCh6ty5c7PPLX0orrq6WqmpqUpMTJTdbteJ\nEyfUvXt3SdKePXu0fPly5ebmXvQcWVlZys7OtqpEAAA6vNTUVOsC/fDhw0pKStLixYs1YsQISdID\nDzygRYsW6frrr1dBQYEOHDigJ5988rLP/c033+j222/XunXrFBER4e7SAQBodw4cOKApU6bo7bff\nVmRkZLPPLZtyX716tWpqarRq1Srl5OTIz89PCxYsUEZGhoKCghQeHq6lS5e26tw/TrNHRETIZrO5\ns2wAANq1C33VbFmgO51OOZ3OZsfXr19vVZcAAPgsVooDAMAABDoAAAYg0AEAMACBDgCAAQh0AAAM\nQKADAGAAAh0AAAMQ6AAAGMCyhWUAAGgPampq5HQ6derUKR09elTLli1TdHS05s+fr8rKSg0cOFD7\n9u1Tbm6uXnvtNRUWFkqSEhISdPfdd7vO09TUdE6b/fv36+WXX1ZcXJz69eunuLg4denSRevXr1dA\nQIDGjh2rBx98UAsWLNDkyZN1ww03KDs7WwMHDtQPP/ygd955RydOnNDp06f17LPPauDAgW26TgId\nAGC0b775RgkJCbr11lv15ptv6o033tD+/fsVEhKiV155RZ9++qmys7N19OhRFRQU6E9/+pMkacqU\nKRozZoxrU7GSkpJmbaSze5e88cYbqq2tVUpKijZs2CA/Pz8lJydr1KhRF6wrODhY+fn5+uyzz/Ti\niy/qN7/5TZuuk0AHABitd+/eys/PV3FxsU6cOKF+/frp66+/1vXXXy9JuummmyRJlZWVOnDggB58\n8EE1NTWptrZW+/bt07XXXitJqqioaNZGkvr06aPg4GDt2rVLgwcPdq21fsMNN6iiouKcWn66H9rw\n4cNdv7d37942XyffoQMAjLZ27VrFxcUpMzNT0dHRampqUlRUlP79739LkrZv3y5JstlsGjhwoPLy\n8pSfn6+77rrrnA3AoqKiVFZWdk4bSfLz83O13717txoaGtTQ0KDPP/9cP/vZzxQcHKyDBw9Kknbu\n3OlqV15e7jpXW6fbJe7QAQCGGz16tJYtW6a1a9fqiiuukCTFxMTonXfe0dSpU9WnTx8FBgaqV69e\nuuuuu5SQkKDTp09r5MiRCgkJcZ0nJiZGJSUl57SR/hvovXr1UkJCgiZPnqzGxkbFxcXpmmuu0X33\n3Sen06nCwkKFhoa6zvfVV19p2rRpamxsVGZmZpuv07L90K1UVVWl2NhYlZaWsn0qAOCy7dmzR3v3\n7tWYMWP02WefaePGjZcM1da0uZCioiIdPnxYDz/8cIvbXCr7uEMHAPiciIgIZWRk6KWXXlJgYKCW\nLl1qSRtPItABAD6nW7du+sMf/mB5mwux2+1uOc9P8VAcAAAGINABADAAU+4AAKM1NDSoqqrKree0\n2Wyu983bCwIdAGC0qqoqzZo1y/WaWVvV19crJydHkZGRbjmfuxDoAADjBQYGKjg42KN93nvvva73\n2G02mzIyMiztj0AHAMDN6urqJEl5eXke65OH4gAAcLNdu3bp1KlTSklJUXJy8jlLxcbExLgC3524\nQwcAwM06d+6slJQUTZw4UV9//bUefvhhDR8+XJWVlTpy5IhSUlIUGBio3Nxct/VJoAMA4Gb9+/d3\nPTTXv39/hYaGKi0tTX369FFMTIxefvllBQUFubVPAh0AYLz6+nqPnmvjxo36z3/+oyVLlujgwYOq\nra1VeHi4pLObuVixjQqBDgAwms1mU05OjtvPeTH333+/FixYoISEBPn7+ysjI0P+/mcfWystLXVr\n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\njxZcvtauayC1fm0D1jUAzOOzgQ60F61d10BibQMA/+WzgX7kyBHV1NR4uwzL/fDDD94uAQDgAT4b\n6L1791anTp28XYblQkJCvF0CAMADeModAAAD+OwdekREhFeecu/du7dH+4yIiPBofwAA7/DZQPfG\nq1w8wGQ2XoUE4E0+G+iAu/EqJNoLXoX0TQQ64Ca8OYH2glchfROBDrgJb04A8CYCHXATHrQE4E0e\nD/SmpiY988wz2r17t4KDg5Wenq6rrrrK02W0SWu/n6qoqFB6enqr+uT7qfaPBy3hbjxoicvh8UAv\nKSlRXV2dCgsLtX37dmVmZmrVqlWeLqNN2vL9FAC01I4dO7zyXIan+zxy5IhH+zOVxwP9H//4h0aO\nHClJuvHGG1VWVubpEgCgQxgyZAhf46DFPB7oJ0+eVPfu3f9bQGCgGhsb5e/f8kXrGhoaJPH6DMyw\nefNmffnll61qW1lZqQULFlx2u6uvvlpjx45tVZ/wnJkzZ3q8z5ycHM2aNcvj/VZVVXm8z47mx8z7\nMQP/l19TU1OTJwtasWKFbrrpJsXHx0uSRo8erffff/+Cv5+VlaXs7GwPVQcAQMeTmprq+Tv0n//8\n53rvvfcUHx+vzz//XNdcc81Ff9/hcMjhcJxz7PTp0yorK1N4eLgCAgKsLNcIsbGxKi0t9XYZMAhj\nCu7EeGqZhoYGHTp0SEOHDlXnzp2bfe7xQI+Li9PHH3+sSZMmSZIyMzMv+xydO3fWsGHD3F2a0Ww2\nm7dLgGEYU3AnxlPLREZGXvAzjwe6n5+f/u///s/T3QIAYDS2TwUAwAAEOgAABiDQfUBqaqq3S4Bh\nGFNwJ8aTe3j8tTUAAOB+3KEDAGAAAh0AAAMQ6AAAGIBABwDAAAQ6AAAGINABADAAgd6O1dfXa+7c\nuZoyZYoeeOABvfvuu9q7d68SEhKUmJjYbAnd7777TmPHjlVdXZ2ks1vVzpgxQ1OnTtWkSZP0+eef\nu343PT3dtV3h/7b7/vvvNXPmTCUmJmr69On69ttvPXTFsFpbx9TFxsbFxtSP9uzZo2HDhjU7jo6p\nrePpR+cbF5caT6NGjVJSUpKSkpL061//2sKr7DgI9HasuLhYYWFhWrdundasWaNly5YpMzNTc+bM\nUUFBgRobG1VSUiJJ+uijj5SSkqIjR4642ufm5uqXv/yl8vPzlZmZqaVLl7o+q6qqks1mO2+7P//5\nzxo6dKgKCgp011136fe//73nLhqWauuYutjYuNiYks7+gfncc8+pU6dOnrlYWK6t40m68Li42Hja\nu3evhgwZory8POXl5enxxx+3/mI7AAK9HRs3bpzS0tIknd02LyAgQOXl5a6d5kaNGqWtW7dKkgIC\nArR27Vr17NnT1f7BBx907WpXX1/v+g9mz549ioqKumC7adOm6bHHHpMk7d+//5zP0LG1dUxdaGxc\nakxJ0uLFizVnzpzzbvuIjqmt40k6/7i41HgqKyvTwYMHlZSUpEcffVQVFRWWXmdHQaC3Y126dFHX\nrl118uRJpaWl6fHHH9dPF/br1q2bTpw4IUm69dZb1bNnz3M+DwkJUXBwsA4dOqS5c+fqiSeekCS9\n9957Gj169AXbSWd3xZs2bZrWrVun2267zeIrhae0dUxJ5x8blxpT2dnZGj16tAYPHtzsfOi42jqe\nLjQuLjWerrjiCj366KPKy8vTI488oqeeesriK+0YCPR2rrq6WtOmTZPdbtf48ePl7//ff2W1tbXq\n0aPHOb/v5+d3zs+7d+/W9OnT9cQTT7j+av7nP/+pm2+++aLtJOmPf/yjCgoK5HA43HU5aAfaOqak\n5mPjUmOquLhYr776qqZOnarDhw8rJSXFnZcEL2rLeLrQuLjUeBo6dKhiYmIkSTfffLMOHTrk9uvq\niDy+Hzpa7scBvnjxYo0YMUKSdN1112nbtm0aPny4tmzZ4jr+o5/+Ffvll19q9uzZevHFFzV48GBJ\nUk1Njbp3797sf9I/bffSSy+pT58+uueee9S1a1cFBARYdYnwsLaOqfONjZaMqbffftv1zzExMXr5\n5ZetuDx4WFvH0/nGRUvGU3Z2tkJDQ/XQQw9p165d6tu3rxWX1+EQ6O3Y6tWrVVNTo1WrViknJ0d+\nfn5yOp1avny5zpw5o6ioKMXHx5/T5qf/Ebzwwguqq6tTenq6mpqa1KNHD91xxx0aOXJks75+2u6+\n++7TvHnz9Oqrr6qpqUmZmZnWXSQ8qq1j6nxjY8uWLZccU/97nGl3M7R1PP3v8aamphaNpx+n2T/4\n4AMFBgby/6j/j93WAAAwAN+hAwBgAAIdAAADEOgAABiAQAcAwAAEOgAABiDQAQAwAIEOAIABCHQA\nAAxAoAOQJM2dO1cbNmxw/ZyUlKR//etfmj59uu69915NmTJFO3fulCR98cUXSkpK0sSJExUTE6OC\nggJJZ5fkfOihh3TnnXdq/fr1XrkOwFex9CsASWeXdc3KytLEiRO1f/9+fffdd1qxYoUWL16sa6+9\nVnv27NGsWbP01ltvacOGDZo5c6ZGjBihyspK3XPPPUpMTJQk1dXVadOmTV6+GsD3sPQrAJexY8cq\nNzdXr732mpqamvTb3/5WgwYNcq29fuzYMb3++uvq3r27PvzwQ+3evVu7d+/Wm2++qZ07dyo7O1s/\n/PCDa6teAJ7DHToAlwkTJmjTpk166623tHr1auXm5qqoqMj1+cGDB9WzZ085HA6FhoZqzJgxuuOO\nO/Tmm2+6fqdTp07eKB3weXyHDsDFbrersLBQV155pfr27avIyEgVFxdLkj7++GPXtPonn3yiX/3q\nV4qJidGnn34qSeygBngZd+gAXCIiIhQREaEJEyZIkp5//nktWbJEa9asUXBwsF588UVJksPh0OTJ\nk9WjRw8NGDBANptNVVVV3iwd8Hl8hw7A5eDBg0pKStKmTZsUFBTk7XIAXAam3AFIkjZv3iy73a4n\nn3ySMAc6IO7QAQAwAHfoAAAYgEAHAMAABDoAAAYg0AEAMACBDgCAAf4ffPLZy9eSepgAAAAASUVO\nRK5CYII=\n",
"text/plain": "<matplotlib.figure.Figure at 0x11b02a208>"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Pooled across years"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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\ninpatient_pool_year_data",
"execution_count": 66,
"outputs": [
{
"output_type": "execute_result",
"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\n0 1 2 1 1 0 552\n1 1 1 1 1 0 566\n2 1 0 1 1 0 533\n3 1 2 1 0 8 13471\n4 1 1 1 0 10 13511\n5 1 0 1 0 13 13591\n6 1 2 0 1 17 6909\n7 1 1 0 1 10 6994\n8 1 0 0 1 15 7134\n9 1 2 0 0 11 20479\n10 1 1 0 0 24 19942\n11 1 0 0 0 20 19290\n12 0 2 1 1 0 983\n13 0 1 1 1 0 914\n14 0 0 1 1 0 891\n15 0 2 1 0 1 40556\n16 0 1 1 0 0 40656\n17 0 0 1 0 4 40334\n18 0 2 0 1 1 15653\n19 0 1 0 1 3 14692\n20 0 0 0 1 2 13889\n21 0 2 0 0 0 47487\n22 0 1 0 0 2 47527\n23 0 0 0 0 4 47077"
},
"metadata": {},
"execution_count": 66
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "inpatient_model_pool_year = generate_inpatient_model(inpatient_pool_year_data, pool_years=True)",
"execution_count": 67,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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)",
"execution_count": 68,
"outputs": [
{
"output_type": "stream",
"text": "Assigned Metropolis to weighted_cases\n [-----------------100%-----------------] 2000 of 2000 complete in 30.1 sec",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"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))",
"execution_count": 69,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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)\nestimates_pooled.index = inpatient_pool_year_labels.index\npd.concat([inpatient_pool_year_labels, estimates_pooled], axis=1)",
"execution_count": 70,
"outputs": [
{
"output_type": "execute_result",
"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.003</td>\n <td>0.107</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>1</th>\n <td>&lt;5</td>\n <td>black</td>\n <td>non-hispanic</td>\n <td>26.644</td>\n <td>4.522</td>\n <td>0.130</td>\n <td>18.073</td>\n <td>35.547</td>\n <td>26.388</td>\n <td>23.132</td>\n <td>29.001</td>\n </tr>\n <tr>\n <th>2</th>\n <td>&lt;5</td>\n <td>white</td>\n <td>hispanic</td>\n <td>70.787</td>\n <td>10.213</td>\n <td>0.353</td>\n <td>50.471</td>\n <td>90.144</td>\n <td>70.350</td>\n <td>63.174</td>\n <td>76.382</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.384</td>\n <td>3.838</td>\n <td>0.089</td>\n <td>24.137</td>\n <td>38.477</td>\n <td>31.189</td>\n <td>27.996</td>\n <td>33.245</td>\n </tr>\n <tr>\n <th>4</th>\n <td>5+</td>\n <td>black</td>\n <td>hispanic</td>\n <td>0.001</td>\n <td>0.017</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>5</th>\n <td>5+</td>\n <td>black</td>\n <td>non-hispanic</td>\n <td>1.219</td>\n <td>0.540</td>\n <td>0.015</td>\n <td>0.323</td>\n <td>2.292</td>\n <td>1.145</td>\n <td>0.727</td>\n <td>1.400</td>\n </tr>\n <tr>\n <th>6</th>\n <td>5+</td>\n <td>white</td>\n <td>hispanic</td>\n <td>3.804</td>\n <td>1.572</td>\n <td>0.041</td>\n <td>1.113</td>\n <td>6.877</td>\n <td>3.589</td>\n <td>2.288</td>\n <td>4.234</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.267</td>\n <td>0.507</td>\n <td>0.014</td>\n <td>0.440</td>\n <td>2.268</td>\n <td>1.206</td>\n <td>0.758</td>\n <td>1.410</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " age race ethnicity mean sd mc_error hpd_2.5 hpd_97.5 \\\n0 <5 black hispanic 0.003 0.107 0.002 0.000 0.000 \n1 <5 black non-hispanic 26.644 4.522 0.130 18.073 35.547 \n2 <5 white hispanic 70.787 10.213 0.353 50.471 90.144 \n3 <5 white non-hispanic 31.384 3.838 0.089 24.137 38.477 \n4 5+ black hispanic 0.001 0.017 0.000 0.000 0.000 \n5 5+ black non-hispanic 1.219 0.540 0.015 0.323 2.292 \n6 5+ white hispanic 3.804 1.572 0.041 1.113 6.877 \n7 5+ white non-hispanic 1.267 0.507 0.014 0.440 2.268 \n\n median hpd_25 hpd_75 \n0 0.000 0.000 0.000 \n1 26.388 23.132 29.001 \n2 70.350 63.174 76.382 \n3 31.189 27.996 33.245 \n4 0.000 0.000 0.000 \n5 1.145 0.727 1.400 \n6 3.589 2.288 4.234 \n7 1.206 0.758 1.410 "
},
"metadata": {},
"execution_count": 70
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "generate_table(inpatient_pool_year_trace, inpatient_pool_year_labels, index=['race','ethnicity'], columns=['age'])",
"execution_count": 71,
"outputs": [
{
"output_type": "execute_result",
"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.00 (0.00, 0.00)</td>\n </tr>\n <tr>\n <th>non-hispanic</th>\n <td>1.22 (0.32, 2.29)</td>\n <td>26.64 (18.07, 35.55)</td>\n </tr>\n <tr>\n <th rowspan=\"2\" valign=\"top\">white</th>\n <th>hispanic</th>\n <td>3.80 (1.11, 6.88)</td>\n <td>70.79 (50.47, 90.14)</td>\n </tr>\n <tr>\n <th>non-hispanic</th>\n <td>1.27 (0.44, 2.27)</td>\n <td>31.38 (24.14, 38.48)</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": "age 5+ <5\nrace ethnicity \nblack hispanic 0.00 (0.00, 0.00) 0.00 (0.00, 0.00)\n non-hispanic 1.22 (0.32, 2.29) 26.64 (18.07, 35.55)\nwhite hispanic 3.80 (1.11, 6.88) 70.79 (50.47, 90.14)\n non-hispanic 1.27 (0.44, 2.27) 31.38 (24.14, 38.48)"
},
"metadata": {},
"execution_count": 71
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"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)",
"execution_count": 72,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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\ninpatient_pool_year_samples['race/ethnicity'] = inpatient_pool_year_samples.apply(lambda x: x.race + ', ' + x.ethnicity, axis=1)",
"execution_count": 73,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Plot of rates pooled by year"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "sns.set_context(font_scale=1.5)\nplt.subplots(figsize=(12,6))\nsns.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",
"execution_count": 74,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "<matplotlib.axes._subplots.AxesSubplot at 0x120133ba8>"
},
"metadata": {},
"execution_count": 74
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtgAAAGGCAYAAABBv/YfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XtcVdW+///3AkQRvOAlNTE1wtxo7nZC2g0T1CxPnbAs\nI0nb7spKdqXbhyIo3lA00wrsaukD1EiPYXbZVmhpZkV2SlNK/RYlKFogKiLIbf3+8Oc6uUVFGGvN\nhb6ef+Gca47xWYvh5M1kzDFtdrvdLgAAAABGeFhdAAAAAHAxIWADAAAABhGwAQAAAIMI2AAAAIBB\nBGycU3JystUlADVibMKdMT7hrhibrmFjFRGcy9VXX61du3ZZXQZwBsYm3BnjE+6KsekaTr+CvW3b\nNkVHR0uSfvzxRz344IN66KGH9I9//EOHDh2SJK1cuVL33HOPhg8frs8++8zZJQEAAABO4+XMxhcv\nXqx3331Xvr6+kqTZs2dr6tSpuvrqq/X222/r9ddf1+jRo5WWlqaMjAyVlZXpgQce0E033aRGjRo5\nszQAAADAKZx6Bbtz585atGiR498LFy7U1VdfLUmqrKyUt7e3tm/frt69e8vLy0t+fn7q0qULf7oA\nAABAg+XUK9gDBw7Uvn37HP9u06aNJOl///d/tWLFCi1btkyff/65mjVr5nhN06ZNVVxcXKf+ysrK\ntGPHDrVt21aenp71Kx4OeXl5VpcA1IixCXfG+IS7YmyaUVVVpT/++EM9e/ZUkyZNTtvn1IBdkw8/\n/FCvvvqqXnvtNfn7+8vPz0/Hjh1z7C8pKVHz5s3P205ycrJSUlKcWSr+fxEREVaXANSIsQl3xviE\nu2JsOp9LA/a7776rlStXKi0tzRGie/Xqpeeff17l5eU6ceKEfvnlFwUFBZ23rZiYGMXExJy27bff\nftOgQYO0fPlytW/f3invAQAAADhw4IAefPBBffzxx+rcufNp+1wWsKurqzV79mxdfvnlevLJJ2Wz\n2XT99ddr7Nixio6OVlRUlOx2u8aNGydvb+869XFqWkj79u0VEBBgsnwAAADgDDVNS3Z6wO7YsaPS\n09MlSV9//XWNrxk2bJiGDRvm7FIAAAAAp+NJjgAAAIBBBGwAAADAIAI2AAAAYBABGwAAADCIgA0A\nAAAYRMAGAAAADCJgAwAAAAYRsAEAAACDXPqodAAAAFy6jh49qri4OB0/flxFRUWaOXOmgoODNWnS\nJOXm5urKK6/Uvn37tGTJEq1Zs8bxsMKoqCjdddddjnbsdvtpx+zfv19vvvmmBg4cqI4dO2rgwIHy\n8fHRW2+9JU9PT9122216+OGHFRsbqwceeEC9evVSSkqKrrzySp04cUKffPKJiouLVVZWprlz5+rK\nK6+s1/skYAMAAMAlfvvtN0VFRemGG27Qhx9+qA8++ED79++Xn5+fVqxYoaysLKWkpKioqEjLli3T\n22+/LUl68MEH1b9/fzVr1kySlJmZecYxklRQUKAPPvhAJSUlGj16tFatWiWbzaZRo0YpLCzsrHV5\ne3srLS1NW7du1fPPP68XX3yxXu+TgA0AAACXaN26tdLS0rR27VoVFxerY8eO+vXXX3XNNddIkq69\n9lpJUm5urg4cOKCHH35YdrtdJSUl2rdvn7p37y5JysnJOeMYSWrXrp28vb31008/6eqrr5anp6ck\nqVevXsrJyTmtFrvd7vg6NDTU8bq9e/fW+30yBxsAAAAusXTpUg0cOFBz5sxRcHCw7Ha7AgMD9cMP\nP0iStm3bJkkKCAjQlVdeqdTUVKWlpenOO+9UQECAo53AwEDt2LHjtGMkyWazOY7ftWuXqqqqVFVV\npe+//15XXHGFvL29dfDgQUnSjz/+6DguOzvb0VZ9p4dIXMEGAACAi9x6662aOXOmli5dqssuu0yS\nFB4erk8++UTR0dFq166dvLy81KpVK915552KiopSWVmZbrnlFvn5+TnaCQ8PV2Zm5mnHSP8XsFu1\naqWoqCg98MADqq6u1sCBA9WtWzfdc889iouLU3p6ulq2bOlo75dfftHIkSNVXV2tOXPm1Pt92ux/\nvj7ewOXl5SkiIkLr168/7bccAAAAuKeff/5Ze/fuVf/+/bV161atXr36vCG3LsecTUZGhgoKCvTI\nI49c0HHnyp1cwQYAAIBl2rdvr9mzZ+u1116Tl5eXZsyY4ZRjXImADQAAAMv4+vrqjTfecPoxZxMZ\nGWmknT/jJkcAAADAIAI2AAAAYBBTRAAAAOAyVVVVysvLM9pmQECAY81rd0DABgAAgMvk5eWdsUxe\nfRw+fFjDhw9X586djbRnAgEbAAAALtWyZUu1atXK0hqOHDmi2267Td26dZMkDRw4UNHR0UbaJmAD\nAADgklFZWakNGzboyJEj+q//+i/Fx8cb74OADQAAgItebm6uVq1apaysLIWFhalRo0basWOHoqOj\n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\nCvbFfgOu2wTsb7/9Vrfccosk6a9//at27NhhcUUA3F1qaqrVJVwScwlhDRM3kiUmJtb5eHe/iQx1\nZ/W0skvhvOk2AfvYsWNq1qyZ499eXl6qrq6Wh0ftHzZZVVUliT+ZAqidjz76SP/v//2/erWRm5ur\n2NjYOh9/1VVX6bbbbqtXDbg4hYaGKjQ01NIa8vLyLO0f7qm+5876njcl9zh3nsqbp/Lnn9nsdrvd\n1QXVJCkpSddee60GDx4sSbr11lv12WefnfX1ycnJSklJcVF1AAAAQO24zRXs6667Tp9++qkGDx6s\n77//Xt26dTvn62NiYhQTE3PatrKyMu3YsUNt27aVp6enM8u9ZERERGj9+vVWlwGcgbEJd8b4hLti\nbJpTVVWlP/74Qz179jzjfhi3CdgDBw7UF198oeHDh0uS5syZc8FtNGnSRCEhIaZLu+QFBARYXQJQ\nI8Ym3BnjE+6KsWlO586da9zuNgHbZrNp+vTpVpcBAAAA1Evt7yAEAAAAcF4EbAAAAMAgz2nTpk2z\nugi4tz59+lhdAlAjxibcGeMT7oqx6Xxus0wfAAAAcDFgiggAAABgEAEbAAAAMIiADQAAABhEwAYA\nAAAMImADAAAABhGw3VhGRoYWLFhwxvbw8HCVl5dfUFs333xzrV6XkpKit99++4zt//znPy+ovws1\nfvx4VVZWOrUPnJ8VY860rKwsjRs37oztc+bM0YEDB5zW72uvvaYffvjBae3DjH379un+++8/Y/up\n7195eblWrVp1we1y7sTZOGvMmca50yy3eVQ6as9ms7m8zxdffNGp7T/33HNObR/1Y8WYq4+a6o2N\njXVqn48++qhT24c5NY2PU9+/vLw8/c///I+GDRtmpC/OnZBcO+bqg3OnOQRsN/fdd99p1KhRKikp\n0dixY9WvXz+dWrp8z549SkpKUnV1tYqKijRt2jRde+21WrVqldLT02W32xUeHq6xY8c62lu4cKGO\nHTumKVOmnLXPzMxM/fvf/9aRI0f01FNP6dZbb9XNN9+szZs3a/ny5Xr33Xfl4eGha665RnFxcYqN\njZXdbld+fr5KS0s1d+5cde3aVQsWLNDOnTtVVFSk7t27a/bs2UpJSVFeXp4KCwuVn5+v2NhY3XTT\nTQoPD9e6deuUn5+v+Ph4VVRUyMfHRwsWLJC/v7/TP2f8H1ePubONiS+++EIvvPCCGjduLH9/f82e\nPVvZ2dl6/fXX1ahRI+Xl5emOO+7QmDFjzmgzJydHjz76qAoLC9W/f3+NHTtW0dHRmjFjhoqKijR3\n7lw1atRHEPiCAAAMfElEQVRITZo00YsvvqiPPvpImZmZKikp0eHDh/XEE09o0KBB+uijj7R8+XJV\nVVXJZrMpJSVFu3fvPq2GIUOG6LHHHlNsbKyGDBmi0NBQxcbGav/+/aqoqNDUqVP117/+1TnfLNRo\n6NChWrx4sZo3b64+ffpo2bJl+stf/qKhQ4dqwYIFKiws1NixY/X777+re/fumjFjhmJjY3XHHXfo\n448/1s8//6yXXnpJDz30kCZPnqwjR45IkuLi4tStW7ez9su589JlxZjj3OneCNhurmnTpnr11Vd1\n6NAh3XfffQoLC3Ps27NnjyZNmqSgoCC9//77euedd3TFFVdo8eLFeu+99+Tt7a0FCxbo+PHjkqS5\nc+fK09PznOFaktq3b6+ZM2cqKytLb7zxhm699VbHvjVr1ighIUE9e/ZUenq6qqqqJElXXHGFkpKS\ntHHjRs2bN0/z589XixYt9MYbb8hut2vIkCH6/fffJUne3t56/fXXtWXLFi1ZskQ33XST47fmuXPn\nasyYMbrpppv06aef6scff9SNN95o8iPFeVgx5moaE1OnTlV6erratm2rtLQ0LVq0SP3791d+fr7e\ne+89lZWV6ZZbbqnxh0RFRYVeeuklVVZWOn5InJKZmanbb79dI0eO1IYNG3T06FFJUllZmZYuXarC\nwkINGzZMAwYM0K+//qrXX39djRs31tSpU7V582ZddtllZ9Tw2GOPOdp/6623FBAQoAULFmjv3r36\n7LPPGvQPiYZowIAB2rx5s9q1a6dOnTppy5Yt8vb2VteuXdWoUSOVlJQoKSlJvr6+GjRokA4dOiTp\n5NW7MWPGaM+ePXriiSc0f/583XjjjRo+fLh+++03xcbGasWKFWftl3PnpcuqMce5030RsN1c7969\nJUmtWrVSs2bNVFRU5DihtmvXTosWLZKPj4+OHTsmPz8/5ebmqlu3bvL29pYkx3yqgoIC7d69W507\ndz5vnz169JAktWnTRqWlpaftmz17tt58803l5eXpb3/7m+PKZt++fSVJ1113nZKSktSkSRMVFBRo\n/Pjxatq0qUpLSx3zBIODgyWd/GF04sSJ09rPyclx/Ifq37//BX5aMMGKMfefY+LQoUPy8/NT27Zt\nJUkhISFauHCh+vfvr27duslms8nHx0dNmjSRJI0ZM0bHjx9Xt27dNGjQIAUFBcnLy0teXl7y9PQ8\nra8xY8bo5Zdf1siRI9W+fXv16tVLkhQaGipJat26tZo3b65Dhw6pVatWmjhxonx8fJSTk6PrrrtO\nkmqs4ZScnBz169dP0snw9NBDD13Ixw8DBg4cqFdeeUWXX365nnnmGaWmpqqqqkqDBg2SJHXq1El+\nfn6STn6/y8rKamxn9+7d+vrrr/Xhhx/Kbrc7AsXZcO68dFk15jh3ui9ucnRz27dvlyT98ccfOn78\nuFq1auU4MScmJuqf//yn5syZ4/gTUqdOnfTLL7+ooqJC0skbbA4ePKg2bdrojTfe0J49e/T555+f\ns89zzbdduXKlpk+frrS0NO3cuVPff/+9JGnnzp2SpG+//VZBQUHauHGjDhw4oOeee07PPPOMysrK\nHHXX1P6pfVdddZXjZof33ntPy5cvr90HBWPcYcy1atVKJSUlKigokHTy5psuXbqc9fhXXnlFqamp\nio+Pr7G9P1u7dq3uuecepaam6qqrrtLKlSslSTt27JB08heDkpISNWnSRMnJyVq4cKESExPVuHFj\nx+dwLldddZXjM8zNzdX48ePPewzMCgoKUm5urrZv365+/fqppKREGzZscPzw/rP//J56eHiourpa\nkhQYGKhRo0YpNTVVL7zwgu66665z9su589LlLmOOc6f74Aq2mztx4oRGjhyp0tJSzZgxQ9L//Qe4\n66679NRTT6lFixZq166dDh8+rFatWukf//iHRowYIZvNpvDwcLVr187RXmJioh555BGtXLlSixYt\n0tChQ9W9e/da19OtWzdFRUXJ19dXHTp0UK9evbR69Wpt2rRJmZmZqq6uVlJSkho3bqyXX35Z0dHR\nkk6GsFN/5qzJqfc0YcIETZ06VS+//LJ8fHz07LPPXvBnhvpxlzE3c+ZMjR07Vh4eHmrevLmSkpK0\ne/fuOt9weeq4Xr16KS4uTj4+PvL09NSMGTOUlZWlgoICjRo1SseOHdO0adPk5+en3r1767777pOn\np6datmyp33//XR07djxnDffff79iY2MVHR2t6upqTZ48uU71on6uv/567d+/3/H1zz//7Lhi9ufv\n339+L1u3bq2Kigo999xzGjNmjCZPnqz09HSVlJQoJiZG0smr0Zw78Z/cZcxx7nQPNnttfq3ARWn5\n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\n",
"text/plain": "<matplotlib.figure.Figure at 0x1206d8198>"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Outpatient Model\n\nImport outpatient denominator information."
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "from redcap import Project\napi_url = 'https://redcap.vanderbilt.edu/api/'\napi_key = open(\"/Users/fonnescj/Dropbox/Collaborations/Halasa/Tokens/outpatient_token.txt\").read()",
"execution_count": 75,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "outpatient_project = Project(api_url, api_key)",
"execution_count": 76,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "outpatients = outpatient_project.export_records(format='df')",
"execution_count": 77,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "outpatients.groupby('year').year.count()",
"execution_count": 78,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "year\n2012 15969\n2015 17562\nName: year, dtype: int64"
},
"metadata": {},
"execution_count": 78
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "outpatients[(outpatients.ptage<5) & (outpatients.ptethnicity=='HL') & (outpatients.year==2012)].shape",
"execution_count": 79,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "(393, 15)"
},
"metadata": {},
"execution_count": 79
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "outpatients_kids = outpatients[outpatients.ptage<=18].copy()",
"execution_count": 80,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "outpatients_kids['under_5'] = (outpatients_kids.ptage<5).astype(int)",
"execution_count": 81,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false,
"scrolled": true
},
"cell_type": "code",
"source": "outpatient_n = (outpatients_kids.rename(columns={'ptname':'n'})\n .groupby(['year', 'under_5'])\n .n.count()\n .reset_index())\noutpatient_n",
"execution_count": 82,
"outputs": [
{
"output_type": "execute_result",
"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>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>13913</td>\n </tr>\n <tr>\n <th>1</th>\n <td>2012</td>\n <td>1</td>\n <td>1422</td>\n </tr>\n <tr>\n <th>2</th>\n <td>2015</td>\n <td>0</td>\n <td>11003</td>\n </tr>\n <tr>\n <th>3</th>\n <td>2015</td>\n <td>1</td>\n <td>6135</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " year under_5 n\n0 2012 0 13913\n1 2012 1 1422\n2 2015 0 11003\n3 2015 1 6135"
},
"metadata": {},
"execution_count": 82
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "interp_2013 = (outpatient_n.groupby(['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'})\ninterp_2013",
"execution_count": 83,
"outputs": [
{
"output_type": "execute_result",
"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>n</th>\n <th>year</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>0</td>\n <td>12943</td>\n <td>2013</td>\n </tr>\n <tr>\n <th>1</th>\n <td>1</td>\n <td>2993</td>\n <td>2013</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " under_5 n year\n0 0 12943 2013\n1 1 2993 2013"
},
"metadata": {},
"execution_count": 83
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "outpatient_n = pd.concat([outpatient_n, interp_2013], axis=0)\noutpatient_n = outpatient_n[outpatient_n.year<2015]\noutpatient_n = outpatient_n.assign(year=outpatient_n.year-2012)\noutpatient_n",
"execution_count": 84,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": "<div>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></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>13913</td>\n <td>0</td>\n <td>0</td>\n </tr>\n <tr>\n <th>1</th>\n <td>1422</td>\n <td>1</td>\n <td>0</td>\n </tr>\n <tr>\n <th>0</th>\n <td>12943</td>\n <td>0</td>\n <td>1</td>\n </tr>\n <tr>\n <th>1</th>\n <td>2993</td>\n <td>1</td>\n <td>1</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " n under_5 year\n0 13913 0 0\n1 1422 1 0\n0 12943 0 1\n1 2993 1 1"
},
"metadata": {},
"execution_count": 84
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "outpatient_data_full = setting_data[OUTPATIENT].groupby(['under_5','year']).cases.sum().reset_index()",
"execution_count": 85,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "outpatient_data_full",
"execution_count": 86,
"outputs": [
{
"output_type": "execute_result",
"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 </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>0</td>\n <td>0</td>\n <td>148</td>\n </tr>\n <tr>\n <th>1</th>\n <td>0</td>\n <td>1</td>\n <td>120</td>\n </tr>\n <tr>\n <th>2</th>\n <td>0</td>\n <td>2</td>\n <td>87</td>\n </tr>\n <tr>\n <th>3</th>\n <td>1</td>\n <td>0</td>\n <td>293</td>\n </tr>\n <tr>\n <th>4</th>\n <td>1</td>\n <td>1</td>\n <td>273</td>\n </tr>\n <tr>\n <th>5</th>\n <td>1</td>\n <td>2</td>\n <td>269</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " under_5 year cases\n0 0 0 148\n1 0 1 120\n2 0 2 87\n3 1 0 293\n4 1 1 273\n5 1 2 269"
},
"metadata": {},
"execution_count": 86
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "outpatient_merged = outpatient_data_full.merge(outpatient_n, on=['under_5','year'])",
"execution_count": 87,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "outpatient_merged",
"execution_count": 88,
"outputs": [
{
"output_type": "execute_result",
"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>148</td>\n <td>13913</td>\n </tr>\n <tr>\n <th>1</th>\n <td>0</td>\n <td>1</td>\n <td>120</td>\n <td>12943</td>\n </tr>\n <tr>\n <th>2</th>\n <td>1</td>\n <td>0</td>\n <td>293</td>\n <td>1422</td>\n </tr>\n <tr>\n <th>3</th>\n <td>1</td>\n <td>1</td>\n <td>273</td>\n <td>2993</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " under_5 year cases n\n0 0 0 148 13913\n1 0 1 120 12943\n2 1 0 293 1422\n3 1 1 273 2993"
},
"metadata": {},
"execution_count": 88
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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[OUTPATIENT]\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",
"execution_count": 89,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "outpatient_model_full = generate_outpatient_model(outpatient_merged)",
"execution_count": 90,
"outputs": [
{
"output_type": "stream",
"text": "Applied logodds-transform to π and added transformed π_logodds to model.\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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)",
"execution_count": 91,
"outputs": [
{
"output_type": "stream",
"text": " [-----------------100%-----------------] 2000 of 2000 complete in 1.7 sec",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "forestplot(outpatient_full_trace[1000:], varnames=['π'])",
"execution_count": 92,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "<matplotlib.gridspec.GridSpec at 0x12765d978>"
},
"metadata": {},
"execution_count": 92
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGCCAYAAADKYjiQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X10FNX9x/HPxkQQUKha4Fg9KFIBoRUE2iDSACEgJoGE\nZy2JKIpWVBSFQEGUiFiwohIIIlYp1FalAj6gBguSRiQ8WPUY8BEJiELFlGgCCcmS+/tjf1kJ5Ikw\nYe8M79c5Odnd2Z357s3O7Cd37u71GWOMAAAALBIW6gIAAACORUABAADWIaAAAADrEFAAAIB1CCgA\nAMA6BBQAAGAdAgrq3bJly3TNNdcoMTFR9957r3744YfgssjISCUmJgZ/Xn/9dUnSCy+8oNjYWI0c\nOVLffPNN8P5jx47VV199Ve32/vOf/+jmm29WYmKi4uPjddttt+mLL7446efx0EMPaf78+ZKkW2+9\nVTt27NDmzZsVHx9f6f2nTJmi55577oS2MX/+fM2cObPG+y1YsEDr1q07oXXXRXXPD0DttGvXTgMH\nDlRCQoISExN1zTXXaNiwYcrJyan0/rU9DhxrzJgxys/PP9lyrREe6gLgbdnZ2frLX/6il156Sc2b\nN9crr7yi+++/X/PmzdPOnTvVrFkzrVy58rjHLV68WBkZGVqzZo2ef/55TZo0SW+99ZbatGmj1q1b\nV7m9LVu2aNKkSUpPT1f79u0lSa+99pqSkpL05ptv6mc/+5kjz2vRokWSpLy8PEfWd6Kys7P1y1/+\nMiTbBnBifD6fli1bpqZNmwZve/bZZzVz5ky98MILjm1nw4YNjq3LBgQU1Kvt27ere/fuat68uSSp\nX79+mjZtmvx+vz744AOFhYUpOTlZ+fn56t+/v26//Xb5fD5FRESouLhYhw4dCl5+7rnnauyRSEtL\n07hx44LhRJLi4+PVsGFDlZWVafPmzXr44Yd11llnqbi4WMuXL1dWVpaeeuop+f1+NWzYUJMmTVKn\nTp1UWFioadOm6bPPPtPPf/5znXHGGerSpYskqU+fPkpLS5MkHTx4UHfddZd2796tc845Rw899JBa\ntWpVoa4dO3Zo1qxZys/PV1lZmZKSkjR48OBqn8uUKVPUuHFjff7559q3b59at26txx9/XCtWrFBO\nTo7mzJmjsLAwRUVF6c9//rO2bNmisrIytW/fXtOmTVPjxo3Vp08fXXHFFfr88881btw4LVy4UK+9\n9pokqaCgQNHR0Vq7dq22bt2qRYsWye/363//+58GDRqk8ePHV6hn69atmj17tsrKyuTz+XTrrbcq\nJiamFq8C4PRmjNHR34l65MgRffvtt2rWrFmVj9mxY4eSk5O1f/9+nX/++Xr88cd1/vnn65133qmw\nryYkJOiuu+7SlClTJEnJyclavHixWrRoUe/Pq94ZoB5t2bLF9O7d23z77bfGGGOWLVtm2rVrZ/bv\n329eeuklM3PmTFNaWmoKCgrMyJEjzV//+ldjjDEZGRkmMTHR3HLLLSYvL888/vjj5pVXXqlxe507\ndzZffvlllcs3bdpkLr/8crN3715jjDG5ubkmLi7O5OfnG2OM+eKLL0yPHj1MUVGRefjhh83kyZON\nMcbk5eWZqKgok5aWZowxpnfv3iYnJye4vg8//NAYY8yLL75ohg0bZowxZvLkyebZZ581fr/fxMbG\nmu3btxtjjCkoKDDXXnut+eijj46rLy0tzTz00EPBx1933XWmtLTUlJaWmsTERLNixQpjjDGjRo0y\na9asMcYYM3/+fDNnzpzgOubOnWtmzJgRrDM9PT24LDo62uTk5BhjjPn73/9uJk6caIwxJjk52eza\ntcsYY8x///tfc/nll5sDBw6YTZs2mbi4OGOMMTfccINZvXq1McaYTz/91KSmplb/xwBgjDGmbdu2\nJj4+3gwcONBcffXVJjo62sycOdPk5eVVev+0tDTTt29fc+DAAWOMMbfffntwP65qXy3fTvmxzAvo\nQUG96tq1q8aNG6dx48YpLCxMQ4YMUdOmTRUREaFhw4YF79ekSRPdeOONWrZsmZKTk9WvXz/169dP\nkrR792599NFHGj9+vGbNmqVvvvlG3bp10+jRo4/bXlhYWIX/VCrTsmVLtWzZUlKgS/T777/X6NGj\ng48LDw9Xbm6uNm7cqKlTp0qSzj33XPXt27fS9bVt21ZXXHGFJCkxMVEzZsxQYWFhcHlubq52796t\nP/7xj8FtHD58WNu3b9evf/3ramvt2bOnwsMDu+lll11WYfxO+brWr1+vgoKCYPeu3+/XeeedF7xf\n165dg5eHDBmilStXqkOHDlqxYoUmTZokSVq4cKHWr1+vV199NTjGp6ioqEItAwYMUGpqqtatW6er\nrrpK99xzT7W1A/hJ+SmeTz75RLfccos6d+6sc889t8r7X3XVVcEelnbt2gVPJ1e1r5bft6bjn5sQ\n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\n",
"text/plain": "<matplotlib.figure.Figure at 0x12765d898>"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "outpatient_data_labels = (inpatient_pool_race_data[['under_5', 'year']]\n .reset_index(drop=True)\n .replace(label_map)\n .rename(columns={'under_5':'age'}))\noutpatient_data_labels = outpatient_data_labels[outpatient_data_labels.year.isin(['2012/13','2013/14'])]",
"execution_count": 93,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "generate_table(outpatient_full_trace, outpatient_data_labels, varnames=['π'], \n index=['age'], columns=['year'])",
"execution_count": 94,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": "<div>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th>year</th>\n <th>2012/13</th>\n <th>2013/14</th>\n </tr>\n <tr>\n <th>age</th>\n <th></th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>5+</th>\n <td>187.53 (159.72, 219.80)</td>\n <td>163.25 (133.51, 192.79)</td>\n </tr>\n <tr>\n <th>&lt;5</th>\n <td>3563.82 (3196.31, 3912.01)</td>\n <td>1593.31 (1421.97, 1781.77)</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": "year 2012/13 2013/14\nage \n5+ 187.53 (159.72, 219.80) 163.25 (133.51, 192.79)\n<5 3563.82 (3196.31, 3912.01) 1593.31 (1421.97, 1781.77)"
},
"metadata": {},
"execution_count": 94
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "outpatient_full_samples = pd.concat(\n [outpatient_merged[['under_5', 'year']].reset_index(drop=True), \n pd.DataFrame(outpatient_full_trace['π'][-1000:]).T], axis=1)",
"execution_count": 95,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "outpatient_full_samples = (pd.melt(outpatient_full_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\n",
"execution_count": 96,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "sns.set_context(font_scale=1.5)\nsns.boxplot(x=\"year\", y=\"rate\", hue=\"age group\",\n data=outpatient_full_samples.assign(rate=outpatient_full_samples.value*rate_factor),\n palette=\"gray\", linewidth=0.6, fliersize=0)",
"execution_count": 97,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "<matplotlib.axes._subplots.AxesSubplot at 0x12585b390>"
},
"metadata": {},
"execution_count": 97
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n93COCH9YZtWqVTp8+LBKSkq0cuVK2Ww25eXlacmSJWpra1NsbKymTJnSYZ2T/1N55pln1NraqsLC\nQvl8PkVGRur666/X1Vdf3WlbJ683bdo05ebm6pe//KV8Pp+WLl1q3U4CvdS5Hn+nOo62bNly1uPv\n2+0M/fdOvNUPAADDcM8fAADDEP4AABiG8AcAwDCEPwAAhiH8AQAwDOEPAIBhCH8AAAxD+AMAYBjC\nH8B39sgjj+iVV17x/z5z5kxt375ds2fP1q233qoZM2Zo165dkqQ///nPmjlzpjIyMjRx4kStXbtW\n0jcvgPnXf/1X3XjjjSorKwvIfgCmYnpfAN/ZtGnTVFRUpIyMDO3fv19ffPGFli1bpscff1yXXXaZ\nPv74Y91///1666239Morr+i+++7T+PHjtXfvXt18883KzMyUJLW2turNN98M8N4A5mF6XwDfy3XX\nXafVq1fr9ddfl8/n089//nPFxcX553L/8ssv9cYbbygiIkK//e1vtXv3bu3evVubNm3Srl27VFxc\nrJaWFv+rmgH0HK78AXwvt9xyi95880299dZbWrVqlVavXq3y8nL/5wcPHtTAgQPl8Xg0aNAgXXPN\nNbr++uu1adMm/zL9+vULROmA8bjnD+B7SU9P17p16/SDH/xAw4YN0/Dhw7Vx40ZJ0vvvv+8f2t+6\ndaseeOABTZw4Udu2bZMk3vQGBBhX/gC+l6FDh2ro0KG65ZZbJElPP/20CgoK9MILL8hut+vZZ5+V\nJHk8HjmdTkVGRuqSSy5RdHS06uvrA1k6YDzu+QP4Xg4ePKiZM2fqzTffVGhoaKDLAfAdMOwP4Dv7\n7//+b6Wnp+vHP/4xwQ+ch7jyBwDAMFz5AwBgGMIfAADDEP4AABiG8AcAwDCEPwAAhvl/07fA35Va\npuIAAAAASUVORK5CYII=\n",
"text/plain": "<matplotlib.figure.Figure at 0x126e82be0>"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## ED Model"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "ED2 = pd.read_excel('FINAL year 2 for CDC.xlsx', skiprows=3, parse_cols='B:H', index_col=0).fillna(0)\nED3 = pd.read_excel('Final year 3 CDC.xlsx', skiprows=3, parse_cols='B:H', index_col=0).fillna(0)\nED2.columns = ED3.columns",
"execution_count": 98,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "ED2_total = ED2.sum()\nED2_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)']])\nED2_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)']])",
"execution_count": 99,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "ED3_total = ED3.sum()\nED3_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)']])\nED3_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)']])",
"execution_count": 100,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "ED_all = pd.concat([ED2, ED3])\neligible_cols = ED_all.columns[ED_all.columns.str.contains('Eligible')]",
"execution_count": 101,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "ED_counts = ED_all[eligible_cols].sum(1).astype(int)",
"execution_count": 102,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rotavirus_ed = rotavirus_data[rotavirus_data.ED==1]\nsurveillance_counts = rotavirus_data.groupby(['Enrollment Date'])['Record ID'].count()",
"execution_count": 103,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "ED_counts.name = 'count24'\nsurveillance_counts.name = 'count8'",
"execution_count": 104,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "surveillance = pd.concat([ED_counts, surveillance_counts], axis=1).dropna()\n# Drop days where 8-hour count exceeds 24-hour count\nsurveillance = surveillance[surveillance.count8<=surveillance.count24]",
"execution_count": 105,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Here is what it looks like if you resample to weekly"
},
{
"metadata": {
"trusted": true,
"collapsed": false,
"scrolled": true
},
"cell_type": "code",
"source": "weekly_surveillance = surveillance.reindex(pd.to_datetime(surveillance.index)).resample('1W').sum()\n(weekly_surveillance.count8 / weekly_surveillance.count24).hist()",
"execution_count": 106,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "<matplotlib.axes._subplots.AxesSubplot at 0x101bca7f0>"
},
"metadata": {},
"execution_count": 106
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n3B5jQFrPf6gkt4cAgMtk5eph7U3RX5vbGl7DBgDAAIINAIABBBsAAAMINgAABhBsAAAMINgAABhA\nsAEAMIBgAwBgAMEGAMAAgg0AgAEEGwAAAwg2AAAGEGwAAAwg2AAAGECwAQAwIKp/D9txHG3YsEHH\njx9Xenq6Hn/8cU2cODHWswEAgP8T1SPsqqoqdXZ2avfu3frhD3+orVu3xnouAADwKVEF2+/365Zb\nbpEkTZs2TYFAIKZDAQCAi0X1lHhra6s8Hs9/biQ1VT09PUpOHnj/u7u7JUknT54M+7Efn/n/Supu\nj3xQF3Q2fajOrhSdP9fs9ihhtZ89oe7ONhOzSswbb5bmtTSrxLzxZGlWSWo784Gk/zQwElEFOysr\nS21tbb1vh4t1RUWFKisrL3ns3nvvjWaEQe5dtbg9wgB1SmZmlZg33izNa2lWiXnjydKsn5gzZ06f\n95WVlcnn8/V7TlTBnj59un7/+99r7ty5Onz4sPLz80N+vM/n6zPEuXPnNG3aNO3bt08pKSnRjDHo\nFRYWqrq62u0x4ob9bBvK+w3l3ST2s6y7u1tz5szRkSNHNHLkyIjOjSrYRUVFOnjwoL7zne9IUlS/\ndPbJoLm5udGMYEZOTo7bI8QV+9k2lPcbyrtJ7GddpLGWogx2UlKSNm7cGM2pAAAgClw4BQAAAwg2\nAAAGpGzYsGGDmwN8+ctfdvPu4479bGM/u4bybhL7WRfNfkmO4zhxmAUAAMQQT4kDAGAAwQYAwACC\nDQCAAQQbAAADCDYAAAYQbAAADIjq0qSRchxHGzZs0PHjx5Wenq7HH39cEydO7D2+d+9e7dixQ6mp\nqcrPz5fLfzU8YuH2e+ONN/Tcc88pOTlZ8+bN09KlS12cNjLhdvvEunXrlJ2drZUrV7owZfTC7ffi\niy/q17/+tT7zmc9IkjZt2qRJkya5NG3kwu33l7/8RU888YQk6XOf+5yeeuoppaenuzVuxELtd+rU\nKT300ENKSkqS4zh6//339fDDD2vx4sUuTz1w4T5/e/bs0YsvvqiUlBTddddduueee1ycNjLhdnv1\n1Vf1i1/8QqNHj9Ydd9yhhQsXujht9I4cOaKnn35aO3fuvOj9+/fv1/bt25WamqoFCxZo0aJF4W/M\nSYB9+/Y5q1evdhzHcQ4fPux873vf6z127tw5p6ioyPn4448dx3GclStXOvv370/EWDETar/u7m5n\nzpw5Tmtrq9Pd3e1885vfdM6ePevWqBELtdsndu3a5SxevNj50Y9+lOjxLlu4/R5++GHn6NGjbowW\nE+H2mz9/vvPBBx84juM4v/rVr5y6urpEj3hZBvL16TiO88477zj33Xef09PTk8jxLlu4/b72ta85\nzc3NTmdnp1NUVOQ0Nze7MWZUQu125swZ5xvf+IbT3Nzs9PT0OEuXLnVOnDjh1qhRe+6555x58+Y5\nixcvvuj9XV1dTlFRkdPS0uJ0dnY6CxYscE6fPh329hLylLjf79ctt9wiSZo2bZoCgUDvsfT0dO3e\nvbv3T/Xnz5/XiBEjEjFWzITaLzk5Wa+//royMzN19uxZOY6jtLQ0t0aNWKjdJOmdd97Ru+++2/sv\nt1kTbr+jR4/qmWee0ZIlS/Tss8+6MeJlCbVfXV2dsrOz9cILL6ikpERNTU2mnj2Qwn/+PrF582Zt\n3LhRSUlJiRzvsoXb7/rrr1dTU5M+/vhjSTK1X6jdPvzwQ02ePFkej0dJSUm64YYbdPjwYbdGjVpu\nbq62bdvW5/21tbXKzc1VVlaW0tLSVFBQoEOHDoW9vYQEu7W1VR6Pp/ft1NRU9fT0SLrwBfbJ0407\nd+5UR0eHvvrVryZirJgJtZ90Idq/+93vNH/+fN18883KyMhwY8yohNqtsbFRlZWVWrdunRyjF8wL\n97m7/fbbtXHjRu3YsUN+v19/+MMf3BgzaqH2O3v2rA4fPqySkhK98MIL+tOf/qS33nrLrVGjEu7z\nJ1146jE/P9/kP+Ubbr9rr71WCxYs0Le+9S19/etfV1ZWlhtjRiXUbpMmTdLf/vY3nTlzRh0dHaqp\nqVFHR4dbo0atqKhIKSkpfd7/37tnZmaqpaUl7O0lJNhZWVlqa2vrfbunp0fJyf+5a8dx9MQTT6im\npkaVlZWJGCmmwu0nXfjE/fGPf1RnZ6deffXVRI8YtVC7/fa3v9W///1v3X///Xr22We1d+9eU7tJ\n4T939913n7Kzs5Wamqpbb71Vx44dc2PMqIXaLzs7W1dddZWuvvpqpaam6pZbbun3EepgNZDvvT17\n9ujuu+9O9GgxEWq/48eP680339T+/fu1f/9+nT59Wm+88YZbo0Ys1G6jR4/W6tWr5fP59PDDD2vq\n1KkaO3asW6PGXFZWllpbW3vfbmtr0+jRo8Oel5BgT58+vfeRyeHDh5Wfn3/R8UcffVRdXV3avn27\nqV94+USo/VpbW1VSUqLOzk5J0qhRo0w9bRVqt5KSEr3yyivasWOHHnjgAc2bN0933HGHW6NGJdzn\nbt68eero6JDjOPrzn/+sqVOnujVqVELtN3HiRLW3t+vDDz+UdOEpymuuucaVOaMV7meLJAUCAd14\n442JHi0mQu3n8Xg0atQopaen9z5T2dzc7NaoEQu1W3d3t44ePaqXX35ZP/nJT1RXV6fp06e7Nepl\n++9nIPPy8lRfX6/m5mZ1dnbq0KFD+tKXvhT2dhLyW+JFRUU6ePBg7+ucW7du1d69e9XR0aGpU6fq\nN7/5jQoKClRSUqKkpCQtXbpUs2fPTsRoMRFqv0WLFunb3/62iouLlZaWpuuuu07z5893eeKBC7eb\ndeH2W7lypUpKSjRixAh95Stf0axZs1yeODLh9nv88cd7f7P/xhtv1K233urmuBELt9+ZM2cueurR\nmnD73X333VqyZInS09N11VVX6c4773R54oEbyM+WO++8UyNGjNDy5cuVnZ3t5riX5ZMHaZ/eb82a\nNVq+fLkcx9GiRYs0fvz48LfjWH3xEQCAYYQLpwAAYADBBgDAAIINAIABBBsAAAMINgAABhBsAAAM\nINgAABjwv4VaXnJfMqK+AAAAAElFTkSuQmCC\n",
"text/plain": "<matplotlib.figure.Figure at 0x11ff79d68>"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "We will just use the proportion of the pooled suveillance"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "surveillance_total = surveillance.sum()\nsurveillance_total",
"execution_count": 107,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "count24 3486.0\ncount8 1849.0\ndtype: float64"
},
"metadata": {},
"execution_count": 107
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "surveillance_proportion = surveillance_total.count8 / surveillance_total.count24\nsurveillance_proportion",
"execution_count": 108,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "0.53040734366035569"
},
"metadata": {},
"execution_count": 108
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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",
"execution_count": 109,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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())\ned_pool_race_data",
"execution_count": 110,
"outputs": [
{
"output_type": "execute_result",
"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\n0 0 0 219 102191\n1 0 1 203 103789\n2 1 0 497 40548\n3 1 1 533 41013"
},
"metadata": {},
"execution_count": 110
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "ed_model = generate_ed_model(ed_pool_race_data)",
"execution_count": 111,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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)",
"execution_count": 112,
"outputs": [
{
"output_type": "stream",
"text": "Assigned Metropolis to weighted_cases\n [-----------------100%-----------------] 2000 of 2000 complete in 2.2 sec",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "forestplot(ed_trace[1000:], varnames=['λ'])",
"execution_count": 113,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "<matplotlib.gridspec.GridSpec at 0x128896320>"
},
"metadata": {},
"execution_count": 113
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiYAAAGCCAYAAADUqwgjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAH6lJREFUeJzt3XtU1HX+x/HXEKaVpZulnrbNrdzUdFczPWHFoiKaAine\nslKyLGvVtCwvqL9SvCTVmnnBzC5ubnsqS7PC0laT0MS0Tc9Bs4t5KdMubBZeYeTz+2PWSeQi4MC8\nB56Pc+YgzMx33vOdmS9PvvMFPc45JwAAAAPCgj0AAADACYQJAAAwgzABAABmECYAAMAMwgQAAJhB\nmAAAADMIE1SoRYsW6aabblJCQoIeeugh/fLLL/7zIiIilJCQ4D+98847kqRXXnlFsbGx6tevn/bu\n3eu//ODBg/X111+XeHv/+c9/dPfddyshIUHx8fG677779OWXX57x/Zg8ebLmzJkjSbr33nu1Y8cO\nffzxx4qPjy/y8klJSXrxxRfLdBtz5szRlClTTnu5uXPnavXq1WVadnmUdP8AnF7Tpk118803q0eP\nHkpISNBNN92kPn36KCsrq8jLl3YbcKpBgwbpwIEDZzquGeHBHgBVV2Zmpp5//nm99tprql+/vpYt\nW6b/+7//06xZs7Rz507VrVtXS5cuLXS9BQsWaMWKFVq5cqVefvlljR49Wu+9954aN26sK664otjb\n27hxo0aPHq3U1FQ1a9ZMkvT2229rwIABevfdd/W73/0uIPdr/vz5kqTs7OyALK+sMjMz9ac//Sko\ntw2g9DwejxYtWqQ6der4v/bCCy9oypQpeuWVVwJ2O+vWrQvYsiwgTFBhtm3bpnbt2ql+/fqSpM6d\nO2vChAnyer369NNPFRYWpsTERB04cEBdunTRkCFD5PF4VKNGDR09elSHDx/2//vFF1887R6I2bNn\na+jQof4okaT4+HjVqlVL+fn5+vjjjzV16lSdc845Onr0qBYvXqyMjAw988wz8nq9qlWrlkaPHq1W\nrVrp4MGDmjBhgj7//HNdfPHFOuuss3TttddKkjp27KjZs2dLkg4dOqThw4drz549uuCCCzR58mQ1\natSowFw7duzQtGnTdODAAeXn52vAgAHq2bNnifclKSlJ5513nr744gvt379fV1xxhZ566iktWbJE\nWVlZevzxxxUWFqaoqCg9+eST2rhxo/Lz89WsWTNNmDBB5513njp27KiWLVvqiy++0NChQzVv3jy9\n/fbbkqScnBxFR0dr1apV2rRpk+bPny+v16v//ve/6t69u0aMGFFgnk2bNiklJUX5+fnyeDy69957\nFRMTU4pnAVB9Oed08t8wPX78uL777jvVrVu32Ovs2LFDiYmJ+vHHH3XRRRfpqaee0kUXXaQPPvig\nwOu0R48eGj58uJKSkiRJiYmJWrBggRo0aFDh96vCOaCCbNy40XXo0MF99913zjnnFi1a5Jo2bep+\n/PFH99prr7kpU6a4vLw8l5OT4/r16+f+8Y9/OOecW7FihUtISHD33HOPy87Odk899ZRbtmzZaW/v\nmmuucV999VWx52/YsMFdffXVbt++fc4553bt2uXi4uLcgQMHnHPOffnll+6GG25wR44ccVOnTnVj\nx451zjmXnZ3toqKi3OzZs51zznXo0MFlZWX5l7d582bnnHOvvvqq69Onj3POubFjx7oXXnjBeb1e\nFxsb67Zt2+accy4nJ8d169bNbdmypdB8s2fPdpMnT/Zf/9Zbb3V5eXkuLy/PJSQkuCVLljjnnOvf\nv79buXKlc865OXPmuMcff9y/jBkzZrhJkyb550xNTfWfFx0d7bKyspxzzv3rX/9yo0aNcs45l5iY\n6Hbv3u2cc+777793V199tfv555/dhg0bXFxcnHPOuTvuuMOlpaU555zbvn27S05OLvnBAOCaNGni\n4uPj3c033+xuvPFGFx0d7aZMmeKys7OLvPzs2bNdp06d3M8//+ycc27IkCH+13Bxr9MTt3NiO1YV\nsMcEFaZNmzYaOnSohg4dqrCwMPXq1Ut16tRRjRo11KdPH//lateurTvvvFOLFi1SYmKiOnfurM6d\nO0uS9uzZoy1btmjEiBGaNm2a9u7dq7Zt22rgwIGFbi8sLKzATydFadiwoRo2bCjJt/vzp59+0sCB\nA/3XCw8P165du7R+/XqNHz9eknThhReqU6dORS6vSZMmatmypSQpISFBkyZN0sGDB/3n79q1S3v2\n7NG4ceP8t3Hs2DFt27ZNf/nLX0qcNTIyUuHhvpfoVVddVeD4nBPLWrNmjXJycvy7cr1er+rVq+e/\nXJs2bfz/7tWrl5YuXarmzZtryZIlGj16tCRp3rx5WrNmjd566y3/MTxHjhwpMEvXrl2VnJys1atX\n6/rrr9eDDz5Y4uwAfE68lfPZZ5/pnnvu0TXXXKMLL7yw2Mtff/31/j0qTZs29b9lXNzr9MRlT7ft\nCyWECSrMoUOH1LZtW/Xq1UuS75iMp59+WnXq1NGyZcvUtGlTNWnSRJLvRVWjRo1Cy5g+fbrGjBmj\njz76SIcPH9bcuXM1aNAgRUdH6w9/+EOBy7Zq1UqffvqpGjduXODrycnJiomJ0VlnnaVzzz3X//X8\n/Hy1a9dOM2bM8H9t//79ql+/vjweT4EX+olAOFVY2G/Hjzvn/G9FnXD8+HFdcMEFBY6lyc7O1vnn\nn1/8ivufWrVq+f996jwnL3/8+PGKjIyU5NtQHTt2zH/+yfe3Z8+e6tmzp3r37q2cnBy1bdtWR44c\nUUJCgmJiYtSmTRv17t1b//73vwvd1i233KKOHTtq3bp1+vDDDzVnzhy99dZbql279mnvB1CdnXgt\nNWvWTElJSRo/frxatWqlSy65RIMHD9YPP/wgj8ej4cOHS1KB7YfH45Hke1336NFDnTt3LvF1WlXw\nWzmoMD/88IMGDBjg34OQmpqquLg4SdKXX36p2bNnKz8/X0ePHtU///lPdevWrcD1P/jgAzVo0EBN\nmzZVbm5ugTg4evRoodu77777lJqaqm3btvm/tmTJEq1cudIfQCeLiIjQunXr/D99pKenq3v37srN\nzVVkZKRef/11Oef0yy+/aNWqVUXex+3bt2v79u2SpFdffVWtW7dWzZo1/edffvnlqlmzpt566y1J\n0r59+xQXF6etW7eefgUWIzw8XF6vV5Jvr8rLL7+svLw85efna/z48QVC62QNGjTQn//8Zz3yyCP+\nPVa7d+/WoUOH9MADD6h9+/basGGD8vLydPz48QLX7devn7Zt26YePXooOTlZOTk5+vXXX8t9H4Dq\nKDY2Vq1bt9bUqVMlSc8++6zefPNNLV26VB06dCj2ert379bhw4eLfZ2evE2oCgiTADlxMCR+c/nl\nl6tJkybq27evunbtqmPHjvnfPhg2bJjq1Kmj+Ph4de/eXddee6169+7tv25ubq6eeeYZ/1sGN9xw\ng/bu3asePXro0ksvLfK3Utq0aaMpU6ZoypQpSkhIUFxcnN5//3299NJLRe46bdy4sZKTkzVy5Ej1\n6NFDs2bN0rx581SrVi3df//9Cg8PV9euXTVkyJACYXPipxhJuvLKKzV37lx1795da9asUUpKSoHb\nqFGjhlJTU7V48WLdfPPNuvvuu/Xggw9q7dq15V6vHTp0UEpKit58800NHTpUl1xyif/+ejwejRkz\nptCcJ/Tt21efffaZEhISJPneimrfvr1uuukm9ezZU2vWrFHjxo21Z8+eAtcbNWqUnn76afXs2VN3\n3HGHhg0bpksuuaTc96EovIaKxnopOyvrrKjX4IQJE5SRkVHib9KcOn/Tpk0VFRVV7Ou0U6dOuu22\n2/TVV18F9g6U05muf4+rqvuCKlmTJk30+eefB3sMc1gvRWO9FMY6KRrrpexCfZ1V9/nZYwIAAMwg\nTAAAgBmECQAAMMPsrwt7vV7t378/2GOUybfffhvsEUxivRSN9VIY66RoFbVeGjZsWOyvwltUlu8L\nof5cqg7zF/f8M3vw67fffqvo6OhgjwEAVdaqVat06aWXBnuMUuP7QtVS3PPPbJiE4h4TAAglVXmP\nCewLuT0mAACg+uHgVwAAYAZhAgAAzCBMAACAGYQJAAAwgzABAABmECYAAMAMwgQAAJhBmAAAADMI\nEwAAYAZhAgAAzCBMAACAGYQJAAAwgzABAABmECYAAMAMwgQAAJhBmAAAADMIEwAAYAZhAgAAzCBM\nAACAGYQJAAAwgzABAABmECYAAMAMwgQAAJhBmAAAADMIEwAAYAZhAgAAzCBMAACAGYQJAAAwgzAB\nAABmECYAAMAMwgQAAJhBmAAAADMIEwAAYEa1D5PMTCklxfcRAAAEV3iwBwiW2Fhp+fLCX+/WTUpL\nq/x5AABAKfaYPP7441q8eHGR5yUlJal79+7asGGDJOn48eMaPny41q5dK0maOXOmbrzxRv/nwdai\nheTx+E5FRYnk+/qJy3g8vusAAIDKcdow6dWrl5YsWVLs+aNGjdJ1112nb775Rv3791dWVpb/vAce\neECRkZGBmTQAsrIk5347rV8vhf9vn1F4uO/zk893zncdAABQOU4bJmeffbY2b96snTt3lni5w4cP\na+rUqbruuusCNlxFi4iQMjKkIUOkwYODPQ0A4Exx3GDoO+0xJq+//roaN26sJUuW6KGHHir2ck2a\nNAnoYBWtqGNMUlOl66+X1q0LzkwAgPLLzJQiIyWv17cXPCPD9wMoQkuJe0zy8/P13nvvae7cuVq+\nfLmcc5U1V4UozTEmH31U8BgTjjMBgNCQnu6LEsn3MT09uPOgfEoMkw8//FAtW7bUZZddptatW2vN\nmjWVNFbFOPUYE44zAYCqIyqq4PY8Kiq486B8SgyTJUuWqG/fvpKkvn37lngQbKg6cZzJ9Ons9gOA\nUMb2vGoo8RiTWbNm+f/dtm1btW3bttBlTn1757HHHgvQaJUnIoInMABUBWzPQ98Z/+XXJ5980v93\nTE41c+ZMZWRknOlNAACAasLjQv2IVgAAUGVU+/8rBwAA2EGYAAAAMwgTAABgBmECAADMIEwAAIAZ\nhAkAADCDMAEAAGYQJgAAwAzCBAAAmEGYAAAAMwgTAABgBmECAADMIEwAAIAZhAkAADCDMAEAAGYQ\nJgAAwAzCBAAAmEGYAAAAMwgTAABgBmECAADMIEwAAIAZhAkAADCDMAEAAGYQJgAAwAzCBAAAmEGY\nAAAAMwgTAABgBmECAADMIEwAAIAZhAkAADCDMAEAAGYQJgAAwAzCBAAAmEGYAAAAMwgTAABgBmEC\nAADMIEwAAIAZhAkAADCDMAEAAGYQJgAAwAzCBAAAmEGYAAAAMwgTAABgBmECAADMIEwAAIAZhAkA\nADCDMAEAAGYQJgAAwAzCBAAAmEGYAAAAMwgTAABgBmECAADMIEwAAIAZhAkAADCDMAEAAGYQJgAA\nwAzCBAAAmEGYAAAAMwgTAABgBmECAADMIEwAAIAZhAkAADCDMAEAAGYQJgAAwAzCBAAAmEGYAAAA\nMwgTAABgBmECAADMIEwAAIAZhAkAADCDMAEAAGYQJgAAwIxqFyaZmVJKiu8jAACwJTzYA1SW2Fhp\n+fLCX+/WTUpLq/x5AABAYR7nnDuTBSxdulSzZs1S7969tWnTJnm9XklScnKyvvjiC82cOVMxMTEa\nOXJkQAYuixYtpK1by3695s2lrKzAzwMAAEoWkD0m8fHx+vbbb9W/f39FR0dr7dq1mjFjhmbPnq3D\nhw9r586dgbiZMjs1LjIzpchIyeuVwsOljAwpIiIoowEAgCIE7K2cMWPG6Pzzz5ckeb1e1axZM1CL\nDpiICGnePOmNN6RevYgSAKiKMjOl9HQpKortfCgKWJjUrVtXkvT111/riSeeUGpqaqAWfcaKOr7k\nvfekF1+U1q0LzkwAgMBjz3joC+hv5WRmZur+++/XE088oUaNGgVy0eXSooXk8RR90KskffSR7/wT\npxYtKnc+AEBgpaf7okTyfUxPD+48KLuAhcmGDRs0bdo0Pffcc7r66qsDtdgzkpUlOffbaf16X0FL\nvo/r1xc8nwNeASC0RUUV3M5HRQV3HpRdQN7Kcc7psccek9fr1ZgxY+Sc0xVXXKFJkyYFYvEBExHh\n263He48AUDWxnQ99ATvG5M033wzUoipURARPVACoytjOh7aAvJWTlpamhQsXFvr6ihUrtGDBgkDc\nBAAAqAbO+A+sAQAABEq1+79yAACAXYQJAAAwgzABAABmECYAAMAMwgQAAJhBmAAAADMIEwAAYAZh\nAgAAzCBMAACAGYQJAAAwgzABAABmECYAAMAMwgQAAJhBmAAAADMIEwAAYAZhAgAAzCBMAACAGYQJ\nAAAwgzABAABmECYAAMAMwgQAAJhBmAAAADMIEwAAYAZhAgAAzCBMAACAGYQJAAAwgzABAABmECYA\nAMAMwgQAAJhBmAAAADMIEwAAYAZhAgAAzCBMAACAGYQJAAAwgzABAABmECYAAMAMwgQAAJhBmAAA\nADMIEwAAYAZhAgAAzCBMAACAGYQJAAAwgzABAABmECYAAMAMwgQAAJhBmAAAADMIEwAAYAZhAgAA\nzCBMAACAGYQJAAAwgzABAABmECYAAMAMwgQAAJhBmAAAADMIEwAAYAZhAgAAzCBMAACAGYQJAAAw\ngzABAABmECYAAMAMwgQAAJhBmAAAADMIEwAAYAZhAgAAzCBMAACAGYQJAAAwgzABAABmECYAAMAM\nwgQAAJhBmAAAADMIEwAAYAZhAgAAzCBMAFQ5mZlSSorvI4DQEh7sAQCgLGJjpeXLA7Osbt2ktLTA\nLAtAYHicc+5MFrB06VLNmjVLt9xyizIzM5WXl6e6devqiSeeUEZGhmbOnKmYmBiNHDkyUDMDqAJa\ntJC2bg32FGeueXMpKyvYUwBVR0DeyomPj9fPP/+shIQEvfzyy2rWrJkWL16sLl26aPDgwYG4CQBV\nTFaW5FzgT+vXS+H/2xccHu77vCJu58SJKAECK2Bv5SQlJUmS8vPztW/fPv3+978P1KIBoNQiIqSM\nDCk9XYqK8n0OIHQE9BgTr9er7t27Kzc3V8OGDQvkogGg1CIiCgdJZiaxUp3weIeugIZJeHi40tLS\ntH79eo0ePVqLFi0K5OIBoJBAHgx7AgfFhrbMTCkyUvJ6fW/nZWQQJ6EkIMeYOOeUnJysDRs2SJLO\nPfdchYXxm8gASqdFC8njKd8p0FEi+ZZZ3nlOPrVoEfjZcHrp6b4okXwf09ODOw/KJiB7TDwejwYM\nGKBHHnlEqampCgsL06OPPhqIRQOoBir6AFJ+gq5eoqJ8j/OJxzsqKtgToSwCEibOOV1++eW8dQPA\nJA6IrV54vENbQMIkLS1N9erV08CBAwt8fcWKFVqwYIE6deoUiJsBgHIr6oBYVF083qHrjP/AGgAA\nQKBwhCoAADCDMAEAAGYQJgAAwAzCBAAAmEGYAAAAMwgTAABgBmECAADMIEwAAIAZhAkAADCDMAEA\nAGYQJgAAwAzCBAAAmEGYAAAAMwgTAABgBmECAADMIEwAAIAZhAkAADCDMAEAAGYQJgAAwAzCBAAA\nmEGYAAAAMwgTAABgBmECAADMIEwAAIAZhAkAADCDMAEAAGYQJgAAwAzCBAAAmEGYAAAAMwgTAABg\nBmECAADMIEwAAIAZhAkAADCDMAEAAGYQJgAAwAzCBAAAmEGYAAAAMwgTAABgBmECAADMIEwAAIAZ\nhAkAADCDMAEAAGYQJgAAwAzCBAAAmEGYAAAAMwgTAABgBmECAADMIEwAAIAZhAkAADCDMAEAAGYQ\nJgAAwAzCBAAAmEGYAAAAMwgTAABgBmECAADMIEwAAIAZhAkAADCDMAEAAGYQJgAAwAzCBAAAmEGY\nAAAAMwgTAABgBmECAADMIEwAAIAZhAkAADCDMAEAAGYQJgAAwAzCBAAAmEGYAAAAMwgTAABgBmEC\nAADMIEwAAIAZhAkAADCDMAGAAMjMlFJSfB8BlN8Zh8nSpUvVoUMHLVy4UJL08ccfq3379pKkFStW\nqGvXrpoxY8aZ3gwAVKrYWMnjKf2pXTtp7Fjfx9NdNjY22PcOsCs8EAuJj4/XwIEDtX//fi1cuFBe\nr1eS1KVLFx0+fFg7d+4MxM0AQIlatJC2bg32FKe3fLkvUM5E8+ZSVlZg5gEsCdhbObm5uZo4caIm\nTpwYqEUCQJlkZUnOVf5p/Xop/H8/5oWH+z6v6NskSlBVBWSPiXNOycnJuuuuu1S/fv1ALBIAzMvM\nlNLTpagoKSPjt39HRAR7surt5MeFxyL0BCRMfvnlF33yySfas2ePnHM6cOCAHnroIf39738PxOIB\noNLFxvrecgmEbt2ktLTALAsly8yUIiMlr9e39yojgzgJNQEJk7p16+rdd9/1f37jjTcSJQDMCPax\nJ2d6TAnHk5ReerovSiTfx/R0wiTU8OvCAKq8ijj2pDKPKyFKSi8qquDjEhUV3HlQdgE7xuRka9eu\nDcRiAcCsiAiOK7GIxyX0BSRM0tLSVK9ePQ0cOLDA11esWKEFCxaoU6dOgbgZADAlIoJvfBbxuIQ2\njzt1dwcAAECQcIwJAAAwgzABAABmECYAAMAMwgQAAJhBmAAAADMIEwAAYAZhAgAAzCBMAACAGYQJ\nAAAwgzABAABmECYAAMAMwgQAAJhBmAAAADMIEwAAYAZhAgAAzCBMAACAGYQJAAAwgzABAABmECYA\nAMAMwgQAAJhBmAAAADMIEwAAYAZhAgAAzCBMAACAGYQJAAAwgzABAABmECYAAMAMwgQAAJhBmAAA\nADMIEwAAYAZhAgAAzCBMAACAGYQJAAAwgzABAABmECYAAMAMwgQAAJgRHuwBiuP1erV///5gjwEA\nVVbDhg0VHm7220AhfF+oWop7/pl9Ru7fv1/R0dHBHgMAqqxVq1bp0ksvDfYYpcb3haqluOefxznn\ngjDPaYVaGUdHR2vVqlXBHsMc1kvRWC+FsU6KVpHrparuMQn151J1mT/k9piEh4eHVMlLCrl5Kwvr\npWisl8JYJ0VjvfiU5ftCqK+z6jw/B78CAAAzCBMAAGAGYQIAAMw4a+LEiRODPURVcd111wV7BJNY\nL0VjvRTGOika66XsQn2dVef5zf5WDgAAqH54KwcAAJhBmAAAADMIEwAAYAZhAgAAzCBMAACAGYRJ\nKTjn9Oijj6pfv35KTEzUN998U+D81atXq3fv3urXr58WL15c4LwtW7ZowIABlTlupSnPevF6vRo9\nerRuv/129e3bV6tXrw7G6BWmPOskPz9f48aN06233qrbb79dX331VTBGr1Bn8hrKzs5W+/bttXPn\nzsocuVKUd7307NlTiYmJSkxM1Lhx4yp7bNNCbZtb3LwLFy5UXFyc/3HetWtX5Q93GhW2PXc4rZUr\nV7qxY8c655zbvHmz+9vf/uY/Ly8vz8XExLicnByXm5vrevXq5bKzs51zzi1YsMDFxcW5W265JShz\nV7TyrJc33njDTZs2zTnn3IEDB1z79u2DMntFKc86ef/99924ceOcc85t2LChwHWqivK+hvLy8tzQ\noUNdly5d3Ndffx2U2StSedbLsWPHXEJCQrBGNi3Utrklzfvwww+7rVu3BmGq0quo7Tl7TErhk08+\nUWRkpCSpZcuWysrK8p+3Y8cONWrUSLVr11aNGjV07bXXauPGjZKkRo0aae7cuUGZuTKUZ7107dpV\nI0aMkOTbUxBK/7NpaZRnnXTq1EmTJ0+WJO3du1d16tQJyuwVqbyvoZSUFN16662qX79+UOauaOVZ\nL9u3b9fhw4c1aNAgDRw4UFu2bAnW+OaE2ja3pHm3bt2q+fPn67bbbtOzzz5byZOVTknb844dOyo3\nN7dcyyVMSuHgwYM6//zz/Z+Hh4crPz+/yPPOO+885eTkSJJiYmJ01llnVe6wlag86+Wcc87Rueee\nq4MHD2rEiBF68MEHK33uilTe50pYWJjGjh2rqVOnKj4+vnKHrgTlWS9Lly5VvXr1dMMNN8hV0b8D\nWd7X0KBBg/T8889r4sSJevjhh/3Xqe5CbZtb0ryxsbGaNGmSXnrpJX3yySdKT0+v5OlO79Tt+QMP\nPKCkpCQNGDBA2dnZGjRokO68884yL7dq/bhaQWrXrq1Dhw75P8/Pz1dYWJj/vIMHD/rPO3TokC64\n4IJKnzEYyrte9u3bp2HDhql///7q1q1b5Q5dwc7kuTJ9+nRlZ2erT58+Wr58uWrVqlV5g1ew8qyX\nRYsWSZLWrVun7du3a8yYMZo3b57q1atXucNXoPKsl0aNGumyyy6TJP3xj39U3bp19eOPP6pBgwaV\nOzwq1B133KHatWtLkqKiorRt2zZFRUUFearCTt6ex8bGKjY2VpJvj8kLL7ygGjVqlHmZ7DEphdat\nW/trdfPmzbrqqqv851155ZXavXu3fv31V+Xm5mrjxo1q1apVgetX1Z/2yrNefvrpJw0aNEijRo1S\nQkJCsEavMGVZJ5s2bVKrVq20bNky/67amjVrKiwszP/Nqaooz3Nl0aJF/lPTpk2VkpJSpaJEKt/z\n5Y033tD06dMlSd9//70OHTqkiy++OCjzWxVq29xT5z148KDi4uJ05MgROeeUmZmp5s2bB2m64pW0\nPfd4POV+HNhjUgoxMTFat26d+vXrJ0l67LHH9M477+jIkSPq06ePkpKSdNddd8k5pz59+hR6P9zj\n8QRj7ApXnvUydepU/frrr0pNTdXcuXPl8Xj03HPP6eyzzw7yvQmMsqyT3r17q379+urcubOSkpLU\nv39/eb1ejR8/vsqsjxN4DRWtPM+X3r17KykpSbfddpvCwsI0bdq0KheyZyrUni8n5j35sR85cqQG\nDBigmjVrql27dvrrX/8a5CkLmz9/frHb81WrVpV7ufwnfgAAwAwyGwAAmEGYAAAAMwgTAABgBmEC\nAADMIEwAAIAZhAkAADCDMAEAAGYQJgAAwIz/Bw+p648fX45xAAAAAElFTkSuQmCC\n",
"text/plain": "<matplotlib.figure.Figure at 0x128896710>"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"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'}))",
"execution_count": 114,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "generate_table(ed_trace, ed_data_labels, index=['year'], columns=['age'])",
"execution_count": 115,
"outputs": [
{
"output_type": "execute_result",
"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.48 (66.17, 86.08)</td>\n <td>432.16 (393.73, 468.47)</td>\n </tr>\n <tr>\n <th>2013/14</th>\n <td>69.52 (60.21, 78.79)</td>\n <td>467.24 (428.29, 506.03)</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": "age 5+ <5\nyear \n2012/13 75.48 (66.17, 86.08) 432.16 (393.73, 468.47)\n2013/14 69.52 (60.21, 78.79) 467.24 (428.29, 506.03)"
},
"metadata": {},
"execution_count": 115
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Create data frame of MCMC samples for plotting"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "ed_rate_samples = pd.concat([ed_pool_race_data[['under_5', 'year']], \n pd.DataFrame(ed_trace['λ'][-1000:]).T], axis=1)",
"execution_count": 116,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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",
"execution_count": 117,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "sns.set_context(font_scale=1.5)\nsns.boxplot(x=\"year\", y=\"rate\", hue=\"age group\",\n data=ed_rate_samples.assign(rate=ed_rate_samples.value*rate_factor),\n palette=\"gray\", linewidth=0.6, fliersize=0)",
"execution_count": 118,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "<matplotlib.axes._subplots.AxesSubplot at 0x1272e4278>"
},
"metadata": {},
"execution_count": 118
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAfkAAAFqCAYAAAAZRCMJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3W9UlHX+//HXDH9UHBD1mJrshrJombaeFYrWE4cgk7K2\nSOkoippsHS1mLWxTg6RSxP7aLtgeXTddB1M0w1zruIW2Ubq72p7KdUlq1UoULQ0VJgWE+d3w52x+\nMcGcYeAzz8ctvYbrmvfV6fLJXNfMXBaXy+USAAAwjtXXAwAAAO8g8gAAGIrIAwBgKCIPAIChiDza\nlYKCAl+PAPgljj0zWXh3PdqTQYMGqaKiwtdjAH6HY89Mgd5+gqVLl2rr1q1qaGhQWlqaYmNjNXv2\nbFmtVkVHRys3N1eStHbtWhUXFysoKEjTpk1TQkKCt0cDAMBoXj1dv2PHDn300Udas2aNHA6Hqqqq\nlJ+fr6ysLBUVFampqUmlpaU6evSoHA6HiouLtWzZMr3wwgtqaGjw5mgAABjPq5H/4IMPNHDgQD34\n4IOaPn26EhISVF5erpiYGElSfHy8tm/frl27dmn48OEKDAyUzWZTZGQkp40AALhMXj1dX11drUOH\nDmnJkiU6cOCApk+frqamJvfjXbt2VW1trZxOp0JDQ93LQ0JCVFNTc8nPd/r0ae3evVu9evVSQECA\nR/YBba+ystLXIwB+iWOv42lsbNQ333yjIUOGqHPnzs0e92rkw8PDFRUVpcDAQPXv31+dOnXSkSNH\n3I87nU6FhYXJZrOptra22fKLKSgoUGFhoddmh+8kJSX5egTAL3HsmSUzM9O7kR8+fLgcDoemTJmi\nI0eO6NSpU4qLi9OOHTt0/fXXq6ysTHFxcRo6dKgWLVqk+vp61dXVad++fYqOjr7otu12u+x2+3nL\nvvzyS916661atWqV+vTp481dAwDA5w4fPqwJEybo7bff1lVXXdXsca9GPiEhQR9++KHGjh0rl8ul\nJ598Uv369VNOTo4aGhoUFRWl5ORkWSwWpaenKy0tTS6XS1lZWQoODr7k5zt3ir5Pnz6KiIjw9O4A\nANAu/dAlaq9/hO7RRx9ttszhcDRblpqaqtTUVG+PAwCA3+Ab7wAAMBSRBwDAUEQeAABDEXkAAAxF\n5AEAMBSRBwDAUEQeAABDEXkAAAzl9S/DaY9Onjyp7Oxsfffdd6qurta8efM0ePBgzZ49WwcOHNCA\nAQN08OBBLV++XBs2bNCaNWskSWlpafrVr37l3o7L5TpvnUOHDumVV17RyJEj1a9fP40cOVJdunTR\n6tWrFRAQoFGjRum+++7TnDlzNH78eF133XUqLCzUgAEDVFdXp3feeUc1NTU6ffq0nnnmGQ0YMMBX\n/4kAAAbwy8h/+eWXSktL04033qi33npLb775pg4dOiSbzaZXX31VO3bsUGFhoaqrq1VUVKTi4mJJ\n0oQJE3TzzTe775hXWlrabB1JOnr0qN588005nU5lZGRo3bp1slgsmjJliuLj439wruDgYDkcDn34\n4Yd66aWX9Pvf/977/zEAAMbyy8j37NlTDodDGzduVE1Njfr166cvvvhCQ4cOlSQNGzZMknTgwAEd\nPnxY9913n1wul5xOpw4ePKirr75akrR///5m60hS7969FRwcrD179mjQoEHu7xS+7rrrtH///vNm\ncblc7j/Hxsa6f+6rr77y0t4DAPyFX16TX7FihUaOHKn8/HwNHjxYLpdLUVFR+ve//y1J+uSTTyRJ\nERERGjBggFauXCmHw6E777zzvBvfREVFaffu3eetI0kWi8W9fkVFhRobG9XY2KiPP/5YP/3pTxUc\nHOy+5e6nn37qXq+8vNy9LU7VAwAul1++kk9ISNC8efO0YsUKXXHFFZKkxMREvfPOO0pPT1fv3r0V\nGBioHj166M4771RaWppOnz6tm266STabzb2dxMRElZaWnreO9L/I9+jRQ2lpaRo/fryampo0cuRI\nDRw4UGPGjFF2drbWrFmj8PBw9/b27dunyZMnq6mpSfn5+W34XwQAYCKL6/vnizu4yspKJSUlacuW\nLZd8q9m9e/fqq6++0s0336wPP/xQ69evbzG0P2adH1JSUqKjR4/q/vvv/1HrAwD8T0vd88tX8hfS\np08fLViwQEuXLlVgYKCefvppr6wDAEBbIfL/X9euXfWnP/3J6+v8kJSUFI9sBwCAc/zyjXcAAPgD\nIg8AgKH88nR9Y2OjKisrPbrNiIgI9+fhAQBoD/wy8pWVlXrooYfcH3m7XGfOnNHixYt11VVXeWR7\nAAB4gl9GXpICAwMVHBzc5s97zz33uD9rHxERoQULFrT5DAAA/+C3kfeF+vp6SdLKlSt9PAkAwB/w\nxrs2tGfPHn333XfKyMjQlClTzvsq3MTERPcvAQAAeAKv5NtQ586dlZGRodTUVH3xxRe6//77FRsb\n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\n10s6e6vhadOmKT09XePGjdPHH3/s/tm8vDxVVlZecL1Tp07pwQcf1MSJEzV16lR9/fXXbbTHQPtw\nucfexY6hix175+zdu1cxMTHNlqN9IPLwiI0bN6p79+5atWqVli1bpnnz5ik/P19ZWVkqKipSU1OT\nSktLJUkffPCBMjIydOzYMff6y5cv1y9/+Us5HA7l5+fr6aefdj9WWVmpiIiIC663du1aDRkyREVF\nRbrzzjv1xz/+se12GmgHLvfYu9gxdLFjTzr7y/mzzz6rTp06tc3O4pIReXjEbbfdphkzZkg6e+vD\ngIAAlZeXKyYmRpIUHx+vv//975KkgIAArVixQt26dXOvf99992ncuHGSzr4yOfePxt69exUVFfWD\n602ePFnTp0+XJB06dOi8xwB/cLnH3g8dQy0de5I0d+5cZWVlXfAWp2gfiDw8okuXLgoJCVFtba1m\nzJihRx55RN//MsWuXbuqpqZGknTjjTeqW7du5z1us9kUHBysb775Ro899phmzpwpSXr33XeVkJDw\ng+tJZ+9gOHnyZK1atUq33HKLl/cUaF8u99iTLnwMtXTsFRYWKiEhQYMGDWq2PbQfRB4eU1VVpcmT\nJyslJUWjR4+W1fq//72cTqfCwsLO+3mLxXLe3ysqKjR16lTNnDnT/Srko48+0vDhwy+6niT9+c9/\nVlFRkex2u6d2B+gwLvfYk5ofQy0dexs3btRrr72m9PR0HT16VBkZGZ7cJXhIu7mfPDq2cwf53Llz\nFRcXJ0m65pprtHPnTsXGxqqsrMy9/Jzv//b/3//+Vw8//LBeeuklDRo0SJJ08uRJhYaGNvsH6fvr\nLV26VL1799Zdd92lkJAQBQQEeGsXgXbpco+9Cx1DrTn23n77bfefExMT9corr3hj93CZiDw8YsmS\nJTp58qRefvllLV68WBaLRdnZ2Zo/f74aGhoUFRWl5OTk89b5/j8gL774ourr65WXlyeXy6WwsDDd\nfvvtuummm5o91/fXGzNmjGbNmqXXXntNLpdL+fn53ttJoB263GPvQsdQWVlZi8fe/13OKfv2ibvQ\nAQBgKK7JAwBgKCIPAIChiDwAAIYi8gAAGIrIAwBgKCIPAIChiDwAAIYi8gAAGIrIA7ioxx57TOvW\nrXP/fdKkSdq1a5emTp2qe+65RxMmTNCnn34qSfr88881adIkpaamKjExUUVFRZLO3szk17/+te64\n4w6tXr3aJ/sB+CO+1hbARY0ZM0YFBQVKTU3VoUOH9O2332rhwoWaO3eurr76au3du1cPPfSQNm/e\nrHXr1uk1HlQlAAABeElEQVTBBx9UXFycDhw4oLvuuksTJ06UJNXX12vTpk0+3hvAv/C1tgBaNGrU\nKC1fvlwbNmyQy+XSH/7wB0VHR7u/r/z48eN64403FBoaqvfff18VFRWqqKjQW2+9pU8//VSFhYWq\nq6tz30IYQNvglTyAFt19993atGmTNm/erCVLlmj58uUqKSlxP37kyBF169ZNdrtd4eHhuvnmm3X7\n7bfrrbfecv9Mp06dfDE64Ne4Jg+gRSkpKVqzZo2uvPJK9e3bV1dddZU2btwoSdq2bZv7lPz27dv1\nm9/8RomJidqxY4ckcXcywId4JQ+gRX369FGfPn109913S5Kee+455ebmatmyZQoODtZLL70kSbLb\n7Ro/frzCwsLUv39/RUREqLKy0pejA36Na/IAWnTkyBFNmjRJmzZtUlBQkK/HAdBKnK4HcFF//etf\nlZKSokcffZTAAx0Mr+QBADAUr+QBADAUkQcAwFBEHgAAQxF5AAAMReQBADDU/wMf1X5h4xt9jgAA\nAABJRU5ErkJggg==\n",
"text/plain": "<matplotlib.figure.Figure at 0x128198e48>"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Virus rates"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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\ncensus_data_virus['YEAR'] = census_data_virus.YEAR - 2011",
"execution_count": 119,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "census_virus_clean = census_data_virus.rename(columns={'YEAR':'year', 'TOT_POP':'n'})\ncensus_virus_clean.head()",
"execution_count": 120,
"outputs": [
{
"output_type": "execute_result",
"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 </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>False</td>\n <td>0</td>\n <td>111216</td>\n </tr>\n <tr>\n <th>1</th>\n <td>False</td>\n <td>1</td>\n <td>113190</td>\n </tr>\n <tr>\n <th>2</th>\n <td>False</td>\n <td>2</td>\n <td>114362</td>\n </tr>\n <tr>\n <th>3</th>\n <td>True</td>\n <td>0</td>\n <td>45013</td>\n </tr>\n <tr>\n <th>4</th>\n <td>True</td>\n <td>1</td>\n <td>45582</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " under_5 year n\n0 False 0 111216\n1 False 1 113190\n2 False 2 114362\n3 True 0 45013\n4 True 1 45582"
},
"metadata": {},
"execution_count": 120
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rotavirus_data[['rotavirus','norovirus']].sum(1).value_counts()",
"execution_count": 166,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "0 2598\n1 806\n2 48\ndtype: int64"
},
"metadata": {},
"execution_count": 166
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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\nvirus_summary.head()",
"execution_count": 121,
"outputs": [
{
"output_type": "execute_result",
"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>rotavirus</th>\n <th>sapovirus</th>\n <th>astrovirus</th>\n <th>norovirus</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>0</td>\n <td>0</td>\n <td>158</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>0</td>\n <td>0</td>\n <td>1</td>\n <td>10</td>\n </tr>\n <tr>\n <th>2</th>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n <td>0</td>\n <td>2</td>\n </tr>\n <tr>\n <th>3</th>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n <td>0</td>\n <td>0</td>\n <td>12</td>\n </tr>\n <tr>\n <th>4</th>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n <td>1</td>\n <td>0</td>\n <td>3</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " under_5 year setting rotavirus sapovirus astrovirus norovirus cases\n0 0 0 0 0 0 0 0 158\n1 0 0 0 0 0 0 1 10\n2 0 0 0 0 0 1 0 2\n3 0 0 0 0 1 0 0 12\n4 0 0 0 0 1 1 0 3"
},
"metadata": {},
"execution_count": 121
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "merged_virus_data = virus_summary.merge(census_virus_clean, on=['under_5', 'year'], how='left')\nmerged_virus_data.head(10)",
"execution_count": 122,
"outputs": [
{
"output_type": "execute_result",
"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>rotavirus</th>\n <th>sapovirus</th>\n <th>astrovirus</th>\n <th>norovirus</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>0</td>\n <td>0</td>\n <td>158</td>\n <td>111216</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>0</td>\n <td>0</td>\n <td>1</td>\n <td>10</td>\n <td>111216</td>\n </tr>\n <tr>\n <th>2</th>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n <td>0</td>\n <td>2</td>\n <td>111216</td>\n </tr>\n <tr>\n <th>3</th>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n <td>0</td>\n <td>0</td>\n <td>12</td>\n <td>111216</td>\n </tr>\n <tr>\n <th>4</th>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n <td>1</td>\n <td>0</td>\n <td>3</td>\n <td>111216</td>\n </tr>\n <tr>\n <th>5</th>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>30</td>\n <td>111216</td>\n </tr>\n <tr>\n <th>6</th>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n <td>3</td>\n <td>111216</td>\n </tr>\n <tr>\n <th>7</th>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n <td>1</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n <td>111216</td>\n </tr>\n <tr>\n <th>8</th>\n <td>0</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>8</td>\n <td>111216</td>\n </tr>\n <tr>\n <th>9</th>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n <td>1</td>\n <td>111216</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " under_5 year setting rotavirus sapovirus astrovirus norovirus cases \\\n0 0 0 0 0 0 0 0 158 \n1 0 0 0 0 0 0 1 10 \n2 0 0 0 0 0 1 0 2 \n3 0 0 0 0 1 0 0 12 \n4 0 0 0 0 1 1 0 3 \n5 0 0 0 1 0 0 0 30 \n6 0 0 0 1 0 0 1 3 \n7 0 0 0 1 1 0 0 1 \n8 0 0 1 0 0 0 0 8 \n9 0 0 1 0 0 0 1 1 \n\n n \n0 111216 \n1 111216 \n2 111216 \n3 111216 \n4 111216 \n5 111216 \n6 111216 \n7 111216 \n8 111216 \n9 111216 "
},
"metadata": {},
"execution_count": 122
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "rota_data = (merged_virus_data[merged_virus_data.rotavirus==1]\n .groupby(['under_5', 'year', 'setting'])\n .agg({'cases':sum, 'n':max}))\n\nsapo_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\nastro_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\nnoro_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'))",
"execution_count": 123,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"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')])\nvirus_totals['cases'] = virus_totals.cases.astype(int)\nvirus_totals['n'] = virus_totals.n.astype(int)\nvirus_totals.head(10)",
"execution_count": 124,
"outputs": [
{
"output_type": "execute_result",
"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>cases</th>\n <th>n</th>\n <th>virus</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>5</td>\n <td>111216</td>\n <td>astrovirus</td>\n </tr>\n <tr>\n <th>1</th>\n <td>0</td>\n <td>0</td>\n <td>1</td>\n <td>0</td>\n <td>111216</td>\n <td>astrovirus</td>\n </tr>\n <tr>\n <th>2</th>\n <td>0</td>\n <td>0</td>\n <td>2</td>\n <td>6</td>\n <td>111216</td>\n <td>astrovirus</td>\n </tr>\n <tr>\n <th>3</th>\n <td>0</td>\n <td>1</td>\n <td>0</td>\n <td>4</td>\n <td>113190</td>\n <td>astrovirus</td>\n </tr>\n <tr>\n <th>4</th>\n <td>0</td>\n <td>1</td>\n <td>1</td>\n <td>0</td>\n <td>113190</td>\n <td>astrovirus</td>\n </tr>\n <tr>\n <th>5</th>\n <td>0</td>\n <td>1</td>\n <td>2</td>\n <td>2</td>\n <td>113190</td>\n <td>astrovirus</td>\n </tr>\n <tr>\n <th>6</th>\n <td>0</td>\n <td>2</td>\n <td>0</td>\n <td>3</td>\n <td>114362</td>\n <td>astrovirus</td>\n </tr>\n <tr>\n <th>7</th>\n <td>0</td>\n <td>2</td>\n <td>1</td>\n <td>0</td>\n <td>114362</td>\n <td>astrovirus</td>\n </tr>\n <tr>\n <th>8</th>\n <td>0</td>\n <td>2</td>\n <td>2</td>\n <td>1</td>\n <td>114362</td>\n <td>astrovirus</td>\n </tr>\n <tr>\n <th>9</th>\n <td>1</td>\n <td>0</td>\n <td>0</td>\n <td>13</td>\n <td>45013</td>\n <td>astrovirus</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " under_5 year setting cases n virus\n0 0 0 0 5 111216 astrovirus\n1 0 0 1 0 111216 astrovirus\n2 0 0 2 6 111216 astrovirus\n3 0 1 0 4 113190 astrovirus\n4 0 1 1 0 113190 astrovirus\n5 0 1 2 2 113190 astrovirus\n6 0 2 0 3 114362 astrovirus\n7 0 2 1 0 114362 astrovirus\n8 0 2 2 1 114362 astrovirus\n9 1 0 0 13 45013 astrovirus"
},
"metadata": {},
"execution_count": 124
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "n_lookup = virus_totals.groupby(['under_5', 'year', 'virus']).agg({'n':max})\nn_lookup",
"execution_count": 125,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": "<div>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th></th>\n <th></th>\n <th>n</th>\n </tr>\n <tr>\n <th>under_5</th>\n <th>year</th>\n <th>virus</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th rowspan=\"12\" valign=\"top\">0</th>\n <th rowspan=\"4\" valign=\"top\">0</th>\n <th>astrovirus</th>\n <td>111216</td>\n </tr>\n <tr>\n <th>norovirus</th>\n <td>111216</td>\n </tr>\n <tr>\n <th>rotavirus</th>\n <td>111216</td>\n </tr>\n <tr>\n <th>sapovirus</th>\n <td>111216</td>\n </tr>\n <tr>\n <th rowspan=\"4\" valign=\"top\">1</th>\n <th>astrovirus</th>\n <td>113190</td>\n </tr>\n <tr>\n <th>norovirus</th>\n <td>113190</td>\n </tr>\n <tr>\n <th>rotavirus</th>\n <td>113190</td>\n </tr>\n <tr>\n <th>sapovirus</th>\n <td>113190</td>\n </tr>\n <tr>\n <th rowspan=\"4\" valign=\"top\">2</th>\n <th>astrovirus</th>\n <td>114362</td>\n </tr>\n <tr>\n <th>norovirus</th>\n <td>114362</td>\n </tr>\n <tr>\n <th>rotavirus</th>\n <td>114362</td>\n </tr>\n <tr>\n <th>sapovirus</th>\n <td>114362</td>\n </tr>\n <tr>\n <th rowspan=\"12\" valign=\"top\">1</th>\n <th rowspan=\"4\" valign=\"top\">0</th>\n <th>astrovirus</th>\n <td>45013</td>\n </tr>\n <tr>\n <th>norovirus</th>\n <td>45013</td>\n </tr>\n <tr>\n <th>rotavirus</th>\n <td>45013</td>\n </tr>\n <tr>\n <th>sapovirus</th>\n <td>45013</td>\n </tr>\n <tr>\n <th rowspan=\"4\" valign=\"top\">1</th>\n <th>astrovirus</th>\n <td>45582</td>\n </tr>\n <tr>\n <th>norovirus</th>\n <td>45582</td>\n </tr>\n <tr>\n <th>rotavirus</th>\n <td>45582</td>\n </tr>\n <tr>\n <th>sapovirus</th>\n <td>45582</td>\n </tr>\n <tr>\n <th rowspan=\"4\" valign=\"top\">2</th>\n <th>astrovirus</th>\n <td>46003</td>\n </tr>\n <tr>\n <th>norovirus</th>\n <td>46003</td>\n </tr>\n <tr>\n <th>rotavirus</th>\n <td>46003</td>\n </tr>\n <tr>\n <th>sapovirus</th>\n <td>46003</td>\n </tr>\n </tbody>\n</table>\n</div>",
"text/plain": " n\nunder_5 year virus \n0 0 astrovirus 111216\n norovirus 111216\n rotavirus 111216\n sapovirus 111216\n 1 astrovirus 113190\n norovirus 113190\n rotavirus 113190\n sapovirus 113190\n 2 astrovirus 114362\n norovirus 114362\n rotavirus 114362\n sapovirus 114362\n1 0 astrovirus 45013\n norovirus 45013\n rotavirus 45013\n sapovirus 45013\n 1 astrovirus 45582\n norovirus 45582\n rotavirus 45582\n sapovirus 45582\n 2 astrovirus 46003\n norovirus 46003\n rotavirus 46003\n sapovirus 46003"
},
"metadata": {},
"execution_count": 125
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Inpatient virus rate mode"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "virus_inpatient_data = (virus_totals.replace({'virus': {'norovirus':0,\n 'rotavirus':1,\n 'sapovirus':2,\n 'astrovirus':3}}))[virus_totals.setting==INPATIENT]",
"execution_count": 127,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "with Model() as virus_inpatient_model:\n\n cases, year, n = virus_inpatient_data[['cases', 'year', 'n']].values.T\n\n weights = monitoring_rate[INPATIENT] * np.array(inpatient_market_share)[year]\n\n weighted_cases = DiscreteUniform('weighted_cases', cases, n, shape=virus_inpatient_data.shape[0],\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=virus_inpatient_data.shape[0])\n\n λ = Deterministic('λ', tt.exp(θ))\n\n virus_obs = Potential('virus_obs', Poisson.dist(λ*n).logp(weighted_cases))\n\n",
"execution_count": 128,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "from pymc3 import Metropolis\n\nwith virus_inpatient_model:\n virus_inpatient_trace = sample(20000, step=Metropolis(), njobs=2, random_seed=seed_numbers)",
"execution_count": 129,
"outputs": [
{
"output_type": "stream",
"text": " [-----------------100%-----------------] 20000 of 20000 complete in 6.6 sec",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "virus_samples = pd.concat([n_lookup.reset_index()[['under_5', 'year', 'virus']], \n pd.DataFrame(virus_inpatient_trace['λ'][-1000:]).T], axis=1)",
"execution_count": 130,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"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'}))",
"execution_count": 131,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "sns.set(style=\"ticks\")\n\nrateplot = sns.factorplot(x=\"year\", y=\"rate\", hue=\"age group\", col='virus', \n data=virus_samples.assign(rate=virus_samples.value*rate_factor),\n palette=\"PRGn\", size=6, aspect=.75, kind='box', linewidth=0.6,\n col_wrap=2)\n\nrateplot.despine(left=True)\n\n",
"execution_count": 132,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "<seaborn.axisgrid.FacetGrid at 0x128302278>"
},
"metadata": {},
"execution_count": 132
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArQAAANWCAYAAAAPxR/nAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XtUlXW+x/HPBhQUMsDJMtDGOOWUTtqsQsvFhOCtvBFq\nc9AwR6emi2g1OWlolpSXsZOjOJ7Jc0xTp7GLSJrXxEu7jsk0K+0mZYaGmJooCCghsM8fDXtAUFD3\nw7N/7vdrLdb6ic/+/b57gw8fvv728zhcLpdLAAAAgKH87C4AAAAAuBQEWgAAABiNQAsAAACjEWgB\nAABgNAItAAAAjEagBQAAgNEItLDElClT9MUXX9hdRoNGjhzpkXnmzZunrVu3emQuAPYy5fx1qe69\n9167SwA8xsF1aOHLfvGLXygnJ8fuMgAAwCUIsLsAmC0lJUUDBw5Unz59JElDhgzRCy+8oOnTp2vc\nuHFyuVyaPXu2qqqqdOONNyoiIkKSNHbsWElSXFycli9fruLiYj377LOqrKxUYGCgZsyYofbt27vX\nOXz4sB5++GE5HI5a6//tb39Ty5Yt3X/eu3ev0tLSdPr0aRUUFGj06NG6//77tWPHDs2ePVt+fn66\n8sor9dJLL+kvf/mLJOk3v/mN3njjDXXv3l2dO3dWQUGB3n77bf3P//yP1qxZI39/f/Xo0UMTJkzQ\nn/70J7Vp00ajR4+WJI0bN06DBg1SVlaWunXrpttvv11jxoxR69atFRgYqIEDByo7O1szZsyQJCUn\nJ2vcuHFq3769nnrqKZ0+fVp+fn6aPHmybrnlFou+SgDq423nr0mTJikkJERffPGFjhw5oscee0yJ\niYkqKyvT5MmT9dVXX8nPz0+//e1vlZCQoFWrVmnVqlUqLCxUz549NXLkSKWmpurQoUMKCAjQk08+\nqTvuuEOxsbF65513FB4erqKiIg0YMEBbt25V586dlZOTo/nz52vXrl06fPiwhg8frvXr12vcuHG6\n/fbblZ+fr+TkZG3ZskVr1qzRokWL5O/vr8jISM2ePVvNmze3+ssENAqBFpdk8ODBWr16tfr06aP9\n+/ervLxcN910U61jDhw4oK1btyo4OFjz58+v9XfVJ/glS5Zo9OjR6tu3r9avX69du3bV+oFwzTXX\nKDMzs8F63n77bT366KPq3r278vLyNHjwYN1///367//+b02bNk2dO3fW8uXLtWfPHk2ePFnLly/X\nG2+8IUkqLCzUww8/rNtuu03bt2/Xtm3btGrVKgUEBGjs2LFasWKFBg8erMmTJ2v06NEqKSnRrl27\n9F//9V/Kysqq9XwXL16stm3batWqVfXW+dZbb6lnz54aPXq0/vGPf+if//wngRZoYt52/pKkI0eO\n6PXXX9fXX3+t5ORkJSYmat68eQoLC9OaNWt04sQJDRs2TDfffLP7+A0bNsjhcOjxxx9X9+7dNWrU\nKOXl5Wn48OF65513dPfdd2v9+vUaMWKENm3apD59+iggIKBWwC4vL9e7774rSVq/fn29z3Pu3Ll6\n8803FR4errlz5+rbb7/VL37xi0Y9L8BqBFpckrvuuksvvPCCTp06pbVr12rgwIF1junQoYOCg4Pr\nfXz1jpfY2FhNmzZN77//vnr27Kl+/frVOq5mh6P6MQ6Ho06H4+mnn5bT6dTChQv11Vdf6fTp05J+\n6qQ89thj6tWrl+Lj43XnnXe656ipOlR+9NFH6t+/v7v7MGTIEL3zzjsaPny4ysvLlZeXp3/+85+K\njY1Vs2bNas3RunVrtW3b9ryv25133qmUlBR98cUXio2N1YgRI857PADP87bzlyT16NFDknTjjTfq\n5MmTkqSdO3dq+vTpkqSwsDD16tVL2dnZCg4OVqdOndznsY8++kgvvPCCJKldu3bq2rWrdu/erUGD\nBmnGjBkaMWKE3n33XT355JN1nkuXLl0afL3i4uKUlJSk+Ph49e3blzALr0KgxSVp1qyZYmNjlZWV\npQ0bNmjhwoV1jgkMDDzn4ysqKiRJffv21a233qpt27bptdde0/bt25WWluY+rrEdjvHjxys0NFQ9\ne/bUPffco3Xr1kmSRo0apfj4eG3dulWzZ89Wv3799Pvf/141t5A7HA53gD17a7nL5XLXOmjQIK1d\nu1affPKJHnzwwfM+37MDc/Ucv/rVr7Ru3Tpt3bpV69ev16pVq/Tqq682+PwAeI63nb/Otd7Z56Oq\nqir32jWPr++4yspKde7cWUVFRfrss8905MiResPr2eet6rmq15GkZ555RkOHDtW2bds0YcIE95YN\nwBtwlQNcskGDBmnx4sUKDQ1tsDMZFhamb775RpL06aef6tixY5KkJ554Qp9++qnuu+8+jR8/Xl9+\n+eVF1bJjxw6NGzdOcXFxys7OlvTTSf2+++5TSUmJRo4cqQceeMD9DmZ/f39VVVVJqv3DoHv37lq7\ndq1+/PFHVVRUKCMjQ926dZMkDRw4UOvWrdOBAwd022231amh5jxhYWHat2+fJCkvL09fffWVJGn2\n7NnKzMxUQkKCpkyZctHPF8Cl8abz19mqzyXdunXT22+/LUk6fvy4e8/+2bp37+4+Li8vT5988om6\ndu0qSRowYICmTp2q/v3715m/vue5d+9eSdJ7770nSaqsrFTfvn0VFhamhx56SIMHD+a8Ba9ChxaX\n7Fe/+pVKSkqUlJTk/tzZnclq/fv316ZNmzRgwAB16tTJvV/t97//vSZPnqwFCxYoICBAkyZNuqha\nxo4dq6SkJLVq1UodOnRQRESE8vPz9eSTT2rixIny9/dXixYtNG3aNElSfHy8Bg8erJUrV9aqOTY2\nVjk5ORoyZIgqKysVExOj5ORkST91W8LDw90/KM5Wc5477rhDK1euVL9+/XT99de7A/DIkSP15JNP\natWqVfL399fzzz9/Uc8XwKXxpvPX2arreOyxx/T8889r4MCBcrlceuSRR3TTTTfVuUJLamqqnn32\nWa1cuVJ+fn568cUX9bOf/UzST8F93rx5mjNnToPP83e/+50mTpyolStXqlevXpJ++uV//PjxGjVq\nlIKCgnTllVdq5syZHnmegCdw2S4AAAAYzdIO7apVq5SRkSGHw6Eff/xROTk5+vDDDxUSEmLlsgAA\nAPAhTdahnTZtmm666SYNGzasKZYDAACAj2iSN4V99tln+uabbwizAAAA8LgmCbQLFy5031kFAAAA\n8CTLA21xcbH279+v6OjoBo9NT09Xx44d63ykp6dbXSYAXBTOWwBgP8v30G7ZskU7duxQamqqlcsA\nAADAR1neoc3NzVW7du2sXgYAAAA+iuvQAgAAwGjc+hYAAABGI9ACAADAaARaAAAAGI1ACwAAAKMR\naAEAAGA0Ai0AAACMRqAFAACA0Qi0AAAAMBqBFgAAAEYj0AIAAMBoBFoAAAAYjUALAAAAoxFoAQAA\nYDQCLQAAAIxGoAUAAIDRCLQAAAAwGoEWAAAARiPQAgAAwGgEWgAAABiNQAsAAACjEWgBAABgNAIt\nAAAAjEagBQAAgNEItAAAADAagRYAAABGI9ACAADAaARaAAAAGI1ACwAAAKMRaAEAAGA0Ai0AAACM\nRqAFAACA0Qi0AAAAMBqBFgAAAEYj0AIAAMBoBFoAAAAYjUALAAAAoxFoAQAAYDQCLQAAAIxGoAUA\nAIDRCLQAAAAwGoEWAAAARiPQAgAAwGgEWgAAABiNQAsAAACjEWgBAABgNAItAAAAjBZg9QILFy7U\nli1bdObMGQ0fPlxDhgyxekkAAAD4EEsDbXZ2tj755BOtWLFCp06d0quvvmrlcgAAAPBBDpfL5bJq\n8pdfflkOh0N79+5VaWmp/vjHP6pTp05WLQcAAAAfZGmH9sSJEzp06JBeeeUV5eXl6ZFHHtGGDRus\nXBIAAAA+xtI3hYWGhiomJkYBAQHq0KGDAgMDdfz48XMen56ero4dO9b5SE9Pt7JMALhonLcAwH6W\nbjnYtm2bli1bpkWLFunIkSMaOXKkNmzYIIfDYdWSAAAA8DGWbjmIjY3Vxx9/rKFDh8rlcmnq1KmE\nWQAAAHiUpR1aAAAAwGrcWAEAAABGI9ACAADAaARaAAAAGI1ACwAAAKMRaAEAAGA0Ai0AAACMRqAF\nAACA0Qi0AAAAMBqBFgAAAEYj0AIAAMBoBFoAAAAYjUALAAAAoxFoAQAAYDQCLQAAAIxGoAUAAIDR\nCLQAAAAwGoEWAAAARiPQAgAAwGgEWgAAABiNQAsAAACjEWgBAABgNAItAAAAjEagBQAAgNEItAAA\nADAagRYAAABGI9ACAADAaARaAAAAGI1ACwAAAKMRaAEAAGA0Ai0AAACMRqAFAACA0Qi0AAAAMBqB\nFgAAAEYj0AIAAMBoBFoAAAAYjUALAAAAoxFoAQAAYDQCLQAAAIxGoAUAAIDRCLQAAAAwGoEWAAAA\nRiPQAgAAwGgEWgAAABiNQAsAAACjEWgBAABgNAItAAAAjBZg9QKJiYkKCQmRJEVGRmr69OlWLwkA\nAAAfYmmgLS8vlyQtXbrUymUAAADgwyzdcpCTk6NTp05pzJgxGjVqlHbv3m3lcgAAAPBBDpfL5bJq\n8q+//lq7d+/WsGHDtH//fj344IPauHGj/PzYugsAAADPsHTLwc9//nNdd9117nFoaKh++OEHXX31\n1VYuCwAAAB9iaat05cqVmjlzpiTpyJEjKi0t1VVXXXXO49PT09WxY8c6H+np6VaWCQAXjfMWANjP\n0i0HZ86c0aRJk3To0CH5+fnpqaeeUteuXa1aDgAAAD7I0kALXIzXXntNkvTAAw/YXAkAADCB5deh\nBS7Unj177C4BAAAYhMsNwKtUd2fPHgMAAJwLgRZepWZ31hs7tZmZmcrMzLS7DAAAUAOBFrgAO3fu\n1M6dO+0uAwAA1ECghVe56aab6h17g8zMTLlcLrlcLrq0AAB4EQItvErNKxt421UOanZm6dICAOA9\nuMoBvI63dWYBAIB3I9DC63hbZ7Zat27d9NFHH7nHAADAO7DlAGikhIQEORwOORwOJSQk2F0OAAD4\nFzq0wAVo2bKl3SUAAICzEGiBC1BaWmp3CQAA4CxsOQAaacGCBfWOAQCAvQi0QCN999139Y4BAIC9\nCLQAAAAwGoEWaKT27dvXOwYAAPYi0MLrTJkyRVOmTLG7jDoeffTRescAAMBeXOUAXufMmTN2l3BO\nbdq0sbsEAABwFjq08Co1O7Pe2KUNDg5WcHCw3WUAAIAaCLTwKjW7s97Wqd23b59yc3OVm5urffv2\n2V0OAAD4FwIt0EibN2+udwwAAOxFoIVXadasWb1jAACAcyHQwqukpaXVO/YGvXr1qncMAADsxVUO\n4HW8tTMbFRWlDh06uMcAAMA7OFwul8vuIgBTVL8ZjEALAID3INACAADAaOyhBQAAgNEItAAAADAa\ngRa4AJmZmcrMzLS7DAAAUAOBFrgAO3fu1M6dO+0uAwAA1ECgBRopMzNTLpdLLpeLLi0AAF6EQAs0\nUs3OLF1aAAC8B4EWAAAARiPQAo3UrVu3escAAMBeBFqgkRISEuRwOORwOJSQkGB3OQAA4F8C7C4A\nMAmdWQAAvA+3vgX+JTs7WwcPHmzwuKNHj6pNmzbnPSYyMlLR0dGeKg0AAJwHgRa4QBkZGUpMTLS7\nDAAA8C/soQUAAIDRCLQAAAAwGoEWAAAARiPQAgAAwGgEWgAAABiNQAsAAACjEWgBAABgNAItAAAA\njEagBQAAgNEItAAAADCa5YG2oKBAsbGxys3NtXopAAAA+CBLA21FRYWmTp2qoKAgK5cBAACAD7M0\n0M6aNUtJSUlq06aNlcsAAADAh1kWaDMyMtS6dWv16NFDLpfLqmUAAADg4ywNtB9++KGSk5OVk5Oj\np59+WgUFBed9THp6ujp27FjnIz093aoyAeCScN4CAPs5XE3QPk1OTta0adPUoUMHq5cCLJeRkaHE\nxES7ywAAAP/SJJftcjgcTbEMAAAAfFBAUyyydOnSplgGAAAAPogbKwAAAMBoBFp4HafTKafTaXcZ\nAADAEE2y5QC4EFlZWZKkmJgYmysBAAAmoEMLr+J0OlVWVqaysjK6tAAAoFEItPAq1d3Zs8cAAADn\nQqAFAACA0Qi08Crx8fH1jgEAAM6FQAuvEhMTo6CgIAUFBfGmMAAA0Chc5QBeh84sAAC4EARaeB06\nswAA4EKw5QBeJzMzU5mZmXaXAQAADEGghdfZuXOndu7caXcZAADAEARaeJXMzEy5XC65XC66tAAA\noFEItPAqNTuzdGkBAEBjEGgBAABgNAItvEq3bt3qHQMAAJxLowPtmjVrNGfOHJ0+fZq9jbBMQkJC\nvWMAAIBzaVSgfemll7R9+3Zt2rRJlZWVWrlypWbOnGl1bfBR/v7+8vf3t7sMAABgiEYF2g8++ECz\nZ89WYGCgQkJCtHjxYr3//vtW1wYf5HQ6VVlZqcrKSjmdTrvLAQDjpaWlKS0tze4yAEs1KtD6+f10\nmMPhkCSVl5e7Pwd4UlZWVr1jAMDFKS0tVWlpqd1lAJZqVCrt16+fHn/8cRUVFWnJkiW6//771b9/\nf6trAwAAl6BmZ5YuLS5nAY056KGHHpLT6dS1116r77//XikpKerZs6fVtcEHxcfHa+3ate4xAODi\n1ezM0qXF5axRgTYtLU1TpkxRTEyM+3NPP/20Zs2aZVlh8E0xMTHurQY1v98AAADO5byBNjU1VXl5\nefr888+1d+9e9+crKyt18uRJy4uDb6IzCwCeERwc7O7MBgcH21wNYB2Hy+VynesvDx48qPz8fL34\n4ouaPHmy+/P+/v6KiopSaGhokxQJeJOMjAwlJibaXQYANMrEiRMlictt4rJ23g5tZGSkIiMjtXr1\nahUWFur06dNyuVyqrKzUnj17dMcddzRVnQAA4CLQmYUvaNQe2pdffll/+9vfVFFRodDQUB09elSd\nO3fWW2+9ZXV9AADgEkyZMsXuEgDLNeqyXe+++662b9+ue+65R8uWLdPixYsVHh5udW0AAABAgxoV\naK+66iqFhITohhtuUE5Ojrp3765jx45ZXRsAAADQoEZtObjiiiuUmZmpTp06afny5WrTpg1XOQAA\nAIBXaFSgraqq0okTJ5SQkKCtW7fq2Wef1eOPP251bQAAoAHZ2dk6ePDgeY85evSo2rRp0+BckZGR\nio6O9lRpQJNpVKAtKirSsGHDJP378h8AAMB+0dHRDYZQLjeIy12jAq2fn5/i4uLUoUMHBQYGuj+/\ndOlSywoDAAAAGqNRgXbChAlW1wEAAABclEYFWvbToClV382G7S0AAKAxGhVogaZUWFhodwkAAMAg\njboOLdBUat5rnPuOAwCAxiDQwqvU7M7SqQUAAI1BoAUAAIDRCLTwKqGhofWOAQAAzoU3haHJne+u\nNjfeeKOys7Pd44yMjPPOxV1tAAAAgRZNrqG72nz99dcqLS3lrjYAAKBR2HIArzNx4kTdeuutdpcB\nAAAMQaAFAACA0Qi0AAAAMBqBFgAAAEaz9E1hVVVVmjx5snJzc+Xn56fnn39e//Ef/2HlkgAAAPAx\nlnZot2zZIofDob///e8aP368Xn75ZSuXAwAAgA+ytEPbq1cvxcXFSZLy8/N15ZVXWrkcAAAAfJDl\n16H18/PTxIkTtXnzZs2bN8/q5QAAAOBjmuRNYTNnztTGjRs1efJklZWVnfO49PR0dezYsc5Henp6\nU5QJABeM8xYA2M/SDu0777yjI0eO6KGHHlJgYKD8/Pzk53fuDJ2SkqKUlBQrSwIAj+K8BQD2szTQ\n9unTR5MmTdL999+viooKpaamqnnz5lYuCQAAAB9jaaBt0aKF/vznP1u5BAAAAHwcN1YAAACA0Qi0\nAAAAMBqBFgAAAEYj0AIAAMBoBFoAAGC8mTNnaubMmXaXAZtYfqcwwBu8veotlZwu8chchQWFWvL6\nYo/MFdIiREPvHeaRuQDAlxUWFtpdAmxEoIVPKDldonbd2npkrnbyzDySlLfze4/NBQC+qmZndubM\nmZo4caKN1cAObDkAAABGq9mdpVPrmwi0AAAAMBqBFgAAGC00NLTeMXwHgRYAABit5p5Z9s/6Jt4U\nBgAAjBcUFGR3CbARHVoAAAAYjUALAACM5nQ6VVZWprKyMjmdTrvLgQ0ItAAAwGhZWVn1juE7CLQA\nAAAwGoEWAAAYrbKyst4xfAeBFgAAGO3MmTP1juE7CLQAAAAwGoEWAAAYzeFw1DuG7yDQAgAAo7lc\nrnrH8B0EWgAAABiNQAsAAIzWvn37esfwHQRaAABgtL59+9Y7hu8g0AIAAKNt3ry53jF8B4EWAAAA\nRguwuwAAAICGZGdn6+DBg/X+XWBgYK1xRkbGeeeKjIxUdHS0R+uDvQi0AADA60VHR583hL7yyis6\nduyYRo0a1XRFwWuw5QAAABivV69eioiIsLsM2IRACwAAjBcVFaVWrVrZXQZsQqAFAACA0Qi0AAAA\nMBqBFgAAAEbjKgfwCYUFhSp2nrS7jDoqi6vsLgEAAOMRaOETQluHql23tnaXUUfezu/tLgEAAOOx\n5QAAAABGI9ACAADAaARaAAAAGI1ACwAAAKMRaAEAAGA0Ai0AAACMxmW7AADwQm+vekslp0s8Mldh\nQaGWvL7YI3OFtAjR0HuHeWQuwFMItAAAeKGS0yUeu352O3nuOtxcPxveiC0HAAAAMBqBFgAAAEYj\n0AIAAMBolu2hraio0DPPPKP8/HydOXNGDz/8sOLi4qxaDgAAAD7KskC7evVqhYWF6U9/+pOKioqU\nkJBAoAUAAIDHWRZo7777bvXr10+SVFVVpYAALqhwuct4K0OlJac8MtfxwuNatni5R+YKDmnpkXkA\nAIB3sixltmjRQpJUUlKi8ePH64knnrBqKXiJ0pJTujmiq2cmi/DMNJL0Zf4uKdBz8wEAAO9i6ZvC\nvv/+ez3wwAO69957dc899zR4fHp6ujp27FjnIz093coyAeCicd4CAPtZ1qE9duyYxowZo2effVbd\nu3dv1GNSUlKUkpJiVUkA4HGctwDAfpZ1aF955RWdPHlSCxYsUHJyskaOHKny8nKrlgMAAICPsqxD\nm5qaqtTUVKumBwAAACRxYwUAAAAYjkALAAAAoxFoAQAAYDQCLQAAAIzG7bvgE0JahChv5/cemauw\noFChrUM9MldIixCPzAMAgC8j0MInDL13mMfmysjIUGJiosfmAwAAl4YtBwAAADAagRYAAABGI9AC\nAADAaARaAAAAGI1ACwAAAKMRaAEAAGA0Ai0AAACMxnVoAQDwQoUFhSp2nrS7jDoqi6vsLgGog0AL\nAIAXCm0dqnbd2tpdRh2euusi4ElsOQAAAIDRCLQAAAAwGlsO4DHHC4/r4+KP7C6jjrLKU3aXAAAA\nLESghceEh4br5oiudpdRx5f5u+wuAQAAWIgtBwAAADAagRYAAABGI9ACAADAaARaAAAAGI1ACwAA\nAKMRaAEAAGA0Ai0AAACMRqAFAACA0Qi0AAAAMBqBFgAAAEbj1rcAAMA2GW9lqLTklEfmOl54XMsW\nL/fIXMEhLZU4LNEjc8F6BFoAAGCb0pJTujmiq2cmi/DMNJL0Zf4uz00Gy7HlAAAAAEYj0AIAAMBo\nBFoAAAAYjUALAAAAoxFoAQAAYDSucgAAgBcKaRGivJ3fe2SuwoJChbYO9chcIS1CPDKPL3E6nZKk\nmJgYmyu5fBFo4THBIS09dpmT44XHFR4a7pG5gkNaemQeAGhKQ+8d5rG5MjIylJjINVXtkpWVJYlA\nayUCLTzGkxeg5uQLALgcOJ1OlZWVuceEWmuwhxYAAMAi1d3Zs8fwLAItAAAAjEagBQAAsEh8fHy9\nY3gWgRYAAMAiNffMsn/WOgRaAAAAi1RfsuvsMTyLQAsAAGAR3hTWNAi0AAAAMBqBFgAAwCK8Kaxp\nWB5od+/ereTkZKuXAQAA8Dq8KaxpWBpo//d//1eTJ0/WmTNnrFwGAADAK2VmZtY7hmdZGmivu+46\n/eUvf7FyCQAAAK+1c+fOesfwrAArJ+/du7fy8/OtXAIAABjseOFxfVz8kd1l1FFWecoj87hcrnrH\n8CxLA+2FSk9P1/z58+t8fuzYsUpJSbGhIgA4P85bwKUJDw3XzRFd7S6jji/zd3lkHn9/f1VWVrrH\nsEaTBNrG/kaSkpLCDwAARuG8BeB8qsPs2WN4VpNctsvhcDTFMgAAAPBBlgfaiIgIrVixwuplAAAA\n4KO4sQIAAACMRqAFAACwyDXXXFPvGJ5FoAUAALBIYWFhvWN4FoEWAADAImFhYfWO4VkEWgAAAIsM\nGDCg3jE8y6turAAAAHA5iYqKUtu2bd1jWINAC/xLdna2Dh482OBxR48eVUZGxnmPiYyMVHR0tKdK\nAwAYjM6s9Qi0wL9ER0cTQgEAHkdn1nrsoQUAAIDRCLQAAAAWcjqdcjqddpdxWWPLAQAAgIWysrIk\nSTExMTZXcvmiQwsAAGARp9OpsrIylZWV0aW1EB1aAABgm+CQlvoyf5dH5jpeeFzhoeEemSs4pKVH\n5qnuzlaP6dJag0ALAABskzgs0WNzZWRkKDHRc/N5wo8//ljvGJ7FlgMAAACLuFyuesfwLAKtQV5+\n+WW9/PLLdpcBAADgVdhyYJCjR4/aXQIAAIDXoUNriJqdWbq0AAAA/0agNUTN7iydWgAAgH8j0AKo\ng7vaAABMwh5aNLns7GwdPHjwvMccPXpUGRkZDc4VGRmp6OhoT5WGf9m4caMk7moDAJcqICBAFRUV\n7jGswSuLJhcdHU0I9WJOp9N98nU6nYRaALgE1efTs8fwLLYcAKilujt79hgAAG9FoAVQC90EAIBp\nCLQAAAAwGoEWAAAARiPQAgAAwGgEWgAAABiNQGsIPz+/escAAAC+juvQepHz3XDgtttuU3Z2tnvc\n0E0HuOEAAPgGblYDEGi9SkM3HPj4449VVVWlxMTEJqwKvqZZs2Y6c+aMewzAu3GzGu/m7++vyspK\n9xjWINAaZPr06Y36DRu4FG3bttV3333nHgMAzq2hDvm1116rvLw89/h8P8fpkF88Ai2AWqrD7Nlj\nAEBdjenR0asOAAAgAElEQVSQp6amqqqqSo899lgTVeV7eHcRAACAhfr166fIyEi7y7is0aEFAACw\nUExMjH744Qe7y7isEWgBAJbat2+fJCkqKsrmSmAyruaA8yHQAgAstXnzZkkEWlwaruaA82EPLQDA\nMvv27VNubq5yc3PdnVoA8DQCLQDAMtXd2bPHAOBJbDloAm+vekslp0s8MldhQaGWvL7YI3OFtAjR\n0HuHeWQuAKjPgQMH6h0DgCcRaJtAyekStevmmQvUt5PnLnSft/N7j80FczTmjRU1cRFwXIqqqqp6\nxwDgSQRawMc09MaKTz/9VGVlZZKkoKAgbrUMwGfxP6zmINACqOW5557TxIkT3WMA8FX8D6s5CLRN\noLCgUMXOk3aXUUdlMf/9h/oFBQWpvLzc7jIAAGgUAm0TCG0d6rHf8DyJ3/BwLs8991yjLk4OAIA3\n4LJdAAAAMJqlHVqXy6XnnntOX331lZo3b64XX3xR7dq1s3JJj6jePzhz5kyPzBfSIsRj3dDCgkKF\ntg71yFwhLUI8Mg+8R8ZbGSotOeWRuY4XHteyxcs9MldwSEslDrv0N5d5+t/m5YTXxn58DS4/bBk0\nh6WBdvPmzSovL9eKFSu0e/duzZgxQwsWLLBySa/kyXciZmRk8K5znFNpySndHNHVM5NFeGYaSfoy\nf5fnJoNX4TJwuJyxZdAclgbaf/7zn4qJiZEkdenSRZ9//rmVy3lE9W/Y1WN+04ZJjhce18fFH9ld\nRh1llZfeNebf5rnZ+do0dBm47OzsWn++XH8h5/sTsJelgbakpERXXHHFvxcLCFBVVZX8/Bq/dbei\nokKHDx+2orx6lZaW1vrzhXQeLtXu3bsbfK7Hjh3TokWLGpzrmmuuUZcuXTxVGgzhJz9dd9X1dpdR\nx97DX17yvyU7/21KP/2bCgho3Cnzcjlvrd+4TqU/ljZ84Hlc0/5q7dvzrSQp6qbr9ecFcy65ruDA\nYN3d955LnseT7P7+hDXOnD6jzzbu8chcJ0+cVKuwVh6ZKzgwuNHfYxdy7jKZw+VyuayafObMmera\ntav69esnSYqNjdW2bdvOeXx6errmz59vVTkAcNGysrIUGRlZ5/OctwB4s3Oduy43lgbaTZs2aevW\nrZoxY4Z27dqlBQsWaOHChRc0R1N3OqwQHx+vrKwsu8vwaXwN7HU5vP7e3KG1yuXwdTMZr7+9LpfX\n31c6tJY+w969e+vDDz/Uf/7nf0qSZsyYccFzBAQEXBa/WVwOz8F0fA3s5Uuv/+Vy3pJ86+vmjXj9\n7cXrbw5LA63D4dDzzz9v5RIAAADwcdxYAQAAAEYj0AIAAMBo/s8999xzdhfhC7p162Z3CT6Pr4G9\neP3NxNfNXrz+9uL1N4elVzkAAAAArMaWAwAAABiNQAsAAACjEWgBAABgtMv/1hEAAACo4+TJk0pN\nTdWpU6d04sQJpaWl6eabb9bEiROVl5en66+/Xvn5+Vq8eLEyMzO1YsUKSdLw4cM1aNAg9zwul6vW\nYw4dOqRXX31VvXv3VkREhHr37q0WLVro73//u/z9/dW3b1/99re/1aRJk5SUlKRbbrlF8+fP1/XX\nX68ff/xR7733noqLi1VWVqZZs2bp+uuvb/C5EGgBAAB80IEDBzR8+HDdcccdWrdundauXatDhw4p\nJCREr7/+urKzszV//nydOHFCy5cv1xtvvCFJGjFihHr27KkrrrhCkrR58+Y6j5GkY8eOae3atSot\nLdWYMWP01ltvyeFwaNSoUfr1r399zrqaN2+uZcuW6eOPP9af//xnzZs3r8HnQqAFAADwQa1bt9ay\nZcu0evVqFRcXKyIiQvv379cvf/lLSVLXrl0lSXl5eTp8+LB++9vfyuVyqbS0VPn5+frFL34hScrN\nza3zGEm6+uqr1bx5c+Xk5Khjx47y9/eXJN1yyy3Kzc2tVUvNi27dfvvt7uO+++67Rj0X9tACAAD4\noCVLlqh3796aMWOGbr75ZrlcLkVFRemzzz6TJO3evVuSFBkZqeuvv15Lly7VsmXLNHDgQEVGRrrn\niYqK0ueff17rMZLkcDjcj//qq69UWVmpyspK7dq1S+3bt1fz5s115MgRSdKePXvcj/vyyy/dczVm\nu4FEhxYAAMAnxcbGKi0tTUuWLFGbNm0kSXFxcXrvvfeUnJysq6++WgEBAQoPD9fAgQM1fPhwlZWV\nKSYmRiEhIe554uLitHnz5lqPkf4daMPDwzV8+HAlJSWpqqpKvXv31o033qghQ4YoNTVVK1asUGho\nqHu+b7/9Vg888ICqqqo0Y8aMRj0XbqwAAAAASdK+ffv03XffqWfPnvr444+1cuXKBkPlxTzmXFat\nWqVjx47pwQcfvKDHseUAlpsyZYq++OILu8s4pzfffFPr1q27qMfee++9Hq4GgJ28/XzlSVu2bFF6\nerrdZcDLXHPNNVq+fLmSkpI0d+5cPfTQQ5Y8xtPo0MLnTZo0Sd26dVNCQoLdpQAAgIvAHlp4TEpK\nigYOHKg+ffpIkoYMGaIXXnhB06dP17hx4+RyuTR79mxVVVXpxhtvVEREhCRp7Nixkn7ag7N8+XIV\nFxfr2WefVWVlpQIDAzVjxgy1b9/evc7hw4f18MMPu/fmVPvb3/6mli1buv88adIknThxQnl5eZow\nYYLCwsL04osvqry8XGFhYXr++eeVn5+vLVu2aOfOnbrqqqvUpk0bpaWl6fTp0yooKNDo0aOVlJSk\n2NhYvfPOOwoPD1dRUZEGDBigrVu3qnPnzsrJydH8+fO1a9cuHT58WMOHD9f69es1btw43X777crP\nz1dycrK2bNmiNWvWaNGiRfL391dkZKRmz56t5s2bW/2lAXAWbztf1Xdu8Pf313PPPae9e/eqoKBA\nHTp00Pz58/XDDz/o4YcfVvv27XXgwAFFRERo9uzZatWqlbZu3aq5c+fK5XKpXbt2ev7557V79269\n+eab+utf/+peOzc3V506dVJ2drZmzJihuLg4denSRTk5OZo1a5Yef/xxbdmyRZLcl2B6+OGH9cwz\nz+ibb76RJCUlJWnYsGFWfHmAC0aghccMHjxYq1evVp8+fbR//36Vl5frpptuqnXMgQMHtHXrVgUH\nB7tPktWqT/hLlizR6NGj1bdvX61fv979bshq11xzjTIzMxtVU1hYmP7617/qzJkz6tu3r9LT09Wp\nUydt2LBBTz75pN5++23FxcWpW7du6tGjh6ZPn65HH31U3bt3V15engYPHqz7779fd999t9avX68R\nI0Zo06ZN6tOnjwICAmr9kCovL9e7774rSVq/fn29z23u3Ll68803FR4errlz5+rbb791X/YEQNPx\ntvNVfeeGkpISNW/eXCtWrJDL5dLIkSO1fft23Xzzzdq7d6+mTp2q2267TbNmzVJ6eroeeeQRTZ06\nVW+88Ybatm2rRYsWKS0tTS+99JKee+45FRcX64orrtC7775bK5hWu+uuuzRnzhzl5+fXCeCS9Mkn\nn6ioqEgZGRkqLCzUrFmzCLTwGgRaeMxdd92lF154QadOndLatWs1cODAOsd06NBBwcHB9T6+evdL\n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\n",
"text/plain": "<matplotlib.figure.Figure at 0x128302358>"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Outpatient virus rate model"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "virus_outpatient_data = (virus_totals.replace({'virus': {'norovirus':0,\n 'rotavirus':1,\n 'sapovirus':2,\n 'astrovirus':3}}))[virus_totals.setting==OUTPATIENT]",
"execution_count": 133,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "with Model() as virus_outpatient_model:\n\n cases,n = virus_outpatient_data[['cases','n']].values.T\n\n ω = monitoring_rate[OUTPATIENT]\n\n π = Beta('π', 1, 10, shape=virus_outpatient_data.shape[0])\n\n virus_out_obs = Binomial('virus_out_obs', n, π*ω, observed=cases)\n \n",
"execution_count": 134,
"outputs": [
{
"output_type": "stream",
"text": "Applied logodds-transform to π and added transformed π_logodds to model.\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "with virus_outpatient_model:\n virus_outpatient_trace = sample(2000, njobs=2, random_seed=seed_numbers)",
"execution_count": 135,
"outputs": [
{
"output_type": "stream",
"text": "Assigned NUTS to π_logodds\n [-----------------100%-----------------] 2000 of 2000 complete in 7.4 sec",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "virus_out_samples = pd.concat([n_lookup.reset_index()[['under_5', 'year', 'virus']], \n pd.DataFrame(virus_outpatient_trace['π'][-1000:]).T], axis=1)",
"execution_count": 136,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "virus_out_samples = (pd.melt(virus_out_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'}))",
"execution_count": 137,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "sns.set(style=\"ticks\")\n\nsns.set_context(font_scale=1.5)\nrateplot = sns.factorplot(x=\"year\", y=\"rate\", hue=\"age group\", col='virus', \n data=virus_out_samples.assign(rate=virus_out_samples.value*rate_factor),\n palette=\"PRGn\", size=6, aspect=.75, kind='box', linewidth=0.6,\n col_wrap=2)\n\nrateplot.despine(left=True)\n\n",
"execution_count": 138,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "<seaborn.axisgrid.FacetGrid at 0x12b235198>"
},
"metadata": {},
"execution_count": 138
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArMAAANWCAYAAADtGQSeAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl4lOW9//FPFtYESIKAkCDEOYgEBNsDAeUHsoRNVkFs\ng4ApVEAloFQlkWDYUfDUA0GPYFuoUMWFsAkohkXTFon1CC4IteOgAQxKSEISgmSZ3x+cTFmGJMA8\nM/PMvF/XxXXdJDP3851Bn3zmzr0E2O12uwAAAAATCvR0AQAAAMD1IswCAADAtAizAAAAMC3CLAAA\nAEyLMAsAAADTIswCAADAtAizcIvZs2frq6++8nQZ1Ro/frxL+lm+fLn27Nnjkr4AuJ9Z7lk36r77\n7vN0CcANC2CfWeDfbr/9dh0+fNjTZQAAgBoK9nQB8C2JiYkaOnSo+vfvL0kaNWqUFixYoEWLFmna\ntGmy2+1aunSpKioqdNtttykyMlKSNHXqVElSnz59tG7dOhUWFurZZ59VeXm56tSpo8WLF+uWW25x\nXCcnJ0dTpkxRQEDAJdf/y1/+ovr16zv+/s0332j+/PkqKSlRbm6uJkyYoLFjx2rfvn1aunSpAgMD\n1ahRI73wwgt66aWXJEm/+tWv9Oabb6pbt27q0KGDcnNz9c477+jVV1/V1q1bFRQUpO7du+upp57S\nkiVL1LRpU02YMEGSNG3aNA0bNky7du1S165d1aVLF02cOFGNGzdWnTp1NHToUGVlZWnx4sWSpHHj\nxmnatGm65ZZb9OSTT6qkpESBgYFKSUlRx44dDfpXAlDJ2+5ZycnJCg0N1VdffaWTJ0/qscce08iR\nI3Xu3DmlpKToyJEjCgwM1G9+8xuNGDFCGzdu1MaNG5Wfn6/evXtr/PjxmjVrlk6cOKHg4GDNmDFD\nd911l3r16qXNmzcrIiJCBQUFGjJkiPbs2aMOHTro8OHDWrFihQ4cOKCcnByNGTNGO3bs0LRp09Sl\nSxcdP35c48aN0+7du7V161b98Y9/VFBQkKKiorR06VLVrl3b6H8moEqEWbjU8OHDtWXLFvXv319H\njx7V+fPn1a5du0se891332nPnj0KCQnRihUrLvle5Y1+zZo1mjBhggYMGKAdO3bowIEDl/xguPnm\nm7Vp06Zq63nnnXf06KOPqlu3bsrOztbw4cM1duxY/c///I/mzZunDh06aN26dfr666+VkpKidevW\n6c0335Qk5efna8qUKercubM+/PBD7d27Vxs3blRwcLCmTp2q9evXa/jw4UpJSdGECRNUVFSkAwcO\n6L/+67+0a9euS17v6tWr1bx5c23cuNFpnW+//bZ69+6tCRMm6JNPPtGnn35KmAXcwNvuWZJ08uRJ\nvf766/rnP/+pcePGaeTIkVq+fLnCw8O1detW5eXlafTo0YqJiXE8/r333lNAQIAef/xxdevWTQkJ\nCcrOztaYMWO0efNmDRo0SDt27NCDDz6onTt3qn///goODr4kXJ8/f17vvvuuJGnHjh1OX+eyZcv0\n1ltvKSIiQsuWLdO3336r22+/vUavCzAKYRYudc8992jBggU6e/astm3bpqFDh17xmOjoaIWEhDh9\nfuWsl169emnevHn66KOP1Lt3bw0cOPCSx108ylH5nICAgCtGOWbOnKnMzEytWrVKR44cUUlJiaQL\noymPPfaY4uLi1LdvX919992OPi5WGSg//vhjDR482DECMWrUKG3evFljxozR+fPnlZ2drU8//VS9\nevVSrVq1LumjcePGat68eZXv2913363ExER99dVX6tWrlx588MEqHw/ANbztniVJ3bt3lyTddttt\nOnPmjCRp//79WrRokSQpPDxccXFxysrKUkhIiNq3b++4d3388cdasGCBJKlly5a68847dfDgQQ0b\nNkyLFy/Wgw8+qHfffVczZsy44rV06tSp2verT58+io+PV9++fTVgwACCLLwCYRYuVatWLfXq1Uu7\ndu3Se++9p1WrVl3xmDp16lz1+WVlZZKkAQMG6Be/+IX27t2rP//5z/rwww81f/58x+NqOsoxffp0\nhYWFqXfv3rr33nu1fft2SVJCQoL69u2rPXv2aOnSpRo4cKAmT56si6eQBwQEOMLr5VPL7Xa7o9Zh\nw4Zp27Zt+uyzz/Twww9X+XovD8uVffzyl7/U9u3btWfPHu3YsUMbN27Un/70p2pfH4Ab4233rKtd\n7/J7UEVFhePaFz/e2ePKy8vVoUMHFRQU6IsvvtDJkyedBtfL71WVfVVeR5KeeeYZ3X///dq7d6+e\neuopxzQNwJPYzQAuN2zYMK1evVphYWHVjkiGh4frX//6lyTp888/16lTpyRJTzzxhD7//HM98MAD\nmj59ug4dOnRdtezbt0/Tpk1Tnz59lJWVJenCzf2BBx5QUVGRxo8fr4ceesixajkoKEgVFRWSLv2h\n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\nAAAAAElFTkSuQmCC\n",
"text/plain": "<matplotlib.figure.Figure at 0x12b235278>"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## ED virus rate model"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "virus_ed_data = (virus_totals.replace({'virus': {'norovirus':0,\n 'rotavirus':1,\n 'sapovirus':2,\n 'astrovirus':3}}))[virus_totals.setting==ED]",
"execution_count": 139,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "with Model() as virus_ed_model:\n\n data_len = virus_ed_data.shape[0]\n\n cases, year, n = virus_ed_data[['cases', 'year', 'n']].values.T\n\n weights = (np.array(monitoring_rate)[ED] \n * np.array(ed_market_share)[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 virus_ed_obs = Poisson('virus_ed_obs', λ * n, observed=weighted_cases)\n \n",
"execution_count": 140,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "with virus_ed_model:\n virus_ed_trace = sample(2000, njobs=2, random_seed=seed_numbers)",
"execution_count": 141,
"outputs": [
{
"output_type": "stream",
"text": "Assigned Metropolis to weighted_cases\nAssigned NUTS to θ\n [-----------------100%-----------------] 2000 of 2000 complete in 10.4 sec",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "virus_ed_samples = pd.concat([n_lookup.reset_index()[['under_5', 'year', 'virus']], \n pd.DataFrame(virus_ed_trace['λ'][-1000:]).T], axis=1)",
"execution_count": 142,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "virus_ed_samples = (pd.melt(virus_ed_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'}))",
"execution_count": 143,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "sns.set(style=\"ticks\")\n\nsns.set_context(font_scale=1.5)\nrateplot = sns.factorplot(x=\"year\", y=\"rate\", hue=\"age group\", col='virus', \n data=virus_ed_samples.assign(rate=virus_ed_samples.value*rate_factor),\n palette=\"PRGn\", size=6, aspect=.75, kind='box', linewidth=0.6,\n col_wrap=2)\n\nrateplot.despine(left=True)\n\n\n",
"execution_count": 144,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "<seaborn.axisgrid.FacetGrid at 0x12d316550>"
},
"metadata": {},
"execution_count": 144
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArMAAANWCAYAAADtGQSeAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XtclGX+//E3hxQdxBHL1cRS50uWutW2iFQPyAMq5jHM\ndj1mupaVaFGukNpkalS26xpu37Jvq5vWWiaaWXbAQ7KbRvVIK8kOhAWeRVBASA7z+8Mfsx4QUe+b\nmZt5PR8PHo+rmXuu+zOQF2+uue7r9nO5XC4BAAAAFuTv6QIAAACAi0WYBQAAgGURZgEAAGBZhFkA\nAABYFmEWAAAAlkWYBQAAgGURZlEvZs2apZ07d3q6jPMaO3asIf08//zz2rRpkyF9Aah/VhmzLtUd\nd9zh6RKAS+bHPrPAf1177bXatWuXp8sAAAB1FOjpAtCwJCQkaNCgQerbt68kadiwYZo7d66eeuop\nTZkyRS6XS/Pnz1dVVZWuueYatW3bVpI0efJkSVKvXr20fPlyFRUV6fHHH1dlZaUaN26slJQUXXXV\nVe7z7N+/X5MmTZKfn99p53/ttdfUtGlT93//8MMPmjNnjkpLS5Wfn6/x48dr9OjR2rp1q+bPny9/\nf381b95czz33nP7+979Lkv7whz/ojTfeUFRUlLp27ar8/Hy99dZbevnll/XOO+8oICBAt956q6ZN\nm6Znn31WrVq10vjx4yVJU6ZM0eDBg7VhwwZ1795d3bp104QJE9SyZUs1btxYgwYNUmZmplJSUiRJ\nY8aM0ZQpU3TVVVfp0UcfVWlpqfz9/TVz5kxdf/31Jv2UAFTztjErOTlZwcHB2rlzpw4cOKAHH3xQ\n8fHxKisr08yZM/Xdd9/J399f99xzj4YOHarVq1dr9erVKiwsVM+ePTV27FjNmDFDe/fuVWBgoBIT\nE3XzzTerR48eevvttxUaGqqjR49q4MCB2rRpk7p27apdu3Zp0aJF2r59u/bv36+RI0dq/fr1mjJl\nirp166Y9e/ZozJgx2rhxo9555x298sorCggIUFhYmObPn69GjRqZ/WMCakWYhaGGDBmitWvXqm/f\nvtq9e7dOnDih66677rRjfv75Z23atEk2m02LFi067bnqgX7p0qUaP368+vXrp/Xr12v79u2n/WJo\n3bq11qxZc9563nrrLT3wwAOKiopSbm6uhgwZotGjR+t///d/9eSTT6pr165avny5vv32W82cOVPL\nly/XG2+8IUkqLCzUpEmTFBERoY8//libN2/W6tWrFRgYqMmTJ2vFihUaMmSIZs6cqfHjx6u4uFjb\nt2/XX/7yF23YsOG097tkyRK1adNGq1evrrHOlStXqmfPnho/frw+++wzffHFF4RZoB5425glSQcO\nHNDrr7+u77//XmPGjFF8fLyef/55tWjRQu+8844KCgo0fPhwde7c2X38+++/Lz8/Pz300EOKiorS\nuHHjlJubq5EjR+rtt99W//79tX79eo0aNUoffvih+vbtq8DAwNPC9YkTJ7Ru3TpJ0vr162t8nwsX\nLtSbb76p0NBQLVy4UD/99JOuvfbaOr0vwCyEWRjqtttu09y5c3X8+HG9++67GjRo0FnHdOjQQTab\nrcbXV6966dGjh5588klt2bJFPXv2VFxc3GnHnTrLUf0aPz+/s2Y5pk+froyMDC1evFjfffedSktL\nJZ2cTXnwwQcVGxur3r1765ZbbnH3carqQLlt2zYNGDDAPQMxbNgwvf322xo5cqROnDih3NxcffHF\nF+rRo4cuu+yy0/po2bKl2rRpU+v37ZZbblFCQoJ27typHj16aNSoUbUeD8AY3jZmSdKtt94qSbrm\nmmt07NgxSdKnn36qp556SpLUokULxcbGKjMzUzabTV26dHGPXdu2bdPcuXMlSe3atdONN96oHTt2\naPDgwUpJSdGoUaO0bt06JSYmnvVebrjhhvN+v3r16qURI0aod+/e6tevH0EWXoEwC0Nddtll6tGj\nhzZs2KD3339fixcvPuuYxo0bn/P1FRUVkqR+/frpd7/7nTZv3qx//vOf+vjjjzVnzhz3cXWd5Zg6\ndarsdrt69uyp22+/Xe+9954kady4cerdu7c2bdqk+fPnKy4uTvfdd59OXULu5+fnDq9nLi13uVzu\nWgcPHqx3331XX375pSZOnFjr+z0zLFf3cdNNN+m9997Tpk2btH79eq1evVr/+Mc/zvv+AFwabxuz\nznW+M8egqqoq97lPPb6m4yorK9W1a1cdPXpUX3/9tQ4cOFBjcD1zrKruq/o8kvTYY4/pzjvv1ObN\nmzVt2jT3Mg3Ak9jNAIYbPHiwlixZIrvdft4ZyRYtWujHH3+UJH311Vc6fPiwJOnhhx/WV199pbvu\nuktTp05VVlbWRdWydetWTZkyRb169VJmZqakk4P7XXfdpeLiYo0dO1Z33323+6rlgIAAVVVVSTr9\n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\n07hx4xQTE3POuho1aqRly5bp888/19/+9jc9//zz530vhFkAAAAf07JlSy1btkxr165VUVGR2rZt\nq927d+u3v/2tJOnGG2+UJOXm5mr//v2655575HK5VFJSoj179ujaa6+VJOXk5Jz1Gkn6zW9+o0aN\nGmnXrl3q1KmTAgICJEnXX3+9cnJyTqvl1I21unXr5j7ul19+qdN7Yc0sAACAj1m6dKn69OmjlJQU\nde7cWS6XSw6HQ19//bUkaceOHZKksLAwdezYUa+++qqWLVumQYMGKSwszN2Pw+HQN998c9prJMnP\nz8/9+u+++06VlZWqrKzU9u3bddVVV6lRo0Y6cOCAJOnbb791vy4rK8vdV12WGEjMzAIAAPicHj16\naM6cOVq6dKlatWolSerVq5c++ugjjRkzRr/5zW8UGBio0NBQDRo0SCNHjlRZWZmio6MVHBzs7qdX\nr15KT08/7TXSf8NsaGioRo4cqREjRqiqqkp9+vTRNddco2HDhmnGjBlasWKF7Ha7u7+ffvpJd999\nt6qqqpSSklKn98JNEwAAAKDs7Gz98ssv6tmzpz7//HOtWrXqvIHyYl5zLqtXr9bhw4c1ceLEC3od\nywxQ72bNmqWdO3d6uoxzevPNN/Xee+9d1GvvuOMOg6sBUN+8fYwy0saNG5WamurpMuAlWrdureXL\nl2vEiBFauHCh7r33XlNeYzRmZoEzJCcnq3v37ho6dKinSwEAAOfBmlmYJiEhQYMGDVLfvn0lScOG\nDdPcuXP11FNPacqUKXK5XJo/f76qqqp0zTXXqG3btpKkyZMnSzq5Dmf58uUqKirS448/rsrKSjVu\n3FgpKSm66qqr3OfZv3+/Jk2a5F6fU+21115T06ZN3f+dnJysgoIC5ebmatq0aWrRooXmzZunEydO\nqEWLFpo9e7b27NmjjRs36tNPP9UVV1yhVq1aac6cOSotLVV+fr7Gjx+vESNGqEePHnr77bcVGhqq\no0ePauDAgdq0aZO6du2qXbt2adGiRdq+fbv279+vkSNHav369ZoyZYq6deumPXv2aMyYMdq4caPe\neecdvfLKKwoICFBYWJjmz5+vRo0amf2jASDvG6NqGg8CAgL0xBNP6IcfflB+fr46dOigRYsW6dCh\nQ5o0aZKuuuoq/fzzz2rbtq3mz5+vkJAQbdq0SQsXLpTL5VK7du00e/Zs7dixQ2+++aZefPFF97lz\ncnLUpUsXZWZmKiUlRb169dINN9ygXbt26ZlnntFDDz2kjRs3SpJ7u6VJkybpscce048//ihJGjFi\nhIYPH27GjweoM8IsTDNkyBCtXbtWffv21e7du3XixAldd911px3z888/a9OmTbLZbO7Bslr1wL90\n6VKNHz9e/fr10/r1691XQlZr3bq11qxZU6eaWrRooRdffFHl5eXq16+fUlNT1aVLF73//vtKTEzU\nW2+9pV69eql79+669dZb9dRTT+mBBx5QVFSUcnNzNWTIEI0ePVr9+/fX+vXrNWrUKH344Yfq27ev\nAgMDT/tldeLECa1bt06StH79+hrf28KFC/Xmm28qNDRUCxcu1E8//eTe7gSAubxtjKppPCguLlaj\nRo20YsUKuVwujR07Vh9//LE6d+6sH374QU6nUxEREXrmmWeUmpqq+++/X06nU2+88YbatGmjV155\nRXPmzNFzzz2nJ554QkVFRWrWrJnWrVt3Wiitdtttt2nBggXas2fPWeFbkr788ksdPXpUaWlpKiws\n1DPPPEOYhccRZmGa2267TXPnztXx48f17rvvatCgQWcd06FDB9lsthpfX70CpkePHnryySe1ZcsW\n9ezZU3Fxcacdd+qsR/Vr/Pz8zpr1kKQbbrhBkrR7927Z7XZ16dJFkhQXFyen06ni4uLTjk9KSlJG\nRoYWL16s7777TqWlpZKkwYMHKyUlRaNGjdK6deuUmJh4Vv3V56pNr169NGLECPXu3Vv9+vUjyAL1\nyNvGqHONB3a73T2T+ssvv6ikpMRdW0REhCRp6NChevTRR3XrrbfqhhtuUJs2bSRJf/jDH7R48WIF\nBgaqT58++uCDD3TLLbfo6NGj+u1vf3tWmL3++utr/Z6Fh4dr9+7dmjBhgm677TZNmzat1uPh3aqq\nqpSfn29ony1btpS/f/1ekkWYhWkuu+wy9ejRQxs2bND777+vxYsXn3VM48aNz/n6iooKSVK/fv30\nu9/9Tps3b9Y///lPffzxx5ozZ477uAuZmQ0KCpJ08h/wmcvFXS6XqqqqTnts6tSpstvt6tmzp26/\n/Xb3hWFdu3bV0aNH9fXXX+vAgQM1BtdT39upv8Sq35ckPfbYY7rzzju1efNmTZs2zf2xJwDzedsY\nVdN4YLPZ9Pzzz2vcuHEaNmyYCgoK3MdXb0IvnRy/AgMD5XK5ThvbqqqqVFlZKenkH+ELFy50L42q\n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\nGCld++6P6t5++20NHDgwY//tnwzGK/swVtmL8Sqz+IxM/ZcOAAAA12PNLAAAAFyLMAsAAADXIswC\nAADAtQizAAAAcC3CLAAAAFyLMAsAAADXIswCAADAtQizAAAAcC3CLDzjjjvu0Lp16xJfz5o1S//4\nxz90/fXXq6ioSNdcc40+++wzSdLnn3+uWbNmqbi4WFOmTNHatWslfXsU4Y033qjLLrtMzz33nC3v\nA4D3MV4B5uE4W3jGlVdeqYqKChUXF2v37t1qamrS/fffr0WLFunss89WNBrV7373O7366qtat26d\nbrnlFhUUFGjnzp26/PLLNXPmTEnS4cOHtWnTJpvfDQAvY7wCzMNxtvCUX/7yl1q1apVeeuklGYah\nv/zlLxo7dmzifPJYLKaXX35Zw4YNU01NjXbs2KEdO3bolVde0Weffably5fr0KFDuu2222x+JwC8\njvEKMAczs/CUK664Qps2bdKrr76qlStXatWqVXrxxRcTz+/Zs0fDhw9XSUmJgsGgfv7zn+uSSy7R\nK6+8kviewYMH21E6gAzDeAWYgzWz8JRp06bp+eef1w9+8APl5ubqjDPO0IYNGyRJ7777buKjuffe\ne0+///3vNWXKFNXW1kqS+JACQDoxXgHmYGYWnnL66afr9NNP1xVXXCFJeuihh1ReXq6nnnpKgwYN\n0mOPPSZJKikp0VVXXaWcnByNGTNGeXl5amhosLN0ABmG8QowB2tm4Sl79uzRrFmztGnTJp1yyil2\nlwMAPWK8AszBMgN4xmuvvaZp06bpj3/8I78YADga4xVgHmZmAQAA4FrMzAIAAMC1CLMAAABwLcIs\nAAAAXIswCwAAANcizAIAAMC1CLMAAABwrf8DfECLppIMUyEAAAAASUVORK5CYII=\n",
"text/plain": "<matplotlib.figure.Figure at 0x12d316748>"
},
"metadata": {}
}
]
}
],
"metadata": {
"kernelspec": {
"name": "python3",
"display_name": "Python 3",
"language": "python"
},
"language_info": {
"codemirror_mode": {
"version": 3,
"name": "ipython"
},
"version": "3.5.1",
"name": "python",
"nbconvert_exporter": "python",
"mimetype": "text/x-python",
"file_extension": ".py",
"pygments_lexer": "ipython3"
},
"widgets": {
"version": "1.0.0",
"state": {}
},
"gist": {
"id": "",
"data": {
"description": "AGE Rates.ipynb",
"public": true
}
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment