主要内容

但血糖-胰岛素响应模拟

这个例子展示了如何模拟和分析模型在SimBiology®使用生理基础但血糖-胰岛素系统在正常和糖尿病模型的人类。

这个例子需要统计和机器学习工具箱™和优化工具箱™。

引用

  1. 餐但血糖-胰岛素系统的仿真模型。c . Dalla男人R.A. Rizza, Cobelli。IEEE生物医学工程(2007)54 (10),1740 - 1749。

  2. 口服葡萄糖吸收的系统模型:对黄金标准数据验证。c . Dalla男人,m·卡米尔和c Cobelli。IEEE生物医学工程(2006)53 (12),2472 - 2478。

的目标是

  • 实现一个SimBiology但血糖-胰岛素响应模型。

  • 但血糖-胰岛素反应模拟一个或多个餐正常和受损(糖尿病)科目。

  • 执行参数估计使用sbiofit强制函数策略。

背景

在2007年出版,Dalla男子等人开发一个人类饭后glucose-insulin响应模型。该模型利用常微分方程描述的动态系统。但血糖-胰岛素反应作者使用他们的模型来模拟一个或多个餐后,对正常人体和人体胰岛素的各种障碍。障碍被表示为替代组参数值和初始条件。

我们实现了SimBiology模型,m1由:

  • 翻译模型方程Dalla et al。(2007)反应,规则,和事件。

  • 组织模型转换为两个隔间,一个用于含有葡萄糖相关物种和反应(命名葡萄糖的外表),一个用于insulin-related物种和反应(命名胰岛素分泌)。

  • 使用参数值和初始条件的模型方程,从表1和图1。

  • 包括胃排空率的方程提出了Dalla et al。(2006)。

  • 设置所有物种的单位、隔间和参数所指定的Dalla男人et al。(2007),它允许使用单位转换SimBiology模型模拟。(注意,SimBiology还支持通过设置他们的无量纲金宝app参数的使用ValueUnits财产无量纲的)。

  • 设置配置设置TimeUnits小时,因为在7或24小时进行了模拟。

  • 使用1公斤体重改变物种的基础和参数规范化的体重在原始模型。这样做使物种单位在数量或浓度,根据SimBiology。

我们代表了胰岛素缺陷SimBiology对象模型变体使用以下名称:

  • 2型糖尿病

  • 低胰岛素敏感性

  • 高β细胞反应性

  • 低β细胞反应性

  • 高胰岛素敏感性

我们代表了餐SimBiology模型剂量对象:

  • 一个剂量名叫一顿简单的饭菜代表一个单一的一餐78克葡萄糖的一个模拟世界中。

  • 一个剂量名叫日常生活代表一天的饭菜,相对于模拟开始在午夜:早餐是45克葡萄糖在8小时的模拟时间(上午8点),午餐70克葡萄糖12小时(中午),和晚餐70克葡萄糖在20小时(8点)。

SimBiology模型图如下所示:

设置

加载模型。

sbioloadproject (“insulindemo”,“m1”)

抑制一个信息发出警告,在模拟。

warnSettings =警告(“关闭”,“SimBiology: DimAnalysisNotDone_MatlabFcn_Dimensionless”);

但血糖-胰岛素响应模拟正常的话题

选择一顿简单的饭菜剂量对象并显示其属性。

mealDose = sbioselect (m1,“名字”,“一餐”);get (mealDose)
ans =结构体字段:数量:78区间:0速度:0 RepeatCount: 0开始时间:0活跃:0 AmountUnits:“克”DurationParameterName:“EventMode:“停止”LagParameterName:“RateUnits:“TargetName:“剂量”TimeUnits:“小时”的名字:“一餐”父:[1 x1 SimBiology。模型)指出:“标签:“类型:“repeatdose”用户数据:[]

模拟了7小时。

configset = getconfigset (m1,“活跃”);configset。StopTime=7;

(显示仿真时间单位StopTime单位)。

configset.TimeUnits
ans =“小时”

模拟一个餐正常的话题。

configset normalMealSim = sbiosimulate (m1, [], mealDose);

但血糖-胰岛素响应模拟为2型糖尿病

选择2型糖尿病的一种变体,显示其属性。

diabeticVar = sbioselect (m1,“名字”,“2型糖尿病”)
diabeticVar = SimBiology变体- 2型糖尿病(不活跃)ContentIndex:类型:名称:房地产:价值:1参数等离子体体积……价值1.49 - 2参数k1值0.042 - 3参数值0.071 - 4参数等离子体体积……价值0.04 - 5参数m1值0.379 6参数m2值0.673 7参数m4值0.269 m6 8参数m5值0.0526 9参数值0.8118 10参数肝Extrac……价值0.6 11参数kmax值0.0465 12参数kmin值0.0076 13参数出租车值0.023 14参数kgri值0.0465 15参数f值0.9 16参数值6 e-05 17参数b值0.68 18参数c值0.00023 19参数d值0.09 20参数kp1值3.09 21参数kp2值0.0007 22个参数kp3值0.005 23参数kp4值0.0786 24参数ki值0.0066 25参数(Ins印第安纳Glu U…值1 26 27参数Vmx值参数Vm0值4.65 466.21 0.034 28公里参数值29参数p2U值0.084 30参数K值0.99 31参数α值0.013 32参数β值0.05 33参数γ值0.5 34参数ke1值0.0007 35参数ke2值269 36参数基础等离子体G……值164.18 37参数基础等离子体我…价值54.81

模拟一个2型糖尿病餐。

diabeticMealSim = sbiosimulate (m1, configset、diabeticVar mealDose);

比较结果的最重要的输出模拟。

  • 血浆葡萄糖(物种等离子体Glu浓缩的)

  • 血浆胰岛素(物种血浆Ins浓缩的)

  • 内源性葡萄糖生产(参数Glu刺激)

  • 葡萄糖的外观(参数Glu出现率)

  • 葡萄糖利用率(参数Glu跑龙套)

  • 胰岛素分泌(参数Ins Secr)

outputNames = {“等离子Glu浓缩”,“血浆Ins浓缩的”,“Glu刺激”,“Glu出现率”,“Glu Util”,“Ins Secr”};图;i = 1:元素个数(outputNames)次要情节(2、3、我);[tNormal, yNormal] = normalMealSim.selectbyname (outputNames{我});[tDiabetic, yDiabetic] = diabeticMealSim.selectbyname (outputNames{我});情节(tNormal yNormal,“- - -”,tDiabetic yDiabetic,“——”);%注释数据outputParam = sbioselect (m1,“名字”我,outputNames {});标题(outputNames{我});包含(的时间(小时));如果比较字符串(outputParam.Type“参数”)ylabel (outputParam.ValueUnits);其他的ylabel (outputParam.InitialAmountUnits);结束xlim ([0 7]);%添加传奇如果我= = 3({传奇“正常”,“糖尿病”},“位置”,“最佳”);结束结束

图包含6轴对象。坐标轴对象1标题等离子Glu浓缩的包含2线类型的对象。坐标轴对象2与血浆Ins浓缩的标题包含对象类型的线。坐标轴对象3标题Glu测量包含2线类型的对象。这些对象代表正常,糖尿病。坐标轴对象4标题Glu出现率包含2线类型的对象。坐标轴对象5 2标题Glu Util包含对象类型的线。坐标轴对象与标题Ins Secr 6包含2线类型的对象。

注意血糖和胰岛素的含量远远高于等离子体,以及葡萄糖利用率和胰岛素分泌的长时间的持续时间。

模拟一天的三餐正常的话题

设置模拟StopTime24小时。

configset。StopTime=24;

选择每日剂量。

dayDose = sbioselect (m1,“名字”,“日常生活”);

模拟三餐正常的话题。

configset normalDaySim = sbiosimulate (m1, [], dayDose);

模拟一天的三餐受损的科目

模拟以下缺陷的组合:

  • 障碍1:低胰岛素敏感性

  • 障碍2:损伤1β细胞反应性高

  • 障碍三:低β细胞的反应性

  • 损伤4:损伤3高胰岛素敏感性

存储单元阵列中的障碍。

impairVars {1} = sbioselect (m1,“名字”,“低胰岛素敏感性”);(impairVars impairVars {2} = {1},sbioselect (m1,“名字”,“高β细胞反应性”));impairVars {3} = sbioselect (m1,“名字”,“低β细胞反应性”);(impairVars impairVars {4} = {3},sbioselect (m1,“名字”,“高胰岛素敏感性”));

模拟每个障碍。

i = 1:4 impairSims (i) = sbiosimulate (m1, configset impairVars {}, dayDose);结束

比较血糖和血浆胰岛素的结果。

图;outputNames = {“等离子Glu浓缩”,“血浆Ins浓缩的”};legendLabels = {{“正常”},{“ins =β\ ',“ins +β\”},{“β= Ins - \”,“+ Ins -β\”}};yLimits = (80 240;0 500];i = 1:元素个数(outputNames) [tNormal yNormal] = selectbyname (normalDaySim, outputNames{我});[tImpair, yImpair] = selectbyname (impairSims outputNames{我});%绘制正常次要情节(2、3、3 *我2);情节(tNormal yNormal,“b -”);xlim (24 [0]);ylim (yLimits(我,:));包含(的时间(小时));传奇(legendLabels {1},“位置”,“西北”);%的阴谋低胰岛素次要情节(2、3、3张*);情节(tImpair {1}, yImpair {1},“g——”,tImpair {2}, yImpair {2},“:”);xlim (24 [0]);ylim (yLimits(我,:));包含(的时间(小时));传奇(legendLabels {2},“位置”,“西北”);标题(outputNames{我});%的阴谋低β次要情节(2、3、3 *我);情节(tImpair {3}, yImpair {3},c -。,tImpair {4}, yImpair {4},“m -”);xlim (24 [0]);ylim (yLimits(我,:));包含(的时间(小时));传奇(legendLabels {3},“位置”,“西北”);结束

图包含6轴对象。坐标轴对象1包含一个类型的对象。这个对象表示正常。坐标轴对象2标题等离子Glu浓缩的包含2线类型的对象。这些对象代表——= \β-β+ \。坐标轴对象3包含2线类型的对象。这些对象代表= Ins - \β,β+ Ins - \。坐标轴对象4包含一个类型的对象。这个对象表示正常。坐标轴对象5与血浆Ins浓缩的标题包含2线类型的对象。 These objects represent -Ins =\beta, -Ins +\beta. Axes object 6 contains 2 objects of type line. These objects represent =Ins -\beta, +Ins -\beta.

请注意,要么低胰岛素敏感性(绿色虚线, - - - - - - n 年代 = β )或低β细胞敏感性(dashed-dotted青色线, = n 年代 - - - - - - β )导致增加和延长血浆葡萄糖浓度(上面一行的情节)。低灵敏度的一个系统可以部分地补偿由高灵敏度在另一个系统。例如,低胰岛素敏感性和高β细胞敏感性(红色虚线表示 - - - - - - n 年代 + β )的结果相对正常血糖浓度(上面一行的情节)。然而,在这种情况下,导致血浆胰岛素浓度非常高(底部排块)。

参数估计方法

而不是同时为整个模型估计参数,作者对不同子系统执行参数估计使用强制函数模型的策略。这种方法需要额外的实验数据的“输入”子模型。在拟合过程中,输入数据确定的动态输入的物种。(完整的模型,确定输入的动态微分方程。)SimBiology而言,您可以实现强制函数作为重复分配规则,控制一个物种或参数的值作为模型的输入为一个子系统。在下面几节中,我们使用的参数拟合功能SimBiology完善作者的报告参数值。

拟合葡萄糖的胃肠道模型外观使用nlinfit

胃肠道模型表示如何在一顿饭是葡萄糖运输通过胃、肠道,肠道,然后吸收等离子体。这个子系统的输入是葡萄糖的量在一顿饭,和输出是血浆中葡萄糖的生成速率。然而,我们也估计这顿饭大小自价值报告的作者不一致的参数和仿真结果。因为这个输入只出现在模拟的开始,不需要强制函数。

这个函数sbiofit金宝app支持SimBiology模型中参数的估计从MATLAB™使用几种不同的算法,统计和机器学习的工具箱,优化工具箱,全局优化工具箱。首先,使用统计和机器学习的工具箱函数估计的参数nlinfit

%加载实验数据fitData = groupedData (readtable (“GlucoseData.csv”,“分隔符”,”、“));%设置单位的数据fitData.Properties。VariableUnits = {“小时”,%的时间单位毫克/分钟的,% GluRate单位毫克/分升的,% PlasmaGluConc单位毫克/分钟的,% GluUtil单位};%确定哪些模型组件对应于观测数据变量。gastroFitObs =(Glu出现率)= GluRate ';%的价值估计以下参数:gastroFitEst = estimatedInfo ({“kmax”,“kmin”,“出租车”,“剂量”});%保证参数估计时总是积极的评估%使用对数变换参数。[gastroFitEst。变换]=交易(“日志”);%设置初始剂量的估算报告餐剂量。的%的初步估计将从参数值%的模型。gastroFitEst (4)。我nitialValue = mealDose.Amount;%生成仿真数据与初始参数估计configset。StopTime=7; gastroInitSim = sbiosimulate(m1, mealDose);使用| %合适数据nlinfit |,显示在每个迭代输出fitOptions = statset (“显示”,“通路”);[gastroFitResults, gastroFitSims] = sbiofit (m1, fitDatagastroFitObs gastroFitEst, [],“nlinfit”,fitOptions);
规范标准的迭代SSE梯度步- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 3 2 1 2.23537 22.9971 0.596828 1.65217 1.33015 0.107431 43.798 1.6491 0.0778864 0.0239157 4 6 5 1.64909 0.00058626 0.00224484 1.64909 0.0141494 0.000316232 1.64909 0.0140004 2.23868 e-05 7 8 1.64909 0.0839478 0.000117587 1.64909 0.0472672 9.25494 e-07迭代终止:SSE不到OPTIONS.TolFun相对变化

拟合的数据使用fminunc

现在,使用优化工具箱函数的参数估计fminunc

%配合数据,绘制在每个迭代的目标函数fitOptions2 = optimoptions (“fminunc”,“PlotFcns”,@optimplotfval);[gastroFitResults (2), gastroFitSims (2)] = sbiofit (m1, fitDatagastroFitObs gastroFitEst, [],“fminunc”,fitOptions2);

{“字符串”:“图优化函数包含一个坐标轴对象。坐标轴对象与标题当前函数值:1.64909包含一个类型的对象行。”,“泰克斯”:[],“乳胶”:[]}

比较前后的仿真拟合。

gastroSims = selectbyname ([gastroInitSim gastroFitSims),“Glu出现率”);图;情节(gastroSims (1)。时间,gastroSims (1)。数据,“- - -”,gastroSims (2)。时间,gastroSims (2)。数据,“——”,gastroSims (3)。时间,gastroSims (3)。数据,“-”。,fitData。时间、fitData.GluRate“x”);包含(的时间(小时));ylabel (毫克/分钟的);传奇(“报告”,“估计(nlinfit)”,“估计(fminunc)”,“实验”);标题(葡萄糖的外表适合的);

图包含一个坐标轴对象。坐标轴对象以标题葡萄糖的外观适合包含4线类型的对象。这些对象代表报告,估计(nlinfit),估计(fminunc),实验。

参数值的变化,相对于报道值。

图;.ParameterEstimates.Estimate fitResults = [gastroFitResults (1)gastroFitResults (2) .ParameterEstimates.Estimate];%的初始值kmax kmin,出租车来自模型。gastroFitInitValues = [get (sbioselect (m1,“名字”,“kmax”),“价值”)得到(sbioselect (m1,“名字”,“kmin”),“价值”)得到(sbioselect (m1,“名字”,“出租车”),“价值”)gastroFitEst (4)。InitialValue];relFitChange = fitResults。/ [gastroFitInitValues gastroFitInitValues] - 1;酒吧(relFitChange);甘氨胆酸ax =;斧子。XTickLabel = {gastroFitEst.Name};ylabel (估计的相对变化值的);标题(比较报告和胃肠道估计参数值);传奇({“nlinfit”,“fminunc”},“位置”,“北”)

图包含一个坐标轴对象。坐标轴对象与标题比较报告和胃肠道估计参数值包含2对象类型的酒吧。这些对象代表nlinfit fminunc。

注意模型与实验数据的吻合更好如果餐大小(剂量)明显大于报道,参数kmax是明显大于报道,出租车小于报道。

拟合的肌肉和脂肪组织模型葡萄糖利用率

肌肉和脂肪组织模型表示如何利用体内的葡萄糖。“输入”这个子系统血浆中胰岛素的浓度(血浆Ins浓缩的)、内源性葡萄糖生产(Glu刺激),葡萄糖的生成速率(Glu出现率)。“输出”是血浆中葡萄糖的浓度(等离子体Glu浓缩的)和葡萄糖的速度利用率(Glu跑龙套)。

由于输入是时间的函数,他们需要实现为迫使功能。具体来说,的值血浆Ins浓缩的,Glu刺激,Glu出现率由重复的作业控制,调用函数的线性插值报道实验值。当使用这些函数来控制一个物种或参数,你必须不活跃的其他规则,用于设置它的值。为了方便的选择这些规则,规则名称属性包含有意义的名称。

%为“输入”:创建迫使功能%血浆胰岛素PlasmaInsRule = sbioselect (m1,“名字”,“血浆Ins浓缩的定义”);PlasmaInsForcingFcn = sbioselect (m1,“名字”,“血浆Ins浓缩的强制函数”)
PlasmaInsForcingFcn = SimBiology规则数组索引:RuleType:规则:1 repeatedAssignment[血浆Ins浓缩的]=[皮摩尔每升]* PlasmaInsulin(时间/(一个小时))
PlasmaInsRule。积极= false;PlasmaInsForcingFcn。积极= true;%内源性葡萄糖生产(Glu刺激)GluProdRule = sbioselect (m1,“名字”,“Glu刺激定义”);GluProdForcingFcn = sbioselect (m1,“名字”,“Glu促使强制函数”)
GluProdForcingFcn = SimBiology规则数组索引:RuleType:规则:1 repeatedAssignment [Glu促使]=[毫克每分钟]* EndogenousGlucoseProduction(时间/(一个小时))
GluProdRule。积极= false;GluProdForcingFcn。积极= true;%葡萄糖的外观(Glu出现率)GluRateRule = sbioselect (m1,“名字”,Glu出现率定义的);GluRateForcingFcn = sbioselect (m1,“名字”,“Glu出现率强制函数”)
GluRateForcingFcn = SimBiology规则数组索引:RuleType:规则:1 repeatedAssignment (Glu出现率)=(毫克每分钟)* GlucoseAppearanceRate(时间/(一个小时))
GluRateRule。积极= false;GluRateForcingFcn。积极= true;%模拟的初始参数值muscleInitSim = sbiosimulate (m1);%确定哪些模型组件对应于观测数据变量。muscleFitObs = {(等离子体Glu浓缩的]= PlasmaGluConc ',(Glu Util) = GluUtil '};%的价值估计以下参数:muscleFitEst = estimatedInfo ({“(等离子体体积(Glu))”,“k1”,“k2”,“Vm0”,“Vmx”,“公里”,“p2U”});%保证参数估计时总是积极的评估%使用对数变换参数。[muscleFitEst。变换]=交易(“日志”);%配合数据,显示在每个迭代输出[muscleFitResults, muscleFitSim] = sbiofit (m1, fitDatamuscleFitObs muscleFitEst, [],“nlinfit”,fitOptions);
规范标准的迭代SSE梯度步- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 3 2 1 1085.41 39015.9 0.610025 323.327 7382.05 0.430616 2181.52 292.039 2304.89 0.0803887 4 6 5 282.959 2665.28 0.0415646 267.302 1895.63 0.0967634 262.927 568.782 - 0.022644 7 8 261.966 1431.2 0.0208718 261.519 2277.77 0.0101182 9 10 258.937 1615.12 0.0149182 253.168 876.168 0.0559867 11 12 252.87 540.854 0.00679402 252.273 808.908 0.0125569 13 14 252.271 1159.19 0.000761151 252.256 518.349 6.4832 e-05 15 16 252.177 722.555 0.001689 252.072 231.853 0.00552735 17 18 250.906 195.796 0.00951454 251.298 857.883 0.0191843 19 20 250.774 378.47 0.0110708 250.773 554.932 0.0007185 21 22 250.766 306.758 2.07328 250.767 520.599 7.67298 e-05 e-06 23 24 250.766 498.737 1.60482 250.766 511.073 4.55003 e-07 e-16迭代终止:当前步骤的相对标准小于OPTIONS.TolX

参数值的变化,相对于报道值。

图;muscleFitInitValues = [get (sbioselect (m1,“名字”,“等离子体体积(Glu)”),“价值”)得到(sbioselect (m1,“名字”,“k1”),“价值”)得到(sbioselect (m1,“名字”,“k2”),“价值”)得到(sbioselect (m1,“名字”,“Vm0”),“价值”)得到(sbioselect (m1,“名字”,“Vmx”),“价值”)得到(sbioselect (m1,“名字”,“公里”),“价值”)得到(sbioselect (m1,“名字”,“p2U”),“价值”));栏(muscleFitResults.ParameterEstimates。估计。/ muscleFitInitValues - 1);甘氨胆酸ax =;斧子。XTickLabel = {muscleFitEst.Name};ylabel (估计的相对变化值的);标题(比较报告和葡萄糖估计参数值);

图包含一个坐标轴对象。坐标轴对象与标题比较报告和葡萄糖估计参数值包含一个对象类型的酒吧。

清理对模型所做的变更。

PlasmaInsRule。积极= true;GluProdRule。积极= true;GluRateRule。积极= true;PlasmaInsForcingFcn。积极= false;GluProdForcingFcn。积极= false;GluRateForcingFcn。积极= false;

比较前后的仿真拟合

muscleSims = selectbyname ([muscleInitSim muscleFitSim),{“等离子Glu浓缩”,“Glu Util”});图;情节(muscleSims (1)。时间,muscleSims (1) . data (: 1),“- - -”,muscleSims (2)。时间,muscleSims (2) . data (: 1),“——”,fitData。时间、fitData.PlasmaGluConc“x”);包含(的时间(小时));ylabel (“mg / dl”);传奇(“初始(模拟)”,“估计(模拟)”,“实验”);标题(“血浆葡萄糖配合”);

图包含一个坐标轴对象。坐标轴对象与标题血浆葡萄糖合适包含3线类型的对象。这些对象代表初始(模拟),估计(模拟),实验。

图;情节(muscleSims (1)。时间,muscleSims (1) . data (:, 2),“- - -”,muscleSims (2)。时间,muscleSims (2) . data (:, 2),“——”,fitData。时间、fitData.GluUtil“x”);包含(的时间(小时));ylabel (毫克/分钟的);传奇(“初始(模拟)”,“估计(模拟)”,“实验”);标题(葡萄糖利用合适的);

图包含一个坐标轴对象。坐标轴对象与标题葡萄糖利用率合适包含3线类型的对象。这些对象代表初始(模拟),估计(模拟),实验。

注意,显著增加一些参数,如Vmx,允许一个更好的后期数据的血浆葡萄糖浓度。

清理

恢复设置的警告。

警告(warnSettings);

结论

SimBiology包含几个功能,方便的实现和仿真一个复杂但血糖-胰岛素系统模型。反应、事件和规则提供一个自然的方式来描述系统的动态。单位转换允许物种和参数中指定单位方便,保证了尺寸模型的一致性。剂量对象是一个简单的方法来描述重复输入一个模型,如每日餐安排在这个例子。SimBiology还提供内置支持分析仿真和参数估计等任务。金宝app