技术文章和通讯

建立可部署的评价PK/PD药物疗效的应用程序

作者:安妮塔·加贾拉和阿萨瓦里·萨曼特


药代动力学/药效学(PK/PD)和系统药理学模型是评价正在开发药物的重要工具。使用MATLAB®和SimBiology®,研究人员可以在图形环境中或使用编程工具构建和描述这样的模型。他们可以使用临床前数据来数学地描述动态体内新候选药物的行为,并根据模型模拟在人类中进行预测和外推。然后,他们可以分享这些模型,使临床医师、生物学家和研究人员能够更好地评估各种剂量策略的有效性和安全性指标,并探索不同亚群患者的假设情况。

在某些情况下,直接共享SimBiology模型可能不现实。例如,您的同事可能无法访问或不熟悉MATLAB和SimBiology,或者您可能希望锁定模型及其特征,以便其他用户不会无意中更改它。

MATLAB Compiler™允许您将SimBiology模型部署为独立的MATLAB应用程序的一部分。您可以构建一个定制的图形界面,其他研究人员可以使用它来设置和运行模型模拟。然后,您可以编译该应用程序,使研究人员无需安装MATLAB或SimBiology即可使用它。

使用科赫、沃尔兹、拉胡和施罗普开发的肿瘤学模型1.作为一个示例,本文描述了一个开发和部署应用程序的工作流,该应用程序用于模拟使用SimBiology构建的机械PK/PD模型2..

示例模型和可部署应用程序可用于下载.

肿瘤学模型概述

本文中的示例基于Koch et al.肿瘤学模型,该模型用于描述肿瘤随时间的生长,以响应单药单药治疗或同时服用两种药物的联合治疗。

Koch等人肿瘤模型的SimBiology实现如图1所示3..两种药物的血浆浓度由具有线性消除途径的独立单室PK模型描述。肿瘤生长模型在肿瘤室中表示。衰变反应的速率取决于药物A和药物B的血浆浓度以及相互作用参数。当dru的血浆浓度gs降至零,肿瘤动力学由肿瘤生长过程描述。肿瘤重量定义为肿瘤生长和衰退状态之和,即x1+x2+x3+x4。

图1.Koch等人的SimBiology模型。肿瘤生长模型。顶部:药物A和药物B的独立PK模型。底部:用于模拟肿瘤大小随时间变化的肿瘤生长模型。

模型模拟使分析各种联合给药策略对肿瘤抑制的影响成为可能(图2)。

图2。在SimBiology中模拟不同治疗的肿瘤重量与时间的关系图。联合治疗(红线)在抑制肿瘤生长方面比不治疗或单一治疗(灰线)更有效。

为部署准备模型

为了使用MATLAB编译器共享SimBiology模型,我们首先创建一个导出模型4..

我们使用MATLAB加载SimBiology模型sbioloadproject.

> > sbioloadproject (“TumorGrowthModel.sbproj”);加载模型

我们使用出口保存创建导出的SimBiology模型,并将其保存为MAT文件,该文件将被加载到部署的应用程序中。

>>exportedModel=导出(m1);%创建导出模型> >保存modelFile。垫exportedModel%保存导出的模型

请注意,导出的SimBiology模型具有有限的可访问属性集。此外,某些模型功能(包括反应、规则和事件)无法在导出版本中更改。

构建模型的接口

在创建一个导出的SimBiology模型之后,我们构建一个定制的MATLAB接口。该接口将使不使用MATLAB的非建模人员和研究人员能够调整模型参数,应用剂量计划,并运行模拟(图3)。

图3。用于与SimBiology模型交互的MATLAB接口。

使用MATLAB图形用户界面设计环境(GUIDE)工具,我们通过将组件从调色板拖到布局区域来布局界面(图4)。

图4。使用MATLAB GUIDE工具创建的示例界面,显示了调色板(左)和布局区域(中)。

我们需要修改每个组件的单独属性标签属性,以便以编程方式轻松访问这些元素<名称> _ <类型>,提高了代码的可读性(图5)。

图5。用于编辑界面控件对象属性的属性检查器。cell line的弹出菜单组件的Tag属性被设置为CellLine_POPUP。

编程函数访问导出的SimBiology模型

在基于MATLAB桌面的工作流中,对应用程序进行编码以访问未导出的SimBiology模型。在准备部署时,我们需要更新代码以使用导出的SimBiology模型。

第一步是向MATLAB Compiler表明应用程序使用导出的SimBiology模型。我们通过添加一个指令(通过%#作用pragma)在指南生成的MATLAB文件中,肿瘤生长抑制,它链接到我们保存的指南FIG文件。

函数varargout = TumorGrowthInhibition(变长度输入宗量)%#函数SimBiology.export.Model

当最终用户与应用程序中的界面控制对象(如菜单或按钮)交互时,特定功能或回调调用。接下来,我们将修改回调函数以使用导出的模型。

在示例应用程序中,我们将修改五个回调以准备部署模型:
TumorGrowthInhibition_OpeningFcn, CellLine_POPUP_Callback,初始重量编辑回调,剂量1编辑回调,SimTumorGrowth_PUSHBUTTON_Callback.

TumorGrowthInhibition_OpeningFcn是示例应用程序中的打开函数。它加载模型并在代码中初始化剂量、模型参数和其他属性。初始(未部署)版本使用sbioloadproject将模型加载到MATLAB中sbiodosegetdose创建或编辑现有剂量对象的步骤。

函数TumorGrowthInhibition_OpeningFcn (hObject eventdata处理,变长度输入宗量)%  %创建和初始化剂量-未部署的版本%加载项目项目= sbioloadproject (“TumorGrowthModel.sbproj”);m1=项目m1;%得到剂量1d1=获得剂量(m1,“药物A”);%第二剂d2=获得剂量(m1,“药物B”);% <剪>

对于已部署的应用程序,我们从MAT文件加载导出的模型(而不是使用sbioloadproject).我们用getdose更新附加到导出模型的现有剂量对象,因为不能向导出模型添加新的剂量对象。

函数TumorGrowthInhibition_OpeningFcn (hObject eventdata处理,变长度输入宗量)%  %创建并初始化剂量部署版本%加载模型项目=负载(“modelFile.mat”);m1 = proj.exportedModel;%得到剂量1d1=获得剂量(m1,“药物A”);%第二剂d2=获得剂量(m1,“药物B”);% <剪>

手机线\弹出\回拨当用户从弹出菜单中选择单元格行时调用。该功能负责根据用户的选择适当地设置cell line参数。在模型的非导出版本中,这是通过使用单个调用选择适当的变体来完成的sbioselect.

函数CellLine_弹出式_回调(hObject、eventdata、句柄)%  %设置适当的细胞系名称不变式——非部署版本cellLine = sbioselect(模型,“类型”,“变异”,“姓名”, cellLineName);% <剪>

SimBiology模型变体不能用于导出的模型。因此,对于导出的模型,我们使用ValueInfo获取索引获取和设置构成模型变量的各个模型参数。

函数CellLine_弹出式_回调(hObject、eventdata、句柄)%%设置适当的单元线参数–-deployed version%获取当前的L1和L0值L1 =模型。ValueInfo(getIndex(model,“L1”));L0 =模型。ValueInfo(getIndex(model,“10”));开关cellLineName案例“细胞系1”L0.InitialValue=0.141;L1.InitialValue=0.282;案例“细胞系2”L0.InitialValue=0.142;L1.InitialValue=0.284;案例'细胞株3 '10。InitialValue = 0.143;L1。InitialValue = 0.286;否则%终止% <剪>

初始化重量\u编辑\u回调当用户指定初始肿瘤权重(w0).像手机线\弹出\回拨,此回调使用的非部署版本sbioselect设置模型中的参数值。

函数InitialToMorWeight\u EDIT\u回调(hObject、eventdata、句柄)%%设置模型中w0的值–非部署版本w0=sbioselect(型号,“类型”,“参数”,“姓名”,“w0”);w0.Value=str2double(get(hObject,“字符串”));% <剪>

如同手机线\弹出\回拨,我们使用ValueInfo获取索引为已部署的应用程序设置导出的SimBiology模型中的值。

函数InitialToMorWeight\u EDIT\u回调(hObject、eventdata、句柄)%%设置模型中w0的值–已部署版本w0 =模型。ValueInfo(getIndex(model,“w0”));w0。InitialValue = str2double (get (hObject,“字符串”));% <剪>

Dosage1_EDIT_Callback当用户指定剂量时间单位时调用。此回调更新剂量对象。最初,这是通过设置TimeUnits时间间隔直接属性。

函数Dosage1_编辑_回调(hObject、eventdata、句柄)%  %设置剂量对象的设置——非部署版本%直接设置时间单位和间隔dose1.TimeUnits=TimeUnits;dose1.Interval=str2double(get(handles.EveryValue1_EDIT,“字符串”));%将开始时间从天转换为新的时间单位dose1.StartTime=sbiounitcalculator(“一天”、dose1.TimeUnits str2double (get(处理。StartTime1_编辑,“字符串”)));% <剪>

在部署的应用程序中,TimeUnits的只读属性是剂量对象,因此无法直接设置。我们使用sbiounitcalculator&将剂量间隔转换为剂量的现有时间单位。

函数Dosage1_编辑_回调(hObject、eventdata、句柄)%%Set dose object的设置–-deployed version%无法设置时间单位;请使用sbiounitcalculator转换时间间隔dose1.Interval=sbiounitcalculator(“一天”,dose1.TimeUnits,str2double(get(handles.EveryValue1)编辑,“字符串”)));%将开始时间从天转换为新的时间单位dose1.StartTime=sbiounitcalculator(“一天”、dose1.TimeUnits str2double (get(处理。StartTime1_编辑,“字符串”)));% <剪>

SimTumorGrowth_PUSHBUTTON_Callback在用户单击模拟肿瘤生长此回调使用适当的参数值和给药计划运行模拟,以计算肿瘤重量随时间的变化。在未部署的模型版本中,它调用sbiosimulate.

函数SimTumorGrowth_PUSHBUTTON_Callback (hObject eventdata处理)%%Simulate model&get tumor profile–非部署版本sd=sbiosimulate(型号,''(cellLine phiVar]、[dose1 dose2]);[currResults.Time, currResults。肿瘤]= selectbyname (sd,“w”);% <剪>

对于导出的模型,我们将替换sbiosimulate具有模拟.

函数SimTumorGrowth_PUSHBUTTON_Callback (hObject eventdata处理)%%Simulate model&get tumor profile–已部署版本sd =模拟(模型、initValues [dose1 dose2]);[currResults.Time, currResults。肿瘤]= selectbyname (sd,“w”);% <剪>

设置生成报表

利用MATLAB生成报表™ 我们生成一个捕获模型PK/PD响应、模型参数和剂量计划的文档。我们的应用程序将生成一个名为“myreport.PDF”的PDF文档。此回调使用MATLAB Report Generator 4.0(R2014b)中提供的新文档对象模型(DOM)API,它允许我们以编程方式构建报告。

%---在按下导出按钮时执行。函数Export_PUSHBUTTON_Callback (hObject eventdata处理)%导出按钮的对象句柄(请参见GCBO)%eventdata保留-将在未来版本的MATLAB中定义%handles结构,带有句柄和用户数据(请参见GUI数据)%%%Generate report%%%Initialize%%导入DOM设置进口mlreportgen.dom*;%使它可部署使用MATLAB编译器makedomCompileable();%创建文档rpt =文档(“我的报告”,“pdf”);%%%%%%创建主节%sh=标题(2,“联合治疗对肿瘤生长的模拟作用”);b =边界();b.BottomStyle =“单身”;b.BottomColor =浅灰色的;b.底部宽度=“1pt”;h.Style=[h.Style{Color(“DarkOrange”),b}];追加(rpt,h);p=附加(rpt,段落(“*自动生成使用MATLAB报告生成器4.0 (R2014b)。”));p.Style={FontFamily(“Arial”),字体大小(“10磅”)};%%%%%%创建设置部分:%SNIP>tableData={。。。“细胞系:”, cellLineName {1};'初始肿瘤重量(g):'initialTumorWeight};表=表(大小(tableData, 1));追加(rpt、表);%%%%%%创建结果部分:%SNIP>hFig=数字;%肿瘤重量轴hax = copyobj(处理。TumorWeight_AXES hFig);集(hax,“单位”,“正常化”);集(hax,“位置”,[0.15 0.30 0.7 0.6]);%剂量轴hax = copyobj(处理。Dose_AXES hFig);集(hax,“单位”,“正常化”);集(hax,“位置”,[0.15 0.15 0.7 0.15]);%设置尺寸(英寸)集(hFig,“单位”,“英寸”);Pos=get(hFig,“位置”);集(hFig,“位置”,[Pos(1:2)6 5]);套件(hFig,“文件位置”,[0 0 6 5]);%打印并附加到报告打印(hFig,“-dmeta”,“plot1.emf”);img =图像(“plot1.emf”);img。宽度=“6”;img。身高=“5”;追加(rpt,段落(img));%%查看报告关闭(rpt);rptview (“我的报告”,“pdf”);% <剪>

在MATLAB中测试应用

我们执行肿瘤生长抑制命令在MATLAB中启动应用程序。当应用程序启动时,我们指定细胞系、初始肿瘤重量和给药计划,然后单击模拟肿瘤生长按钮开始模拟。

该图显示了四种不同处理的模拟结果(图6)。

图6.联合治疗的完整应用程序和模拟结果。红色突出显示的治疗代表两种药物的联合治疗,假设没有药物相互作用。

我们点击出口按钮生成显示结果的PDF文件(图7)。

图7.显示模拟结果的PDF报告。

我们现在准备创建一个独立的应用程序,可以分发给没有安装MATLAB的研究人员。

部署应用程序

下面的MATLAB命令定位所有文件和路径依赖项,并调用MATLAB Compiler命令来编译肿瘤生长抑制部署申请:

%注意,这假设所有附加的适用文件都在路径上additionalFiles = [{“modelFile.mat”,“Summary.rpt”}…导出模型依赖文件];%在本例中,我们以编程方式构造| mcc |%命令:mccommand=[“mcc - m TumorGrowthInhibition.m”...sprintf (“-a%s”,附加文件{:}];%执行| mcc |命令。eval (mccCommand)

编译完成后,将生成一个可执行文件(.exe),并使用MATLAB编译器运行时(MCR)分发。MCR是一组共享库,允许用户在没有安装MATLAB的计算机上执行已编译的MATLAB应用程序。

摘要:应用工作流

您可以使用本文中概述的流程将您自己的SimBiology模型之一部署为独立应用程序。首先在MATLAB中加载模型并创建一个导出的SimBiology模型出口保存命令。接下来,使用GUIDE构建一个简单的接口,并编写回调函数,以通过接口控制元素访问SimBiology模型。最后,在MATLAB中测试应用程序后,使用MATLAB编译器进行编译,并在未安装MATLAB的计算机上重新测试生成的可执行文件。

1.Koch,G.,Walz A.,Lahu,G.,和Schropp,J.(2009)联合治疗的肿瘤生长和抗癌效应建模。药代动力学和药效学杂志。36:179-197。

2.该工作流的第一步是构建和描述模型。这一步由Koch等人完成,虽然本文提供了该方法的概述,但没有详细描述。看到在SimBiology中建立模型要了解有关此步骤的更多信息。

3.图1中未显示基本利率方程。请参考Koch等人或SimBiology下载应用程序有关模型和实现细节。

4.SimBiology项目文件(*.sbproj)与MATLAB编译器不兼容。

关于作者

安妮塔Gajjala是MathWorks的顾问。她专门为生物技术和制药、能源、航空航天和国防等行业的客户创建定制MATLAB应用程序。Anita持有康奈尔大学(Cornell University)电气和计算机工程学士学位,乔治亚理工学院(Georgia Institute of Technology)电气和计算机工程硕士学位。

Asawari Samant是MathWorks的高级应用工程师。她专注于生物技术和制药行业的数据分析和计算生物学应用。Asawari持有特拉华大学(University of Delaware)化学工程硕士学位,以及印度孟买化学技术研究所(Institute of chemical Technology)化学工程学士学位。

发布于2014 - 92233v00

查看相关功能的文章

查看相关行业的文章