建立可展开的PK/PD药物疗效评估应用

通过安妮塔Gajjala和Asawari Samant,MathWorks公司

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

在某些情况下,它可能是不实际的直接共享SimBiology模型。例如,你的同事可能无法获得,或不熟悉,MATLAB和SimBiology,或者你不妨来锁定模式及其特征,以便其他用户无法在不经意间改变它。

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

使用由Koch,瓦尔兹,拉祜族和Schropp开发的肿瘤模型1作为一个例子,本文介绍的工作流开发和用于模拟机械PK部署应用程序/ PD模型中使用SimBiology建2

样品模型和部署的应用程序都可以下载

肿瘤模型概述

本文中的示例基于Koch等上。肿瘤学模型,其用于随着时间的推移在响应表征肿瘤生长到单一疗法治疗与单一药物,或联合疗法涉及的两种药物同时给药。

Koch等人的肿瘤模型的SimBiology实现如图1所示3。两种药物的血浆浓度是通过独立的一隔室PK模型与线性消除路线说明。肿瘤生长模型在肿瘤室中表示。衰变反应的速率取决于药物A和药物B的血浆浓度和相互作用参数。当药物的血浆浓度下降到零,肿瘤动力学是由肿瘤生长过程说明。肿瘤重量被定义为生长和腐烂肿瘤状态的总和,即,X1 + X2 + X3 + X4。

科赫等人的图1 SimBiology模型。肿瘤的增长模式。上图:独立的PK模式药剂A和B.药物底:用来模拟随着时间的推移在肿瘤大小的变化肿瘤生长模型。

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

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

为部署准备模型

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

我们将SimBiology模型加载到MATLAB中sbioloadproject

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

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

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

请注意,出口SimBiology模型有一组有限的可访问性。此外,一些型号的特点,包括反应,规则和事件,不能在导出的版本变化。

构建界面示范

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

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

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

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

我们需要修改每个组件的各个属性。例如,我们需要更新标签属性接口元件,使得这些元件可以容易地编程访问。使用命名约定,如<名称> _ <类型>,提高了代码的可读性(图5)。

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

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

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

第一步是向MATLAB编译器表明应用程序使用导出的SimBiology模型。我们通过添加一个指令(通过%#功能编译)在引导产生的MATLAB文件,TumorGrowthInhibition.m,这是与导图文件,我们得救了。

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

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

在示例应用程序,我们将修改5个回调准备部署模型:
TumorGrowthInhibition_OpeningFcn, CellLine_POPUP_CallbackInitialTumorWeight_EDIT_Callback,Dosage1_EDIT_Callback,SimTumorGrowth_PUSHBUTTON_Callback

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

函数TumorGrowthInhibition_OpeningFcn (hObject eventdata处理,变长度输入宗量)% <剪切> %创建和初始化剂量-非部署版本%加载项目项目= sbioloadproject (“TumorGrowthModel.sbproj”);M1 = proj.m1;%获取量1D1 = getdose(M1,“药物A”);%获取量2D2 = getdose(M1,“药物B”);% <剪>

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

函数TumorGrowthInhibition_OpeningFcn (hObject eventdata处理,变长度输入宗量)% <剪切> %创建和初始化剂量-部署版本%加载模型PROJ =负载(“modelFile.mat”);m1 = proj.exportedModel;%获取量1D1 = getdose(M1,“药物A”);%获取量2D2 = getdose(M1,“药物B”);% <剪>

CellLine_POPUP_Callback当用户从弹出菜单中选择一个单元格行时调用。此函数负责根据用户的选择适当地设置细胞系参数。在模型的非导出版本中,这是通过选择适当的变量并调用to来实现的sbioselect

函数CellLine_POPUP_Callback(hObject,EVENTDATA,手柄)%  %设置适当的单元名称不变——非部署版本cellLine = sbioselect(模型,“类型”“变异”'名称',cellLineName);% <剪>

SimBiology模型变量不能与出口的机型。因此,对于出口车型中,我们使用ValueInfogetIndex获取和设置单独的模型参数,使一个模式的变体。

函数CellLine_POPUP_Callback(hObject,EVENTDATA,手柄)%设定合适的细胞系的参数 - 部署版本%获取当前L1和L0的值L1 = model.ValueInfo (getIndex(模型,“L1”));L0 = model.ValueInfo (getIndex(模型,“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;除此以外结束% <剪>

InitialTumorWeight_EDIT_Callback当用户指定初始肿瘤重量(w0)。喜欢CellLine_POPUP_Callback,此回调的非部署版本使用sbioselect设置模型中的参数值。

函数InitialTumorWeight_EDIT_Callback(hObject,EVENTDATA,手柄)%在模型W0的设置值 - 非展开版本W0 = sbioselect(型号,“类型”'参数''名称''W0');w0.Value = str2double(GET(hObject,“字符串”));% <剪>

CellLine_POPUP_Callback, 我们用ValueInfogetIndex为部署的应用程序设置导出的SimBiology模型中的值。

函数InitialTumorWeight_EDIT_Callback(hObject,EVENTDATA,手柄)%在模型W0的设置值 - 部署的版本w0 = model.ValueInfo (getIndex(模型,'W0'));w0。InitialValue = str2double (get (hObject,“字符串”));% <剪>

Dosage1_EDIT_Callback当用户指定用量的时间单位被调用。这个回调更新剂量宾语。最初,这是通过设置完成TimeUnits时间间隔直接属性。

函数Dosage1_EDIT_Callback(hObject,EVENTDATA,手柄)设置剂量对象的设置-未部署版本%直接设置时间单位和间隔dose1.TimeUnits = timeUnits;dose1.Interval = str2double(GET(handles.EveryValue1_EDIT,“字符串”));%转换开始时间从白天到新TimeUnitsdose1.StartTime = sbiounitcalculator(“天”、dose1.TimeUnits str2double (get(处理。StartTime1_编辑,“字符串”)));% <剪>

在已部署的应用程序中,TimeUnits的只读属性剂量对象,所以不能直接设置。我们用sbiounitcalculator&在给药间隔转换成剂量现有的时间单位。

函数Dosage1_EDIT_Callback(hObject,EVENTDATA,手柄)%设定剂量对象的设置 - 部署的版本%无法设置TimeUnits;使用sbiounitcalculator到间隔转换dose1.Interval = sbiounitcalculator(“天”,dose1.TimeUnits,str2double(获得(handles.EveryValue1_编辑,“字符串”)));%转换开始时间从白天到新TimeUnitsdose1.StartTime = sbiounitcalculator(“天”、dose1.TimeUnits str2double (get(处理。StartTime1_编辑,“字符串”)));% <剪>

SimTumorGrowth_PUSHBUTTON_Callback当用户单击模拟肿瘤生长按钮。此回调运行具有相应的参数值和给药方案模拟计算随时间的肿瘤重量进展。在该模型的非部署的版本,它调用sbiosimulate

函数SimTumorGrowth_PUSHBUTTON_Callback (hObject eventdata处理)%仿真模型及获得肿瘤图谱 - 非部署的版本SD = sbiosimulate(型号,“”(cellLine phiVar]、[dose1 dose2]);[currResults.Time, currResults。肿瘤]= selectbyname (sd,'W');% <剪>

对于出口车型,我们替换sbiosimulate模拟

函数SimTumorGrowth_PUSHBUTTON_Callback (hObject eventdata处理)%仿真模型及获得肿瘤图谱 - 部署的版本sd =模拟(模型、initValues [dose1 dose2]);[currResults.Time, currResults。肿瘤]= selectbyname (sd,'W');% <剪>

建立报告生成

使用MATLAB报表生成™我们生成一个文档捕获模型的PK / PD响应,模型参数和给药方案。我们的应用程序会生成一个名为“myreport.pdf” PDF文档。此回调使用新的文档对象模型(DOM)在MATLAB报表生成器4.0(R2014b),它可以让我们能够建立报告程序可用的API。

%---按下按钮在Export_PUSHBUTTON执行。函数Export_PUSHBUTTON_Callback (hObject eventdata处理)%hObject句柄Export_PUSHBUTTON(见GCBO)%EVENTDATA预留 - 在MATLAB%手柄结构的未来版本设有手柄和用户数据(参见GUIDATA)%%生成报告%%%%%%初始化被定义%%%%%%%进口DOM设置进口mlreportgen.dom。*;%使其可部署使用MATLAB编译器makeDOMCompilable();%创建文档rpt =文档('我的报告''PDF');创建主部分%%%%%% %%%%%% <剪切>H =标题(2,“联合治疗的模拟对肿瘤生长”);b =边界();b。BottomStyle ='单';b。BottomColor =浅灰色的;b.BottomWidth =“1点”;h.Style = [h.Style {彩色(“DarkOrange”)中,b}];追加(RPT,H);P =追加(RPT,段落(*使用MATLAB报告生成器4.0 (R2014b)自动生成。));p.Style = {的FontFamily(“宋体”), 字体大小('10PT')};%%%%%%创建设置部分%%%%%%%tableData = {…“细胞系:”,cellLineName {1};'初始肿瘤重量(g):'initialTumorWeight};表=表(大小(tableData, 1));追加(rpt、表);%%%%%%创建结果部分%%%%%%%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,'位置'[名次(1:2)6 5]);集(hFig,'PaperPosition',[0 0 6 5]);%打印并追加到报告打印(hFig,“-dmeta”'plot1.emf');img =图像('plot1.emf');img。宽度=“6”;img。身高=“5”;追加(rpt,段落(img));%% 查看报告关闭(rpt);rptview ('我的报告''PDF');% <剪>

测试在MATLAB中的应用

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

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

图6.用完成模拟结果组合治疗中的应用。以红色突出显示的治疗代表了两种药物组合疗法,假设没有药物相互作用。

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

图7. PDF报告,显示仿真结果。

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

部署应用程序

下面的MATLAB命令定位所有文件和路径依赖项,并调用MATLAB编译器命令来编译TumorGrowthInhibition.m应用程序部署:

注意,这假设所有其他适用的文件都在路径上additionalFiles = [{“modelFile.mat”“Summary.rpt”} ... exportedModel.DependentFiles]。%对于这个例子的目的,我们以编程方式构建| MCC |%命令:mccCommand = [“mcc - m TumorGrowthInhibition.m”…sprintf ('-a%s' 的,additionalFiles {:})];%执行| MCC |命令。eval (mccCommand)

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

摘要:应用工作流

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

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

2这个工作流的第一步是构建和描述模型。这一步是由Koch等人完成的,虽然本文提供了该方法的概述,但没有详细描述。看到全面建设SimBiology模型详细了解此步骤。

3底层速率方程没有示于图1。请参阅Koch等。人或SimBiology下载应用程序获取模型和实现细节。

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

关于作者

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

Asawari Samant是MathWorks的高级应用程序工程师。她专注于生物技术和制药行业的数据分析和计算生物学应用。Asawari拥有特拉华大学化学工程硕士学位和印度孟买化学技术研究所化学工程学士学位。

出版于2014 - 92233v00


查看文章的相关能力

查看文章为相关行业