主要内容

但血糖-胰岛素响应模拟

这个例子展示了如何模拟和分析模型在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还支持通过设置他们的无量纲万博1manbetx参数的使用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值.042 3参数k2值.071 4参数等离子体体积……值.04点5参数m1值.379 6参数m2值.673 7参数m4值.269 m6 8参数m5值.0526 9参数值.8118 10参数肝Extrac……价值。6 11参数kmax值.0465 12参数kmin值.0076 13参数出租车值0 14参数kgri值.0465 15 16参数值参数f值。9 6 e-05 17参数b值.68点18 19参数d值参数c值.00023 .09点20参数kp1值3.09 21参数kp2值.0007 22参数kp3值.005 23参数kp4值.0786 24参数ki值.0066 25参数(Ins印第安纳Glu U…价值1.0 26参数Vm0值4.65 27参数Vmx值.034 28参数p2U 29公里价值466.21参数值.084 30参数K值0 31参数α值.013 32参数β值0。33参数γ值5 34参数ke1值.0007 35 36参数基础等离子体参数ke2值269.0 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浓缩的,包含时间(小时),ylabel毫克/分升包含2线类型的对象。坐标轴对象2与血浆Ins浓缩的标题,包含时间(小时),ylabel皮摩尔/升包含2线类型的对象。坐标轴对象3标题Glu测量,包含时间(小时),ylabel毫克/分钟包含2线类型的对象。这些对象代表正常,糖尿病。坐标轴对象4标题Glu出现率,包含时间(小时),ylabel毫克/分钟包含2线类型的对象。5轴对象与标题Glu Util包含时间(小时),ylabel毫克/分钟包含2线类型的对象。坐标轴对象与标题Ins Secr 6,包含时间(小时),ylabel皮摩尔/分钟包含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包含时间(小时)包含一个对象类型的对象。这个对象表示正常。坐标轴对象与血浆Ins浓缩的标题5,包含时间(小时)包含2线类型的对象。 These objects represent -Ins =\beta, -Ins +\beta. Axes object 6 with xlabel time (hour) contains 2 objects of type line. These objects represent =Ins -\beta, +Ins -\beta.

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

参数估计方法

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

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

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

这个函数sbiofit万博1manbetx支持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 5 1.64909 0.000586249 0.00224475 1.64909 0.0141494 0.000316238 6 7 1.64909 0.00971641 2.33353 1.64909 0.0139995 2.23854 e-05 e-05 8 1.64909 0.00786815 2.28944 e-05 9 10 1.64909 0.00541449 2.43141 1.64909 0.0098386 2.52605 e-05 e-07迭代终止:SSE不到OPTIONS.TolFun相对变化

拟合的数据使用fminunc

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

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

图优化函数包含一个坐标轴对象。坐标轴对象与标题当前函数值:1.6491,包含迭代,ylabel函数值包含一行对象显示它的值只使用标记。

比较前后的仿真拟合。

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

图包含一个坐标轴对象。坐标轴对象与标题葡萄糖外观健康,包含时间(小时),ylabel毫克/分钟包含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”},“位置”,“北”)

图包含一个坐标轴对象。坐标轴对象与标题报道和胃肠道估计参数值比较,ylabel估计相对变化值包含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 699.121 16344.7 0.480334 426.31 13770.6 0.425703 2181.51 264.226 2415.86 0.351024 4 6 5 246.434 1870.42 0.0881693 244.478 1356.49 0.0109624 243.318 270.056 - 0.00941789 1121 240.756 242.955 609.78 0.0694774 8 9 10 240.75 916.641 0.000157475 240.704 1544.16 7.55918 0.0481101 e-05 13 11 12 240.435 787.678 0.00407475 240.312 693.831 0.00293102 240.131 1718.86 0.00869632 14 15 240.13 498.938 1.64921 240.13 258.705 1.58109 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 (估计的相对变化值的);标题(比较报告和葡萄糖估计参数值);

图包含一个坐标轴对象。坐标轴对象与标题报道和葡萄糖估计参数值比较,估计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”);传奇(“初始(模拟)”,“估计(模拟)”,“实验”);标题(“血浆葡萄糖配合”);

图包含一个坐标轴对象。坐标轴对象与标题血糖健康,包含时间(小时),ylabel mg / dl包含3线类型的对象。一个或多个行显示的值只使用这些对象标记代表初始(模拟),估计(模拟),实验。

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

图包含一个坐标轴对象。坐标轴对象与标题葡萄糖利用率,包含时间(小时),ylabel毫克/分钟包含3线类型的对象。一个或多个行显示的值只使用这些对象标记代表初始(模拟),估计(模拟),实验。

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

清理

恢复设置的警告。

警告(warnSettings);

结论

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