Created
March 5, 2018 16:33
-
-
Save mariusae/18a62db9cc32d09dc691fd4f78dcdbfa to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"attachments": {}, | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Model Predictive Control for Closed-Loop Insulin Delivery\n", | |
"\n", | |
"**(Or: how I learned to stop worrying and replaced my daughter's pancreas with TensorFlow)**\n", | |
"\n", | |
"Marius Eriksen ([@marius](http://twitter.com/marius), [[email protected]](mailto:[email protected])), March 2018.\n", | |
"\n", | |
"People with Type-1 Diabetes do not have a functioning pancreas,\n", | |
"the organ responsible for regulating insulin levels in your body.\n", | |
"Insulin is a hormone that regulates the metabolism of glucose (and also fats and proteins);\n", | |
"it works by signaling, among others, fat and liver cells to absorb glucose.\n", | |
"Blood glucose needs to remain in a fairly narrow \"Goldilocks\" zone:\n", | |
"high levels of blood glucose can have severe long-term health consequences;\n", | |
"low levels of blood glucose can lead to unconsciousness or even death.\n", | |
"\n", | |
"Without a functioning pancreas,\n", | |
"people living with Type-1 Diabetes must assume its job.\n", | |
"Insulin must be provided when blood glucose is high \n", | |
"(it is usually injected subcutaneously with a syringe or an [insulin pump](https://www.medtronicdiabetes.com/treatments/insulin-pump-therapy)),\n", | |
"but not too much or blood glucose levels will go too low.\n", | |
"(If glucose levels do go low, fast-acting carbohydrates must be quickly consumed\n", | |
"to counteract the effects of the excess insulin.)\n", | |
"Typically, people with Type-1 Diabetes deliver insulin through an insulin pump or through subcutaneous injections.\n", | |
"\n", | |
"What's more,\n", | |
"whereas the pancreas can secrete insulin directly into the blood stream,\n", | |
"so that cells are signaled with little delay,\n", | |
"externally administered insulin takes much longer to reach its destination.\n", | |
"[FiASP](https://www.myfiasp.com/) is the fastest acting subcutaneously delivered insulin on the market today, \n", | |
"and while it enters the blood stream quite quickly,\n", | |
"its maximum effect on blood glucose is between 1 and 3 hours after injection.\n", | |
"This hints at yet another complication: the pharmacokinetics of insulin analogs like used to treat Type-1 Diabetes.\n", | |
"After a unit of insulin is delivered, it trickles into the blood stream over the course of many hours.\n", | |
"The following shows how the concentration of FiASP \n", | |
"evolves in blood for the first two hours after an injection.\n", | |
"\n", | |
"<img src=\"https://s3-us-west-2.amazonaws.com/tinyap/fiasp.png\" alt=\"FiASP pharmacokinetic curve\" style=\"width: 400px;\"/>\n", | |
"\n", | |
"Carbohydrates consumed in food, by the way, has its own kinetics.\n", | |
"Depending on the amount of carbohydrates and the food's glycaemic index,\n", | |
"a meal can take anywhere between an hour or six to fully digest:\n", | |
"the carbohydrates in the meal enter the blood stream over the same course of time.\n", | |
"\n", | |
"And these are far from the only factors that affect blood glucose!\n", | |
"Stress levels, exercise, diurnal rhythms, and illness \n", | |
"all have a significant effect on how your body metabolizes sugar,\n", | |
"or how your cells respond to insulin.\n", | |
"So too do imperfections in insulin manufacturing,\n", | |
"the site at which insulin is injected,\n", | |
"the temperature at which insulin is kept,\n", | |
"and even the mechanical design of an insulin pump.\n", | |
"\n", | |
"It's easy to see how Type-1 (T1D) diabetes is a therapy intense disorder.\n", | |
"People living with T1D must constantly adjust insulin delivery (or drink some juice),\n", | |
"depending on any of the above factors.\n", | |
"People with T1D must also anticipate meals \n", | |
"and estimate the amount of carbohydrates that they will eat.\n", | |
"Ideally, they inject insulin in good time before starting a meal\n", | |
"so that the insulin has time to enter the blood stream in sufficient\n", | |
"quantities.\n", | |
"(But don't wait too long, or your blood glucose will go too low!)\n", | |
"\n", | |
"Closed-loop insulin delivery systems, \n", | |
"or \"artificial pancreases\"\n", | |
"are designed to assume much of this burden.\n", | |
"Such systems automate insulin delivery \n", | |
"in order to maintain \"Goldilocks-zone\" blood glucose levels.\n", | |
"These systems read glucose levels from a\n", | |
"[continuous glucose monitor](https://www.dexcom.com/)\n", | |
"and make regular insulin deliveries through an [insulin pump](https://www.animas.com/diabetes-insulin-pump-and-bloog-glucose-meter/onetouch-ping-blood-glucose-monitor)\n", | |
"based on current and predicted glucose levels.\n", | |
"\n", | |
"We describe a model for predicting future blood glucose values,\n", | |
"and a technique for using this model to determine how much insulin should be delivered\n", | |
"to maintain a good blood glucose range.\n", | |
"\n", | |
"Our initial model will be quite simple,\n", | |
"but the framework we set up is flexible:\n", | |
"the model can be improved or even replaced later.\n", | |
"A follow-up notebook will explore some additional ideas\n", | |
"to improve the model." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# A simple model for predicting blood glucose\n", | |
"\n", | |
"Our first model is going to be a linear approximation of \n", | |
"[Bergman's minimal model](https://www.ncbi.nlm.nih.gov/pubmed/443421).\n", | |
"Bergman's is a compartmental model, which presents some difficulty in \n", | |
"parameter estimation (\"training\").\n", | |
"Instead, we're going to replace Bergman's insulin and glucose compartments\n", | |
"(i.e., the parts of the model that deal with the pharmacokinetics of insulin and glucose)\n", | |
"with commonplace approximations \n", | |
"(which are themselves models: later revisions of our model will incorporate these directly).\n", | |
"\n", | |
"We begin by assuming that the _change_ in blood glucose over a 5-minute period\n", | |
"is linearly related to \n", | |
"(1) the amount of insulin absorbed into blood; \n", | |
"(2) the amount of carbohydates that are absorbed into blood;\n", | |
"and (3) the amount of endogenous glucose production —\n", | |
"i.e., glucose that is secreted into the blood by your liver.\n", | |
"\n", | |
"We can write this as:\n", | |
"\n", | |
"$$\n", | |
"\\delta_t = c_e + c_C*C_t - c_I*I_t\n", | |
"$$\n", | |
"\n", | |
"where:\n", | |
"- $C_t$: the amount of carbohydates absorbed in period $t$;\n", | |
"- $I_t$: the amount of insulin absorbed in period $t$; and\n", | |
"- $c_e$: the amount of endogenous production (independent of $t$).\n", | |
"\n", | |
"It turns out that this model is _too simple_.\n", | |
"In order to compensate for this, \n", | |
"we observe that blood glucose typically moves consistently:\n", | |
"that is, $\\delta_t$, the change in blood glucose at time $t$ \n", | |
"is highly dependent on the change in blood glucose at time $t-1$, $\\delta_{t-1}$.\n", | |
"\n", | |
"So, we'll add this as another term in our model, i.e.:\n", | |
"\n", | |
"$$\n", | |
"\\delta_t = c_e + c_C*C_t - c_I*I_t + c_{\\delta}*\\delta_{t-1} \n", | |
"$$\n", | |
"\n", | |
"In order to make it simpler to computing with this model,\n", | |
"we sample all of our data at 5-minute intervals.\n", | |
"Every 5 minutes, we have a row of data that includes:\n", | |
"the amount of insulin delivered in the 5-minute period,\n", | |
"the blood glucose change in the 5-minute period,\n", | |
"the amount of carbohydrates delivered in the 5-minute period,\n", | |
"and so on.\n", | |
"\n", | |
"Thus when we talk about time,\n", | |
"we are talking about a single period, or row, of data.\n", | |
"\n", | |
"The coefficients ($c_e$, $c_C$, $c_I$, and $c_{\\delta}$)\n", | |
"are learned (as we'll see) by the model to weigh\n", | |
"the relative importance of the various inputs.\n", | |
"\n", | |
"This model is too simple to be useful in practice,\n", | |
"but it's a good starting point that we can build on." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Building the simple model" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Let's implement this model with actual code,\n", | |
"and see how it does.\n", | |
"\n", | |
"First, we import some Python packages that can read and clean up raw data\n", | |
"that comes from our artificial pancreas system (which already samples\n", | |
"data every 5 minutes).\n", | |
"We also import some other utilities." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"from IPython.display import HTML, display\n", | |
"import tabulate\n", | |
"\n", | |
"import numpy as np\n", | |
"import sys\n", | |
"sys.path.extend([\"/Users/marius/src/tinyap.org/model\"])\n", | |
"from tapmodel import data\n", | |
"import matplotlib.pyplot as plt\n", | |
"from matplotlib.dates import DateFormatter\n", | |
"import dateutil\n", | |
"tz = dateutil.tz.gettz('US/Pacific')" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We then read some recent data,\n", | |
"and sample a few rows to show what's there.\n", | |
"\n", | |
"The columns are:\n", | |
"\n", | |
"- `deltaipid`: pump-delivered insulin (mU/5m)\n", | |
"- `sgv`: sensor glucose value (mg/dL)\n", | |
"- `ubi`: user bolus input (externally administered insulin, as we often do with FiASP for meals) (mU/5m)\n", | |
"- `uciXS`, `uciS`, `uciM`, `uciL`: user carb input (entered carb values and their estimated \"t-shirt sized\" glycaemic index) (g/5m)\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style>\n", | |
" .dataframe thead tr:only-child th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: left;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>sgv</th>\n", | |
" <th>deltaipid</th>\n", | |
" <th>ubi</th>\n", | |
" <th>uciXS</th>\n", | |
" <th>uciS</th>\n", | |
" <th>uciM</th>\n", | |
" <th>uciL</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>time</th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>2018-02-10 17:50:00-08:00</th>\n", | |
" <td>87.0</td>\n", | |
" <td>325.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 17:55:00-08:00</th>\n", | |
" <td>87.0</td>\n", | |
" <td>112.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 18:00:00-08:00</th>\n", | |
" <td>104.0</td>\n", | |
" <td>113.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 18:05:00-08:00</th>\n", | |
" <td>108.0</td>\n", | |
" <td>150.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.5</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 18:10:00-08:00</th>\n", | |
" <td>107.0</td>\n", | |
" <td>150.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" sgv deltaipid ubi uciXS uciS uciM uciL\n", | |
"time \n", | |
"2018-02-10 17:50:00-08:00 87.0 325.0 0.0 0.0 0.0 0.0 0.0\n", | |
"2018-02-10 17:55:00-08:00 87.0 112.0 0.0 0.0 0.0 0.0 0.0\n", | |
"2018-02-10 18:00:00-08:00 104.0 113.0 0.0 0.0 0.0 0.0 0.0\n", | |
"2018-02-10 18:05:00-08:00 108.0 150.0 0.0 0.0 1.5 0.0 0.0\n", | |
"2018-02-10 18:10:00-08:00 107.0 150.0 0.0 0.0 0.0 0.0 0.0" | |
] | |
}, | |
"execution_count": 2, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"frame = data.read_raw_csv(\"/Users/marius/Documents/tinyAP/frame.2018-02-10.csv\", tz)\n", | |
"frame = frame[['sgv', 'deltaipid', 'ubi', 'uciXS', 'uciS', 'uciM', 'uciL']]\n", | |
"frame[np.isfinite(frame['sgv'])].tail(5)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"It's useful to look at glucose values as _deltas_:\n", | |
"i.e., the change in blood glucose over a 5-minute period.\n", | |
"In fact, this is what our model is going to be predicting.\n", | |
"We compute these and add them as new columns to the frame.\n", | |
"\n", | |
"We also compute a rolling mean of glucose changes;\n", | |
"this is used to smooth the effect of glucose changes." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"scrolled": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style>\n", | |
" .dataframe thead tr:only-child th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: left;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>sgv</th>\n", | |
" <th>deltaipid</th>\n", | |
" <th>ubi</th>\n", | |
" <th>uciXS</th>\n", | |
" <th>uciS</th>\n", | |
" <th>uciM</th>\n", | |
" <th>uciL</th>\n", | |
" <th>deltasgv</th>\n", | |
" <th>meandeltasgv</th>\n", | |
" <th>prevmeandeltasgv</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>time</th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>2018-02-10 17:50:00-08:00</th>\n", | |
" <td>87.0</td>\n", | |
" <td>325.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>-4.0</td>\n", | |
" <td>-1.75</td>\n", | |
" <td>-0.25</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 17:55:00-08:00</th>\n", | |
" <td>87.0</td>\n", | |
" <td>112.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>-1.50</td>\n", | |
" <td>-1.75</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 18:00:00-08:00</th>\n", | |
" <td>104.0</td>\n", | |
" <td>113.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>15.0</td>\n", | |
" <td>2.75</td>\n", | |
" <td>-1.50</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 18:05:00-08:00</th>\n", | |
" <td>108.0</td>\n", | |
" <td>150.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.5</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>4.0</td>\n", | |
" <td>3.75</td>\n", | |
" <td>2.75</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 18:10:00-08:00</th>\n", | |
" <td>107.0</td>\n", | |
" <td>150.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>-1.0</td>\n", | |
" <td>4.50</td>\n", | |
" <td>3.75</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" sgv deltaipid ubi uciXS uciS uciM uciL \\\n", | |
"time \n", | |
"2018-02-10 17:50:00-08:00 87.0 325.0 0.0 0.0 0.0 0.0 0.0 \n", | |
"2018-02-10 17:55:00-08:00 87.0 112.0 0.0 0.0 0.0 0.0 0.0 \n", | |
"2018-02-10 18:00:00-08:00 104.0 113.0 0.0 0.0 0.0 0.0 0.0 \n", | |
"2018-02-10 18:05:00-08:00 108.0 150.0 0.0 0.0 1.5 0.0 0.0 \n", | |
"2018-02-10 18:10:00-08:00 107.0 150.0 0.0 0.0 0.0 0.0 0.0 \n", | |
"\n", | |
" deltasgv meandeltasgv prevmeandeltasgv \n", | |
"time \n", | |
"2018-02-10 17:50:00-08:00 -4.0 -1.75 -0.25 \n", | |
"2018-02-10 17:55:00-08:00 0.0 -1.50 -1.75 \n", | |
"2018-02-10 18:00:00-08:00 15.0 2.75 -1.50 \n", | |
"2018-02-10 18:05:00-08:00 4.0 3.75 2.75 \n", | |
"2018-02-10 18:10:00-08:00 -1.0 4.50 3.75 " | |
] | |
}, | |
"execution_count": 3, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Maxdelta is the maximum allowable glucose delta.\n", | |
"# We clip deltas greater than maxdelta or smaller than -maxdelta.\n", | |
"maxdelta = 15\n", | |
"\n", | |
"frame['deltasgv'] = frame['sgv'] - frame['sgv'].shift(1)\n", | |
"frame['deltasgv'] = np.maximum(np.minimum(frame['deltasgv'], maxdelta), -maxdelta)\n", | |
"\n", | |
"frame['meandeltasgv'] = frame['deltasgv'].rolling(window=4, min_periods=1).mean()\n", | |
"frame['prevmeandeltasgv'] = frame['meandeltasgv'].shift(1)\n", | |
"frame[np.isfinite(frame['sgv'])].tail(5)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The model we proposed above is parameterized in terms of _active_ insulin and glucose, \n", | |
"so before we proceed we have to convert glucose and insulin deliveries \n", | |
"(e.g., at time $t$) into _active_ glucose and insulin values\n", | |
"(at times greater than $t$).\n", | |
"\n", | |
"This requires us to model the pharmacodynamics of insulin.\n", | |
"For the time being we'll use the model worked by [Dragan Maksimovic for Loop](https://github.com/ps2/LoopIOB/blob/master/ScalableExp.ipynb)\n", | |
"with some standard parameters;\n", | |
"we'll see later how we can learn its parameters from our data.\n", | |
"\n", | |
"Since our data contains two types of insulin deliveries\n", | |
"(pump deliveries are Humalog, externally administerd insulin is FiASP),\n", | |
"we'll use two different sets of parameters.\n", | |
"\n", | |
"Once we're done we have a new column, `ia`, in our frame\n", | |
"that computes insulin activity (insulin absorption per 5 minutes)\n", | |
"per our chosen pharmacodynamic model." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style>\n", | |
" .dataframe thead tr:only-child th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: left;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>sgv</th>\n", | |
" <th>deltaipid</th>\n", | |
" <th>ubi</th>\n", | |
" <th>uciXS</th>\n", | |
" <th>uciS</th>\n", | |
" <th>uciM</th>\n", | |
" <th>uciL</th>\n", | |
" <th>deltasgv</th>\n", | |
" <th>meandeltasgv</th>\n", | |
" <th>prevmeandeltasgv</th>\n", | |
" <th>ia</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>time</th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>2018-02-10 17:50:00-08:00</th>\n", | |
" <td>87.0</td>\n", | |
" <td>325.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>-4.0</td>\n", | |
" <td>-1.75</td>\n", | |
" <td>-0.25</td>\n", | |
" <td>41.021466</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 17:55:00-08:00</th>\n", | |
" <td>87.0</td>\n", | |
" <td>112.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>-1.50</td>\n", | |
" <td>-1.75</td>\n", | |
" <td>41.829164</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 18:00:00-08:00</th>\n", | |
" <td>104.0</td>\n", | |
" <td>113.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>15.0</td>\n", | |
" <td>2.75</td>\n", | |
" <td>-1.50</td>\n", | |
" <td>43.830791</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 18:05:00-08:00</th>\n", | |
" <td>108.0</td>\n", | |
" <td>150.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.5</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>4.0</td>\n", | |
" <td>3.75</td>\n", | |
" <td>2.75</td>\n", | |
" <td>46.031278</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 18:10:00-08:00</th>\n", | |
" <td>107.0</td>\n", | |
" <td>150.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>-1.0</td>\n", | |
" <td>4.50</td>\n", | |
" <td>3.75</td>\n", | |
" <td>48.693330</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" sgv deltaipid ubi uciXS uciS uciM uciL \\\n", | |
"time \n", | |
"2018-02-10 17:50:00-08:00 87.0 325.0 0.0 0.0 0.0 0.0 0.0 \n", | |
"2018-02-10 17:55:00-08:00 87.0 112.0 0.0 0.0 0.0 0.0 0.0 \n", | |
"2018-02-10 18:00:00-08:00 104.0 113.0 0.0 0.0 0.0 0.0 0.0 \n", | |
"2018-02-10 18:05:00-08:00 108.0 150.0 0.0 0.0 1.5 0.0 0.0 \n", | |
"2018-02-10 18:10:00-08:00 107.0 150.0 0.0 0.0 0.0 0.0 0.0 \n", | |
"\n", | |
" deltasgv meandeltasgv prevmeandeltasgv ia \n", | |
"time \n", | |
"2018-02-10 17:50:00-08:00 -4.0 -1.75 -0.25 41.021466 \n", | |
"2018-02-10 17:55:00-08:00 0.0 -1.50 -1.75 41.829164 \n", | |
"2018-02-10 18:00:00-08:00 15.0 2.75 -1.50 43.830791 \n", | |
"2018-02-10 18:05:00-08:00 4.0 3.75 2.75 46.031278 \n", | |
"2018-02-10 18:10:00-08:00 -1.0 4.50 3.75 48.693330 " | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"def expia(t, tp, td):\n", | |
" \"\"\"Exponential insulin curve, parameterized by peak and duration, \n", | |
" due to Dragan Maksimovic (@dm61).\n", | |
" Worked by Pete (@ps2) in the notebook\n", | |
" \thttps://github.com/ps2/LoopIOB/blob/master/ScalableExp.ipynb\n", | |
" Reworked here to be vectorized by numpy.\n", | |
" \"\"\"\n", | |
" tau = tp*(1-tp/td)/(1-2*tp/td)\n", | |
" a = 2*(tau/td)\n", | |
" S = 1/(1-a+(1+a)*np.exp(-td/tau))\n", | |
" return np.maximum(0., (S/np.power(tau,2))*t*(1-t/td)*np.exp(-t/tau))\n", | |
"\n", | |
"# W is the window of history that we consider. \n", | |
"# Our periods are 5 minutes, so 12*6 = 6 hours.\n", | |
"W = 12*6\n", | |
"Wtime = np.linspace(0., 1.*W, W, endpoint=False, dtype='float32')\n", | |
"humalog_coeffs = expia(Wtime, 13., 48.) # 1:05h peak, 4h duration\n", | |
"fiasp_coeffs = expia(Wtime, 7., 45.) # 35m peak, 3:45h duration\n", | |
"\n", | |
"# We flip them because we're going to be applying these to \"trailing\" data.\n", | |
"humalog_coeffs = np.flip(humalog_coeffs, 0)\n", | |
"fiasp_coeffs = np.flip(fiasp_coeffs, 0)\n", | |
"\n", | |
"# Ia indicates insulin activity. This is computed by adding up the \n", | |
"# contributions of each delivery over a rolling window. Conveniently,\n", | |
"# this is equivalent to taking the dot product of the deliveries in the\n", | |
"# window with the coefficients computed above.\n", | |
"frame['ia'] = frame['deltaipid'].rolling(window=W).apply(lambda pids: np.dot(pids, humalog_coeffs)) + \\\n", | |
" frame['ubi'].rolling(window=W).apply(lambda pids: np.dot(pids, fiasp_coeffs))\n", | |
"frame[np.isfinite(frame['sgv'])].tail(5)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Now we'll use the same technique to also compute carbohydrate absorption.\n", | |
"For this, we'll use the classic [Walsh curves](https://www.amazon.com/Pumping-Insulin-Everything-Need-Success/dp/1884804845).\n", | |
"We use a set of parameters for each glycaemic category: \n", | |
"these are added together to compute the aggregate carbohydrate absorption, `ca` (g/5m)." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style>\n", | |
" .dataframe thead tr:only-child th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: left;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>sgv</th>\n", | |
" <th>deltaipid</th>\n", | |
" <th>ubi</th>\n", | |
" <th>uciXS</th>\n", | |
" <th>uciS</th>\n", | |
" <th>uciM</th>\n", | |
" <th>uciL</th>\n", | |
" <th>deltasgv</th>\n", | |
" <th>meandeltasgv</th>\n", | |
" <th>prevmeandeltasgv</th>\n", | |
" <th>ia</th>\n", | |
" <th>ca</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>time</th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>2018-02-10 17:50:00-08:00</th>\n", | |
" <td>87.0</td>\n", | |
" <td>325.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>-4.0</td>\n", | |
" <td>-1.75</td>\n", | |
" <td>-0.25</td>\n", | |
" <td>41.021466</td>\n", | |
" <td>1.250</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 17:55:00-08:00</th>\n", | |
" <td>87.0</td>\n", | |
" <td>112.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>-1.50</td>\n", | |
" <td>-1.75</td>\n", | |
" <td>41.829164</td>\n", | |
" <td>1.375</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 18:00:00-08:00</th>\n", | |
" <td>104.0</td>\n", | |
" <td>113.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>15.0</td>\n", | |
" <td>2.75</td>\n", | |
" <td>-1.50</td>\n", | |
" <td>43.830791</td>\n", | |
" <td>1.500</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 18:05:00-08:00</th>\n", | |
" <td>108.0</td>\n", | |
" <td>150.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.5</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>4.0</td>\n", | |
" <td>3.75</td>\n", | |
" <td>2.75</td>\n", | |
" <td>46.031278</td>\n", | |
" <td>1.375</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 18:10:00-08:00</th>\n", | |
" <td>107.0</td>\n", | |
" <td>150.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>-1.0</td>\n", | |
" <td>4.50</td>\n", | |
" <td>3.75</td>\n", | |
" <td>48.693330</td>\n", | |
" <td>1.250</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" sgv deltaipid ubi uciXS uciS uciM uciL \\\n", | |
"time \n", | |
"2018-02-10 17:50:00-08:00 87.0 325.0 0.0 0.0 0.0 0.0 0.0 \n", | |
"2018-02-10 17:55:00-08:00 87.0 112.0 0.0 0.0 0.0 0.0 0.0 \n", | |
"2018-02-10 18:00:00-08:00 104.0 113.0 0.0 0.0 0.0 0.0 0.0 \n", | |
"2018-02-10 18:05:00-08:00 108.0 150.0 0.0 0.0 1.5 0.0 0.0 \n", | |
"2018-02-10 18:10:00-08:00 107.0 150.0 0.0 0.0 0.0 0.0 0.0 \n", | |
"\n", | |
" deltasgv meandeltasgv prevmeandeltasgv \\\n", | |
"time \n", | |
"2018-02-10 17:50:00-08:00 -4.0 -1.75 -0.25 \n", | |
"2018-02-10 17:55:00-08:00 0.0 -1.50 -1.75 \n", | |
"2018-02-10 18:00:00-08:00 15.0 2.75 -1.50 \n", | |
"2018-02-10 18:05:00-08:00 4.0 3.75 2.75 \n", | |
"2018-02-10 18:10:00-08:00 -1.0 4.50 3.75 \n", | |
"\n", | |
" ia ca \n", | |
"time \n", | |
"2018-02-10 17:50:00-08:00 41.021466 1.250 \n", | |
"2018-02-10 17:55:00-08:00 41.829164 1.375 \n", | |
"2018-02-10 18:00:00-08:00 43.830791 1.500 \n", | |
"2018-02-10 18:05:00-08:00 46.031278 1.375 \n", | |
"2018-02-10 18:10:00-08:00 48.693330 1.250 " | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"def walshca(t, tdel, tdur):\n", | |
" \"\"\"Walsh carb absorption curves with provided delays and duration.\"\"\"\n", | |
" return ((t >= tdel) & (t <= tdel+tdur/2)) * (4*(t-tdel)/np.square(tdur)) + \\\n", | |
" ((t > tdel+tdur/2) & (t <= tdel+tdur)) * (4/tdur * (1-(t-tdel)/tdur))\n", | |
"\n", | |
"# Carbohydrate parameters (delay, duration): XS, S, M, L.\n", | |
"carb_params = {\n", | |
" 'uciXS': (2., 6.),\n", | |
" 'uciS': (3., 12.), \n", | |
" 'uciM': (3., 24.),\n", | |
" 'uciL': (3., 36.),\n", | |
"}\n", | |
"carb_coeffs = {which: walshca(Wtime, tdel, tdur) for (which, (tdel, tdur)) in carb_params.items()}\n", | |
"carb_coeffs = {which: np.flip(coeffs, 0) for (which, coeffs) in carb_coeffs.items()}\n", | |
"\n", | |
"frame['ca'] = np.zeros(len(frame))\n", | |
"# Add up the contributions from each carbohydrate type.\n", | |
"for column, coeffs in carb_coeffs.items():\n", | |
" frame['ca'] += frame[column].rolling(window=W).apply(lambda ucis: np.dot(ucis, coeffs))\n", | |
"\n", | |
"frame[np.isfinite(frame['sgv'])].tail(5)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can now use [Tensorflow](https://www.tensorflow.org)\n", | |
"to define and fit a model to these data.\n", | |
"While Tensorflow is overkill here,\n", | |
"we'll use some of its more advanced features soon." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"import tensorflow as tf\n", | |
"import os\n", | |
"\n", | |
"# Quelch annoying Tensorflow warnings.\n", | |
"os.environ[\"TF_CPP_MIN_LOG_LEVEL\"] = \"2\"\n", | |
"\n", | |
"class model:\n", | |
" # The following are the columns we're using in our model.\n", | |
" # The use of 'None' here indicates that the value of the dimension\n", | |
" # is unknown until runtime. In our case, it's the number of samples\n", | |
" # that we run through each iteration.\n", | |
" car = tf.placeholder(tf.float32, [None, 1], name='car')\n", | |
" ia = tf.placeholder(tf.float32, [None, 1], name='ia')\n", | |
" prevdelta = tf.placeholder(tf.float32, [None, 1], name='prevdelta')\n", | |
"\n", | |
" # And the following are the (learned) parameters:\n", | |
" egp_effect = tf.Variable(0., name='egp_effect')\n", | |
" carb_coeff = tf.Variable(0., name='carb_coeff')\n", | |
" insulin_coeff = tf.Variable(0., name='insulin_coeff')\n", | |
" prevdelta_coeff = tf.Variable(0., name='delta_coeff')\n", | |
"\n", | |
" # Our model, as defined above:\n", | |
" predicted_delta = egp_effect + carb_coeff*car - insulin_coeff*ia + prevdelta_coeff*prevdelta" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Now we're ready to train: \n", | |
"we need to fit the coefficients (variables)\n", | |
"to values that best fit our observed data.\n", | |
"\n", | |
"We'll do this with one of the optimizers that are bundled with Tensorflow. \n", | |
"These perform [gradient descent](https://en.wikipedia.org/wiki/Gradient_descent) on a _loss function_\n", | |
"in order to find the values of the variables that minimize the loss.\n", | |
"We'll begin by using the standard [mean squared error](https://en.wikipedia.org/wiki/Mean_squared_error) loss function." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"actual_delta = tf.placeholder(tf.float32, [None, 1], name='delta')\n", | |
"# m is the batch size. We have to determine this dynamically\n", | |
"# since our input sizes may vary.\n", | |
"m = tf.cast(tf.shape(actual_delta)[0], tf.float32)\n", | |
"loss = tf.reduce_sum(tf.square(actual_delta - model.predicted_delta)) / (2*m)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Then we train the model using a gradient descent optimizer.\n", | |
"First we have to create a subset of our dataset that contain only defined values.\n", | |
"(We'll later apply other filters to the data as well,\n", | |
"to clean it up in various ways.)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style>\n", | |
" .dataframe thead tr:only-child th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: left;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>sgv</th>\n", | |
" <th>deltaipid</th>\n", | |
" <th>ubi</th>\n", | |
" <th>uciXS</th>\n", | |
" <th>uciS</th>\n", | |
" <th>uciM</th>\n", | |
" <th>uciL</th>\n", | |
" <th>deltasgv</th>\n", | |
" <th>meandeltasgv</th>\n", | |
" <th>prevmeandeltasgv</th>\n", | |
" <th>ia</th>\n", | |
" <th>ca</th>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>time</th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" <th></th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>2018-02-10 17:50:00-08:00</th>\n", | |
" <td>87.0</td>\n", | |
" <td>325.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>-4.0</td>\n", | |
" <td>-1.75</td>\n", | |
" <td>-0.25</td>\n", | |
" <td>41.021466</td>\n", | |
" <td>1.250</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 17:55:00-08:00</th>\n", | |
" <td>87.0</td>\n", | |
" <td>112.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>-1.50</td>\n", | |
" <td>-1.75</td>\n", | |
" <td>41.829164</td>\n", | |
" <td>1.375</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 18:00:00-08:00</th>\n", | |
" <td>104.0</td>\n", | |
" <td>113.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>15.0</td>\n", | |
" <td>2.75</td>\n", | |
" <td>-1.50</td>\n", | |
" <td>43.830791</td>\n", | |
" <td>1.500</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 18:05:00-08:00</th>\n", | |
" <td>108.0</td>\n", | |
" <td>150.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.5</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>4.0</td>\n", | |
" <td>3.75</td>\n", | |
" <td>2.75</td>\n", | |
" <td>46.031278</td>\n", | |
" <td>1.375</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2018-02-10 18:10:00-08:00</th>\n", | |
" <td>107.0</td>\n", | |
" <td>150.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>-1.0</td>\n", | |
" <td>4.50</td>\n", | |
" <td>3.75</td>\n", | |
" <td>48.693330</td>\n", | |
" <td>1.250</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" sgv deltaipid ubi uciXS uciS uciM uciL \\\n", | |
"time \n", | |
"2018-02-10 17:50:00-08:00 87.0 325.0 0.0 0.0 0.0 0.0 0.0 \n", | |
"2018-02-10 17:55:00-08:00 87.0 112.0 0.0 0.0 0.0 0.0 0.0 \n", | |
"2018-02-10 18:00:00-08:00 104.0 113.0 0.0 0.0 0.0 0.0 0.0 \n", | |
"2018-02-10 18:05:00-08:00 108.0 150.0 0.0 0.0 1.5 0.0 0.0 \n", | |
"2018-02-10 18:10:00-08:00 107.0 150.0 0.0 0.0 0.0 0.0 0.0 \n", | |
"\n", | |
" deltasgv meandeltasgv prevmeandeltasgv \\\n", | |
"time \n", | |
"2018-02-10 17:50:00-08:00 -4.0 -1.75 -0.25 \n", | |
"2018-02-10 17:55:00-08:00 0.0 -1.50 -1.75 \n", | |
"2018-02-10 18:00:00-08:00 15.0 2.75 -1.50 \n", | |
"2018-02-10 18:05:00-08:00 4.0 3.75 2.75 \n", | |
"2018-02-10 18:10:00-08:00 -1.0 4.50 3.75 \n", | |
"\n", | |
" ia ca \n", | |
"time \n", | |
"2018-02-10 17:50:00-08:00 41.021466 1.250 \n", | |
"2018-02-10 17:55:00-08:00 41.829164 1.375 \n", | |
"2018-02-10 18:00:00-08:00 43.830791 1.500 \n", | |
"2018-02-10 18:05:00-08:00 46.031278 1.375 \n", | |
"2018-02-10 18:10:00-08:00 48.693330 1.250 " | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"# Select all the rows that are defined for the columns we use in our model.\n", | |
"# Note that this can make our data frame noncontiguous, but that's ok since\n", | |
"# we've already computed the values (ca and ia) that depend on contiguous data.\n", | |
"rows = np.isfinite(frame['meandeltasgv']) \\\n", | |
" & np.isfinite(frame['prevmeandeltasgv']) \\\n", | |
" & np.isfinite(frame['ca']) \\\n", | |
" & np.isfinite(frame['ia'])\n", | |
"\n", | |
"filtered = frame[rows]\n", | |
"filtered.tail(5)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We now shuffle the data and split it into a training and test set.\n", | |
"The training set will be used to perform model training (parameter estimation);\n", | |
"the test set is used to measure the performance of the model.\n", | |
"We reserve 5% of the data (randomly) sampled for testing." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"shuffled = filtered.sample(frac=1)\n", | |
"n = int(len(shuffled)*0.95)\n", | |
"train, test = shuffled[:n], shuffled[n:]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"epoch 0 loss 2.4396934509277344\n", | |
"epoch 500 loss 1.7395167350769043\n", | |
"final loss: 1.7395408153533936\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<table>\n", | |
"<tbody>\n", | |
"<tr><td>EGP </td><td style=\"text-align: right;\">0.0722615 </td></tr>\n", | |
"<tr><td>Carb </td><td style=\"text-align: right;\">0.354891 </td></tr>\n", | |
"<tr><td>Insulin </td><td style=\"text-align: right;\">0.00393036</td></tr>\n", | |
"<tr><td>Prevdelta</td><td style=\"text-align: right;\">0.898145 </td></tr>\n", | |
"</tbody>\n", | |
"</table>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.HTML object>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"def train_feed_dict(batch):\n", | |
" \"\"\"Construct a data dictionary from a batch (a pandas frame).\"\"\"\n", | |
" return {\n", | |
" model.car: batch['ca'].values.reshape([-1, 1]),\n", | |
" model.ia: batch['ia'].values.reshape([-1, 1]),\n", | |
" model.prevdelta: batch['prevmeandeltasgv'].values.reshape([-1, 1]),\n", | |
" actual_delta: batch['meandeltasgv'].values.reshape([-1, 1]),\n", | |
" }\n", | |
"\n", | |
"# The number of epochs to run through. Each epoch sees the entirety\n", | |
"# of the (training) data set.\n", | |
"nepoch = 1000\n", | |
"learning_step = tf.train.AdagradOptimizer(1.0).minimize(loss)\n", | |
"\n", | |
"# batch_size is the number of samples we run through each mini-batch\n", | |
"# when training.\n", | |
"batch_size = 5000\n", | |
"\n", | |
"nbatch = int(len(train)/batch_size)\n", | |
"if nbatch < 1:\n", | |
" raise ValueError('not enough data')\n", | |
"\n", | |
"feed_dicts = []\n", | |
"for i in range(nbatch):\n", | |
" batch = train[i*batch_size:(i+1)*batch_size]\n", | |
" feed_dicts.append(train_feed_dict(batch))\n", | |
"\n", | |
"test_feed_dict = train_feed_dict(test)\n", | |
"\n", | |
"# Tensorflow needs a session within which to run our \n", | |
"# computation graphs.\n", | |
"sess = tf.InteractiveSession()\n", | |
"\n", | |
"sess.run(tf.global_variables_initializer())\n", | |
"for e in range(nepoch):\n", | |
" for i in range(nbatch):\n", | |
" sess.run(learning_step, feed_dict=feed_dicts[i])\n", | |
" # Print the loss periodically so we can monitor progress.\n", | |
" if e%500 == 0:\n", | |
" est_loss = sess.run(loss, test_feed_dict)\n", | |
" print('epoch {} loss {}'.format(e, est_loss))\n", | |
"\n", | |
"est_loss = sess.run(loss, test_feed_dict)\n", | |
"print('final loss: {}'.format(est_loss))\n", | |
"est_egp_effect, est_carb_coeff, est_insulin_coeff, est_prevdelta_coeff = \\\n", | |
" sess.run([model.egp_effect, model.carb_coeff, model.insulin_coeff, model.prevdelta_coeff])\n", | |
"tab = [\n", | |
" [\"EGP\", est_egp_effect],\n", | |
" [\"Carb\", est_carb_coeff],\n", | |
" [\"Insulin\", est_insulin_coeff], \n", | |
" [\"Prevdelta\", est_prevdelta_coeff],\n", | |
"]\n", | |
"display(HTML(tabulate.tabulate(tab, tablefmt='html')))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"collapsed": true | |
}, | |
"source": [ | |
"We can interpret our estimated coeffients as follows: \n", | |
"\n", | |
"1. The EGP and insulin coefficients can give a _basal rate_.\n", | |
"2. The carb and insulin coefficients can give a _carb ratio_.\n", | |
"3. Prevdelta as the amount which blood glucose tends to move in the direction it's already moving.\n", | |
" Since this is generally true, you can also think of this as glucose changes that probably should\n", | |
" be explained by something that isn't modeled explicitly in the model.\n", | |
"\n", | |
"The estimated loss of $1.7$ is the mean squared error we expect from our model.\n", | |
"In our case, this means that the mean square of the error in our predictions is $1.7$ every five minutes." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Predicting future blood glucose values" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Now we can use our model to visualize how it fares in a real-world scenario\n", | |
"by feeding the model past data (insulin and carb history for the last 6 hours),\n", | |
"and then asking for its prediction.\n", | |
"\n", | |
"It's not terribly meaningful to infer _too_ far into the future,\n", | |
"since this prediction doesn't account for _future_ carb or insulin deliveries\n", | |
"(including what the AP controller will deliver; more on this soon)." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"def plot_glucose(time, actual, predicted):\n", | |
" \"\"\"Plot actual vs. predicted glucose.\"\"\"\n", | |
" fig = plt.figure()\n", | |
" ax = fig.add_subplot(1, 1, 1)\n", | |
" ax.set_ylabel('blood glucose (mg/dL)')\n", | |
" ax.set_xlabel('time')\n", | |
" ax.plot(time, actual, label='actual')\n", | |
" ax.plot(time, predicted, label='predicted')\n", | |
" ax.xaxis.set_major_locator(plt.MaxNLocator(10))\n", | |
" fmt = DateFormatter('%H:%M', tz=tz)\n", | |
" ax.xaxis.set_major_formatter(fmt)\n", | |
" plt.legend()\n", | |
" plt.show()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Predicting a single time step\n", | |
"\n", | |
"The following illustrates how our model performs \n", | |
"when predicting a single time step: the next glucose delta.\n", | |
"\n", | |
"As expected, it's generally pretty good at this.\n", | |
"We can see that it follows the trends quite well,\n", | |
"though it may miss some of the \"spikyness\" of the actual data. \n", | |
"(This isn't a big problem in practice.)\n", | |
"\n", | |
"The first plot shows the _deltas_ predicted directly,\n", | |
"the second shows these deltas accumulated over a 3 hour period\n", | |
"(and thus errors are also accumulated).\n", | |
"Again, this isn't necessarily a super meaningful way to visualize\n", | |
"how the model is doing, \n", | |
"but it gives you a good idea of cumulative error.\n", | |
"\n", | |
"You'll also note that the timeframe chosen was during the night time,\n", | |
"which is easier for any model:\n", | |
"it is a more controlled environment as\n", | |
"there is (usually) little to no carbohydrate activity,\n", | |
"and also little physical activity." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\nAcoAAAAASUVORK5CYII=\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x110afb588>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"testframe = frame[(frame.index >= '2018-02-06 00:00 PST') & (frame.index <= '2018-02-06 03:00 PST')]\n", | |
"predicted_deltas = sess.run(model.predicted_delta, feed_dict=train_feed_dict(testframe))\n", | |
"plot_glucose(testframe.index, testframe.deltasgv, predicted_deltas)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": { | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x1117fe518>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"predicted_sgvs = testframe.iloc[0].sgv + np.cumsum(predicted_deltas)\n", | |
"plot_glucose(testframe.index, testframe.sgv, predicted_sgvs)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can also see how the model performs if we ask if to infer 3 hours in the future.\n", | |
"This is not a meaningful thing to do in this context,\n", | |
"as it does not account for insulin (or carb) deliveries\n", | |
"during this time period,\n", | |
"but it's nevertheless a fun visualization." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": { | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x11188b630>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"def feed_dict_row_delta(row, prevdelta):\n", | |
" \"\"\"Construct a data dictionary for inference \n", | |
" from a single row and a prevdelta.\"\"\"\n", | |
" return {\n", | |
" model.car: np.array([row['ca']]).reshape([-1, 1]),\n", | |
" model.ia: np.array([row['ia']]).reshape([-1, 1]),\n", | |
" model.prevdelta: np.array([prevdelta]).reshape([-1, 1]),\n", | |
" }\n", | |
"\n", | |
"predicted_deltas = np.zeros(len(testframe))\n", | |
"for i in range(len(testframe)):\n", | |
" row = testframe.iloc[i]\n", | |
" if i == 0:\n", | |
" # Start off with the initial mean delta.\n", | |
" prevdelta = row['prevmeandeltasgv']\n", | |
" else:\n", | |
" prevdelta = predicted_deltas[i-1]\n", | |
" predicted_deltas[i] = \\\n", | |
" sess.run(model.predicted_delta, feed_dict=feed_dict_row_delta(row, prevdelta))\n", | |
"predicted_sgvs = testframe.iloc[0].sgv + np.cumsum(predicted_deltas)\n", | |
"plot_glucose(testframe.index, testframe.sgv, predicted_sgvs)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Visualizing the model by synthesizing scenarios" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Another useful \"sanity check\" on our model is \n", | |
"to see how it responds to certain common scenarios.\n", | |
"We have certain ideas for how your body should respond\n", | |
"to, say, eating carbohydrates without insulin,\n", | |
"or giving a correction bolus.\n", | |
"\n", | |
"The following sets up code to synthesize (future) events,\n", | |
"and then visualize the model's predictions for\n", | |
"how the body responds to these events." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": { | |
"scrolled": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\nTbxvqt0AAAAASUVORK5CYII=\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x1118b1358>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x1119d4b70>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x11175d550>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x11175d780>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"from numpy.lib.stride_tricks import as_strided\n", | |
"\n", | |
"def rolldot(events, coeffs, w=W):\n", | |
" \"\"\"Helper function to compute a rolling dot-product,\n", | |
" used to compute current insulin and carbohydrate activity\n", | |
" according to our curves.\"\"\"\n", | |
" events = np.append(np.zeros(w), events)\n", | |
" stride, = events.strides\n", | |
" strides = as_strided(events, shape=[len(events) - w + 1, w], strides=[stride, stride])\n", | |
" strides = strides[1:]\n", | |
" return np.dot(strides, coeffs)\n", | |
"\n", | |
"def feed_dict_synthetic(carbs, boluses, prevdelta):\n", | |
" \"\"\"Construct a data dictionary with the \n", | |
" provided carb and bolus events. The returned\n", | |
" feed dict contains only the last entry.\"\"\"\n", | |
" return {\n", | |
" model.car: rolldot(carbs, carb_coeffs['uciM'])[-1].reshape([1, 1]),\n", | |
" model.ia: rolldot(boluses, humalog_coeffs)[-1].reshape([-1, 1]),\n", | |
" model.prevdelta: np.array([prevdelta]).reshape([-1, 1]),\n", | |
" }\n", | |
"\n", | |
"def predict_glucose(carbs, boluses, npad=12*3):\n", | |
" \"\"\"Infers future glucose values based on the provided\n", | |
" carbohydrate and bolus (insulin) events.\"\"\"\n", | |
" pad = np.zeros(npad)\n", | |
" carbs = np.append(carbs, pad)\n", | |
" boluses = np.append(boluses, pad)\n", | |
" prevdelta = 0\n", | |
" deltas = np.zeros(len(carbs))\n", | |
" for i in range(len(carbs)):\n", | |
" prevdelta = sess.run(\n", | |
" model.predicted_delta,\n", | |
" feed_dict=feed_dict_synthetic(carbs[:i+1], boluses[:i+1], prevdelta),\n", | |
" )\n", | |
" deltas[i] = prevdelta\n", | |
" return np.cumsum(deltas)\n", | |
"\n", | |
"def plot_predict_glucose(title, events):\n", | |
" \"\"\"Plot the model's glucose predictions given \n", | |
" a set of events.\"\"\"\n", | |
" maxtime = 0\n", | |
" for (time, _, _) in events:\n", | |
" if time > maxtime:\n", | |
" maxtime = time\n", | |
" carbs, boluses = np.zeros(maxtime+1), np.zeros(maxtime+1)\n", | |
" for (time, event, v) in events:\n", | |
" if event == 'C':\n", | |
" carbs[time] = v\n", | |
" elif event == 'B':\n", | |
" boluses[time] = v\n", | |
" else:\n", | |
" raise Exception(\"unknown event type\")\n", | |
" glucose = predict_glucose(carbs, boluses)\n", | |
" n = len(glucose)\n", | |
" time = np.linspace(0., 5.*n, n, endpoint=False)\n", | |
" fig = plt.figure()\n", | |
" ax = fig.add_subplot(1, 1, 1)\n", | |
" ax.set_ylabel('change in blood glucose (mg/dL)')\n", | |
" ax.set_xlabel('time (m)')\n", | |
" ax.set_title(title)\n", | |
" ax.plot(time, glucose)\n", | |
" plt.show()\n", | |
"\n", | |
"plot_predict_glucose('prebolus for food', [(0, 'B', 100), (4, 'B', 2000), (6, 'C', 20)])\n", | |
"plot_predict_glucose('do nothing', [])\n", | |
"plot_predict_glucose('give big bolus', [(0, 'B', 2000)])\n", | |
"plot_predict_glucose('eat carbs then bolus later', [(0, 'C', 10), (4, 'B', 1000)])" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"As we can see,\n", | |
"our simple model follows intuition:\n", | |
"\n", | |
"- when we pre-bolus for food, glucose dips a little before rising\n", | |
" and settling at a slightly higher level;\n", | |
"- if we do nothing (i.e., no insulin delivery, no carb delivery),\n", | |
" endogenous glucose production ensures that glucose levels steadily\n", | |
" rise;\n", | |
"- if we give a big bolus, glucose levels drop significantly;\n", | |
"- if we eat carbs before bolusing, glucose levels rise and then level off." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"collapsed": true | |
}, | |
"source": [ | |
"# Creating an insulin delivery schedule\n", | |
"\n", | |
"We are now ready to use our blood glucose model to create an insulin delivery controller.\n", | |
"The controller should use the predictions given by the glucose model \n", | |
"to learn a _schedule_ of insulin deliveries that \n", | |
"maximizes the amount of time where glucose is in range (near the setpoint).\n", | |
"\n", | |
"Here's how it's going to work:\n", | |
"given the last 6 hours of insulin and carb deliveries, \n", | |
"we use our model to predict the next 6 hours.\n", | |
"While the previous 6 hours of insulin delivery are fixed immutable,\n", | |
"we can _train_ the schedule for the next 6 hours.\n", | |
"We use a loss function that minimizes the (squared) distance from our desired setpoint." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"def roll_indices(n):\n", | |
" m = np.zeros([n, n], dtype=int)\n", | |
" for i in range(0, n):\n", | |
" m[i, :] = np.arange(i, i+n, dtype=int)\n", | |
" return m\n", | |
"\n", | |
"# rolled is a W-by-W matrix of indices used to construct\n", | |
"# lookback windows for carb and insulin curves.\n", | |
"# These cannot be computed outside of Tensorflow anymore because they \n", | |
"# are part of the computation that is involved in optimization.\n", | |
"rolled = roll_indices(W)\n", | |
"\n", | |
"class schedule:\n", | |
" # future_dpids is the next 6 hours of insulin deliveries, as learned\n", | |
" # by the schedule model.\n", | |
" future_dpids = tf.Variable(tf.zeros([W, 1]), name='future_dpids')\n", | |
" \n", | |
" # These are placeholders used to feed the glucose model.\n", | |
" past_dpids = tf.placeholder(tf.float32, [W, 1], name='past_dpids')\n", | |
" past_ucis = tf.placeholder(tf.float32, [W, 1], name='past_ucis')\n", | |
" \n", | |
" # Last_delta is used to initialize the pdgsv factor from the glucose model.\n", | |
" last_delta = tf.placeholder(tf.float32, [1], name='last_delta')\n", | |
" # Deviation is the deviation from the desired setpoint: i.e., the amount \n", | |
" # (up or down) glucose should move and settle to, relative to the starting\n", | |
" # point.\n", | |
" deviation = tf.placeholder(tf.float32, [], name='deviation')\n", | |
" \n", | |
" dpids = tf.gather(\n", | |
" tf.reshape(tf.concat([past_dpids, future_dpids], 0), [-1]), \n", | |
" rolled,\n", | |
" )\n", | |
" ucis = tf.gather(\n", | |
" tf.reshape(tf.concat([past_ucis, tf.zeros([W, 1])], 0), [-1]),\n", | |
" rolled,\n", | |
" )\n", | |
" ia = tf.matmul(dpids, humalog_coeffs.reshape([-1, 1]))\n", | |
" car = tf.matmul(ucis, carb_coeffs['uciM'].reshape([-1, 1]))\n", | |
" \n", | |
" egp_effect = model.egp_effect\n", | |
" carb_effect = car*model.carb_coeff\n", | |
" insulin_effect = ia*model.insulin_coeff\n", | |
" \n", | |
" # Delta contains the predicted deltas, sans the prevdelta term.\n", | |
" # Since prevdelta uses the previous SGV delta, we must use the \n", | |
" # predictions yielded by the model itself to compute this term\n", | |
" # for future data points. We do this by scanning over the tensor\n", | |
" # of deltas, accumulating contributions.\n", | |
" delta = egp_effect + carb_effect - insulin_effect\n", | |
" delta = tf.scan(lambda a, x: a*model.prevdelta_coeff+x, delta, last_delta)\n", | |
" cumdelta = tf.scan(lambda a, x: a + x, delta)\n", | |
" \n", | |
" # Define a loss function. This is the function we will optimize.\n", | |
" # Negative insulin deliveries are not permitted (they are not physically\n", | |
" # possible—it would be nice if they were!), and so we must penalize\n", | |
" # these heavily so that the model does not find schedules that would\n", | |
" # subtract insulin. (Interestingly, if it could, it could almost always\n", | |
" # correct positive deviations immediately, since it could give a large \n", | |
" # amount of insulin and then cut the tail.)\n", | |
" scaleneg = 100000.\n", | |
" loss = tf.reduce_sum(tf.pow(deviation+cumdelta, 2))/(2*W) \\\n", | |
" - scaleneg*tf.minimum(tf.reduce_min(future_dpids), 0)\n", | |
" \n", | |
" optimizer = tf.train.GradientDescentOptimizer(5.0)\n", | |
" grads, v = zip(*optimizer.compute_gradients(loss, [future_dpids]))\n", | |
" grads, _ = tf.clip_by_global_norm(grads, 1.)\n", | |
" #assert len(grads) == 1\n", | |
" #grads = [tf.clip_by_value(grads[0], -1., 1.)]\n", | |
" learning_step = optimizer.apply_gradients(zip(grads, v))\n", | |
" \n", | |
" clip = future_dpids.assign(tf.maximum(future_dpids, 0.))\n", | |
" \n", | |
" sess.run(future_dpids.initializer)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"With a scheduling model in hand,\n", | |
"we can go through the same exercise as above:\n", | |
"synthesize a scenario, and see what insulin delivery schedule is learned.\n", | |
"The big difference here is that the glucose values reflect how the model\n", | |
"believes glucose is going to respond not just to recent history but to the\n", | |
"insulin schedule that's been learned by the model itself.\n", | |
"\n", | |
"We'll plot several scenarios: \n", | |
"each includes both the predicted glucose schedule \n", | |
"as well as the learned insulin delivery schedule." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"/usr/local/var/pyenv/versions/3.6.1/lib/python3.6/site-packages/matplotlib/axes/_axes.py:545: UserWarning: No labelled objects found. Use label='...' kwarg on individual plots.\n", | |
" warnings.warn(\"No labelled objects found. \"\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "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\ndpfqrRL+ZAAAAABJRU5ErkJggg==\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x1118a7048>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"image/png": "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\nWgp/mvr3AAAAAElFTkSuQmCC\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x111a0d860>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"image/png": "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\nQmCC\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x1119e2630>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
}, | |
{ | |
"data": { | |
"image/png": "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\nvojYYdzEso8fIXmdAnyI1BLkXuA5oA1YDBxGGpT3MxHx3FgvPlFqLXl19w2wbG0Xf1jTxZOr0/tT\nawrvW9jSN7Dd/jM7mtlzt3b2mtXOnru1sWBmOwt2a2P+jDb2mNHG7jNa6WjZNb6MI4ItfQOs3tTL\nms29rOnqZfWmXlZvSqXN5zb1sGpTL6s29rBqUw+rN/cyUKKk19HSyLzpreyek9nu09N93H16G7tP\nb936eVZHs0tzNmXWb+lj6arNLFm5iSXPbeJ3+f3J1V1b/x83NohFczr4owUz+KMFMzhoj+kcuMd0\n9prZPuH/V6ucvD4DLGXH9hRlNZUfdWBeSYuBl5N6P28hzeVye0RsGfHAcZJ0IvBl0niK34iIC4bb\nd6qT1+Bg8NymHpatTcnoDzkx/WFNF39Y3cWKDd3b7d/R0sg+szvYe3YH+8zuYOGsdvaelZb3mtXu\nUsI4DObnfqs29fLcxh5WbuzO7z1bl1duTNWtpUq0zY1KJbcZbcwvSmrFCW73Ga3M6WylscFJzka3\nfksfT67evPUP16WrNrN09WaeWLWZVZu29cFtahCL5nay/7xOFu8+ncXzp3HgHtPZd24nrU2NUxJr\nlZPXEyVWR0SU1VS+rFHlp1qeO+Y3pInPlgG/At463CgfE5m8uvsG0l/8m3t5dkN65lR4/vT0+m3V\ne70D21dtzZ/Ryt6zOthnTgfPm93JPnPa2Wd2B/vM7mTutBb/dV8DtvQObE1mKzdsS2zPbsgJL69b\n29W3w7ENgjnTUklu91ySK66mnFeoypzuZ3M7s4hgw5Z+lq/bwvJ1W3h63Zatf8Q+tTbVsGzo3v6P\npHnTW9l3bif7ze1k3/zaf/dp7DO7g+bGcsdGnxy1NKp8pWo1eb0UOD8iTsjL5wJExGdL7T/e5PXA\nsnX87bfvZc3mXrp6B3bY3qD0H3CP3dpZOKudhTPT+16z2tlndicLZ7XT1jw1fynZ5OvpH9haelu5\noYfnSiS85zYOX2XZ3tzI3OktzJ3WmluEFT63MHtaK3M7W5hdeG7Z0UJTlb/ALOnpH2DVpvRHa+Hf\n+tkN3axY38OKDVt4Zn03z67vZvOQ74jWpoZUm1JUq/K8OZ0smptqWmq5yr8ayUvSKyLi5yNsnwHs\nExEPjXSeWr2rewFPFS0vA7ab4yX3zj4boKWlZVwXm9XRwosXzc6NILa9dp/eyh67tTFvWqu/YHYh\n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\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x112364710>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"def schedule_insulin(ucis, dpids, deviation, niter=500, display_loss=False):\n", | |
" \"\"\"Create a 6-hour insulin schedule based on the past carb and insulin inputs,\n", | |
" correcting for the provided deviation.\"\"\"\n", | |
" # Reset the future DPIDS back to their initial value.\n", | |
" sess.run(schedule.future_dpids.assign(np.zeros([W, 1])))\n", | |
" # Extend history to go W in the past.\n", | |
" feed_dict = {\n", | |
" schedule.past_ucis: ucis.reshape([-1, 1]),\n", | |
" schedule.past_dpids: dpids.reshape([-1, 1]),\n", | |
" schedule.last_delta: np.array([0.]).reshape([1]),\n", | |
" schedule.deviation: deviation,\n", | |
" }\n", | |
" # Learn the insulin delivery schedule.\n", | |
" for i in range(niter):\n", | |
" sess.run(schedule.learning_step, feed_dict=feed_dict)\n", | |
" if display_loss and i%100 == 0:\n", | |
" loss = sess.run(schedule.loss, feed_dict=feed_dict)\n", | |
" print(\"iter {} loss {}\".format(i, loss))\n", | |
" dpids, cumdelta = sess.run([schedule.future_dpids, schedule.cumdelta], feed_dict=feed_dict)\n", | |
" return dpids, cumdelta\n", | |
"\n", | |
"def plot_schedule_insulin(title, deviation, events):\n", | |
" \"\"\"Plot the learned insulin schedule given the provided deviation and\n", | |
" past events.\"\"\"\n", | |
" ucis, dpids = np.zeros(W), np.zeros(W)\n", | |
" for (time, event, v) in events:\n", | |
" if time >= 0:\n", | |
" raise Exception(\"bad time\")\n", | |
" if event == 'C':\n", | |
" ucis[time] = v\n", | |
" elif event == 'B':\n", | |
" dpids[time] = v\n", | |
" else:\n", | |
" raise Exception(\"unknown event type\")\n", | |
"\n", | |
" dpids, cumdelta = schedule_insulin(ucis, dpids, deviation)\n", | |
" n = len(dpids)\n", | |
" time = np.linspace(0., 5.*n, n, endpoint=False)\n", | |
" fig, ax1 = plt.subplots()\n", | |
" ax2 = ax1.twinx()\n", | |
" ax1.plot(time, deviation+cumdelta)\n", | |
" ax1.set_title(title)\n", | |
" ax2.bar(time, dpids, width=5)\n", | |
" ax1.set_xlabel(\"minutes\")\n", | |
" ax1.set_ylabel(\"deviation (mg/dL) \")\n", | |
" ax1.set_ylim([-40, 40])\n", | |
" ax2.set_ylabel(\"delivery (mU/5m)\")\n", | |
" ax2.set_ylim([0, 500])\n", | |
" ax1.legend()\n", | |
" plt.show()\n", | |
"\n", | |
"plot_schedule_insulin('hold steady', 0, [])\n", | |
"plot_schedule_insulin('correct deviation of 30', 30, [])\n", | |
"plot_schedule_insulin('correct deviation of -30', -30, [])\n", | |
"plot_schedule_insulin('hold steady after bolus', 0, [(-1, 'B', 400)])" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"collapsed": true | |
}, | |
"source": [ | |
"We can see here that the scheduling model is able to \n", | |
"learn a schedule that minimizes deviation from our desired setpoint (0 on the y axis).\n", | |
"Since the model minimizes the mean-squared-error,\n", | |
"this means that it also takes into account cumulative effects.\n", | |
"For example, in the second scenario, the learned insulin schedule\n", | |
"frontloads most of the insulin (and, presumably, withholds delivery later)\n", | |
"in order to quickly bring the blood glucose down to the setpoint.\n", | |
"Thus, the traditional distinction between \"basal\" and \"bolus\" insulin deliveries is gone:\n", | |
"the model simply delivers insulin that maximizes the amount \n", | |
"of time spent near the desired setpoint.\n", | |
"\n", | |
"A closed-loop insulin delivery system computes a schedule at regular intervals\n", | |
"in order to account for new inputs (insulin delivered, carbs consumed) and for \n", | |
"unexplained deviations in the model \n", | |
"(i.e., where the actual deviations differ from the expected ones).\n", | |
"The system then delivers insulin according to the schedule." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# Epilogue\n", | |
"\n", | |
"In this notebook,\n", | |
"we have derived a (very) simple model for blood glucose,\n", | |
"and shown how to make use of this model in an insulin controller,\n", | |
"such as may be used by a closed-loop insulin delivery system.\n", | |
"\n", | |
"At a very high level,\n", | |
"this is the strategy that is used in [tinyAP](https://github.com/tinyap),\n", | |
"but reality demands a much more complicated model,\n", | |
"to account for time-related effects, glucose-related effects,\n", | |
"and other nonlinearities.\n", | |
"\n", | |
"The framework set up here is a flexible one:\n", | |
"any modelled effect is automatically accounted for when computing insulin deliveries.\n", | |
"For example, if we make EGP a function of time (as is done in the model used by tinyAP),\n", | |
"time is automatically accounted for:\n", | |
"if, in an hour, the estimated EGP increases or decreases, \n", | |
"the learned schedule will anticipate this in good time and deliver (or withhold) insulin \n", | |
"so that the desired setpoint is maintained.\n", | |
"This, of course, is similar to a traditional \"basal schedule\",\n", | |
"but with a key difference:\n", | |
"Basal schedules are _delivery schedules_, that is, \n", | |
"they specify the rate of insulin to be delivered at specific times,\n", | |
"in anticipation of increased (or decreased) insulin needs in the future.\n", | |
"With model predictive control, we instead model EGP and other effects directly;\n", | |
"the insulin scheduler learns a _delivery schedule_ based instead on the directly modelled effects.\n", | |
"\n", | |
"Another advantage of this approach is its composability. \n", | |
"Because we have a general framework for relating inputs\n", | |
"(insulin, carbohydrates, time, glucose levels, etc.) \n", | |
"to predicted blood glucose,\n", | |
"improving the model (in the sense that it accounts for more of the observed glucose level variance)\n", | |
"automatically improves the AP's performance.\n", | |
"As an example, the model used by tinyAP includes parameters for both\n", | |
"time (to account for different insulin sensitivies and endogenous glucose production rates throughout the day) \n", | |
"and glucose levels (to account for observed effects of increased insulin resistance at higher glucose levels, presumably due to hepatic activity).\n", | |
"In order to account for these observed effects, \n", | |
"only the model itself was modified;\n", | |
"the rest of the system remained unchanged.\n", | |
"\n", | |
"In the next installment,\n", | |
"we'll build on the simple model here to account for some of the aforementioned effects." | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.6.1" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi Marius,
Great work. Have you considered integration with Nightscout?
Can you share the advance model?
Best,
Mario (a T1D dad)