构建部署应用程序的评估PK / PD药效

作者:Anita Gajjala和Asawari Samant, MathWorks

药代动力学/药效学(PK / PD)和系统药理学模型是在发展评价药物的重要工具。使用MATLAB®和SimBiology®,研究人员可以构建和在图形环境或使用编程工具,无论是定性此类机型。他们可以使用临床前数据以数学描述动态体内根据模型模拟人类补充新的候选药物的行为,并预测和推断。然后,他们可以共享这些模型,以便能够同胞临床医生,生物学家和研究人员能更好地评估各种给药策略的有效性和安全性指标和探索什么,如果在不同的患者亚群的情况。

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

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

使用由Koch, Walz, Lahu和Schropp开发的肿瘤模型1作为一个示例,本文描述了一个用于开发和部署应用程序的工作流,该应用程序用于模拟使用SimBiology构建的机械PK/PD模型2

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

肿瘤模型概述

本文中的例子是基于Koch等人的肿瘤模型,该模型用于描述肿瘤随着时间的增长对单一药物治疗或同时给药两种药物的联合治疗的反应。

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

图1所示。Koch等人的肿瘤生长模型的SimBiology模型。上:A药和b药的独立PK模型。下:用于模拟肿瘤大小随时间变化的肿瘤生长模型。

模型模拟使得可以分析对肿瘤抑制(图2)的各种组合给药策略的影响。

图2.剧情的肿瘤重量与时间的关系对于不同的疗法,SimBiology模拟。联合疗法(红线)是在抑制肿瘤生长比没有治疗或单一疗法(灰线)更有效。

准备部署模型

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

我们使用SimBiology模型加载到MATLABsbioloadproject

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

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

>> exportedModel =出口(M1);%创建导出模型>>保存modelFile.mat exportedModel%保存导出模型

注意,导出的SimBiology模型具有一组有限的可访问属性。此外,一些模型特性,包括反应、规则和事件,不能在导出的版本中更改。

构建模型的接口

创建出口SimBiology模型后,我们建立了一个自定义的MATLAB接口。该界面将使得非建模和研究人员无法获得MATLAB调整模型参数,适用于给药方案,并运行模拟(图3)。

图3. MATLAB接口与SimBiology模型交互。

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

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

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

图5.属性检查用于编辑接口控制对象属性。对于细胞系的弹出菜单组件的标记属性设置为CellLine_POPUP。

编程功能访问导出SimBiology型号

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

第一个步骤是,以指示MATLAB编译该应用程序使用的导出SimBiology模型。为此,我们增加一个指令(通过% #函数在指南生成的MATLAB文件中,TumorGrowthInhibition.m,这是与导图文件,我们得救了。

功能varargout = TumorGrowthInhibition(varargin)% #函数SimBiology.export.Model

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

在示例应用程序中,我们将修改5个回调函数,为部署模型做准备:
TumorGrowthInhibition_OpeningFcn,CellLine_POPUP_Callback,InitialTumorWeight_EDIT_Callback,Dosage1_EDIT_Callback,SimTumorGrowth_PUSHBUTTON_Callback

TumorGrowthInhibition_OpeningFcn在示例应用程序的打开功能。它加载模型和代码初始化剂量,模型参数和其他属性。最初的(未部署的)版本使用sbioloadproject该模型加载到MATLAB和sbiodose要么getdose创建或编辑现有的剂量对象。

功能TumorGrowthInhibition_OpeningFcn(hObject,EVENTDATA,拉手,varargin)%创建和初始化剂量 - 非部署的版本%负载项目PROJ = sbioloadproject('TumorGrowthModel.sbproj');m1 = proj.m1;%获取量1D1 = getdose(M1,“药物A”);%获取量2D2 = getdose(M1,“药物B”);

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

功能TumorGrowthInhibition_OpeningFcn(hObject,EVENTDATA,拉手,varargin)%创建和初始化剂量 - 部署版本%负载模型PROJ =负载('modelFile.mat');M1 = proj.exportedModel;%获取量1D1 = getdose(M1,“药物A”);%获取量2D2 = getdose(M1,“药物B”);

CellLine_POPUP_Callback当用户选择从弹出式菜单中的细胞系被调用。此功能是负责制定适当的根据用户的选择的细胞系参数。在该模型的非出口版本,这是通过一个调用选择适当的变体完成sbioselect

功能CellLine_POPUP_Callback (hObject eventdata处理)%设定合适的细胞系名称不变 - 非展开版本细胞株= sbioselect(型号,'类型',“变种”,'名称',cellLineName);

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

功能CellLine_POPUP_Callback (hObject eventdata处理)%  %设置适当的细胞系参数——部署版本%获取当前L1和L0值L1 = model.ValueInfo(getIndex(型号,'L1'));L0 = model.ValueInfo(getIndex(型号,'L0'));开关cellLineName案件“细胞株1”10。InitialValue = 0.141;L1。InitialValue = 0.282;案件《细胞株2》10。InitialValue = 0.142;L1。InitialValue = 0.284;案件“细胞系3”L0.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处理)%设定剂量对象的设置 - 非展开版本%直接设置TimeUnits和间隔dose1。TimeUnits = TimeUnits;dose1。间隔= str2double (get (handles.EveryValue1_EDIT,'串'));%转换开始时间从白天到新TimeUnitsdose1.StartTime = sbiounitcalculator('天',dose1.TimeUnits,str2double(获得(handles.StartTime1_编辑,'串')));

在部署的应用程序,TimeUnits是的只读属性剂量对象,所以不能直接设置。我们使用sbiounitcalculator将剂量间隔转换为剂量的现有时间单位。

功能Dosage1_EDIT_Callback (hObject eventdata处理)% %设置剂量对象的设置-部署版本%不能设置时间单位;使用sbiounitcalculator转换时间间隔dose1.Interval = sbiounitcalculator('天'、dose1.TimeUnits str2double (get(处理。EveryValue1_编辑,'串')));%转换开始时间从白天到新TimeUnitsdose1.StartTime = sbiounitcalculator('天',dose1.TimeUnits,str2double(获得(handles.StartTime1_编辑,'串')));

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

功能SimTumorGrowth_PUSHBUTTON_Callback(hObject,EVENTDATA,手柄)%仿真模型及获得肿瘤图谱 - 非部署的版本SD = sbiosimulate(型号,[细胞株,phiVar],[dose1,dose2]);[currResults.Time,currResults.Tumor] = selectbyname(SD,' w ');

对于导出的模型,我们替换sbiosimulate模拟

功能SimTumorGrowth_PUSHBUTTON_Callback(hObject,EVENTDATA,手柄)% %模拟模型&获取肿瘤配置文件——部署版本SD =模拟(模型,initValues,[dose1,dose2]);[currResults.Time,currResults.Tumor] = 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 {彩色(“深橙”), b});追加(rpt, h);p = add (rpt,段落)'*使用MATLAB报表生成器4.0(R2014b)自动生成。'));p.Style = {的FontFamily(“宋体”)、字形大小(“10 pt”)};%%%%创建设置部分%%%%%% % 资料表= {...“细胞系:”,cellLineName {1};'初始肿瘤重量(g):',initialTumorWeight};表=表(大小(表资料,1));追加(RPT,表);%%%%%创建结果区段%%%%%% % hFig =图;%瘤重轴hAxes = copyobj(handles.TumorWeight_AXES,hFig);集(hAxes,'单位',“归一化”);集(hAxes,'位置',[0.15 0.30 0.7 0.6];%的剂量轴hAxes = copyobj(handles.Dose_AXES,hFig);集(hAxes,'单位',“归一化”);集(hAxes,'位置',[0.15 0.15 0.7 0.15]);以英寸%设定尺寸集(hFig,'单位',“英寸”);Pos =得到(hFig,'位置');集(hFig,'位置', (Pos (1:2) 6 5));集(hFig,“PaperPosition”,[0 0 6 5]);%打印并追加到报告打印(hFig'-dmeta','plot1.emf');IMG =图像('plot1.emf');img.Width =“6英寸”;img.Height =“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(“——% s”,additionalFiles {:})];%执行| MCC |命令。的eval(mccCommand)

一旦编译完成,则用于与MATLAB编译器运行时(MCR)分配产生的可执行文件(.exe)。该MCR是一组共享库,使用户没有安装MATLAB的计算机上执行编译MATLAB应用程序。

摘要:应用工作流

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

1科赫,G.,沃尔兹A.,拉祜族,G.,和Schropp,J。(2009)建模肿瘤生长和组合疗法的抗癌效果。杂志药代动力学和药效学。36:179-197。

2在这个工作流程的第一步是建立和表征模型。这个步骤是由Koch等完成,而本文提供的方法的概述,它不进行详细描述。看到全面建设SimBiology模型详细了解此步骤。

3.基础的速率方程在图1中没有显示。请参阅科赫等人或下载SimBiology应用对模型和实现细节。

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

关于作者

梅艳芳Gajjala是MathWorks公司的顾问。她专门在生物技术和制药,能源,航空航天和国防等行业为客户创造自定义MATLAB应用程序。梅艳芳持有学士学位在康奈尔大学和M.S.的电气和计算机工程来自佐治亚理工学院的电气和计算机工程。

Asawari Samant是MathWorks公司的高级应用工程师。她专注于数据分析,并在生物技术和制药行业的计算生物学的应用。Asawari持有M.S.从特拉华大学和专业的学士学位化学工程从化学技术,孟买,印度研究所化学工程。

发布时间2014 - 92233v00


查看文章的相关能力

查看文章为相关行业