拟合多个体PK模型
使用双室模型估计多个个体的药代动力学参数。
假设您有来自三个个体的药物血浆浓度数据,您希望使用这些数据来估计相应的药代动力学参数,即中央和外周室的体积(中央
,外围
),清除率(Cl_Central
),以及间隔间清理(12个
).假设药物浓度随时间曲线呈双指数下降
,在那里Ct药物浓度是否及时t,一个而且b为对应指数下降的斜率。
合成数据集包含在中心区和外周区测量的药物血浆浓度数据。数据是使用双室模型生成的,注射剂量和一阶消除。这些参数被用于每个个体。
中央 |
外围 |
12个 |
Cl_Central |
|
---|---|---|---|---|
个人1 | 1.90 | 0.68 | 0.24 | 0.57 |
2个人 | 2.10 | 6.05 | 0.36 | 0.95 |
个人3 | 1.70 | 4.21 | 0.46 | 0.95 |
数据存储为带有变量的表ID
,时间
,CentralConc
,PeripheralConc
.它表示在输注剂量后,在中央和外周室的八个不同时间点测量的血浆浓度的时间过程。
负载(“data10_32R.mat”)
将数据集转换为agroupedData
对象,该对象是拟合函数所需的数据格式sbiofit
供以后使用。一个groupedData
对象还允许您设置自变量和组变量名(如果存在的话)。的单位ID
,时间
,CentralConc
,PeripheralConc
变量。单元是可选的,并且仅对UnitConversion
特性,自动将匹配的物理量转换为一致的单位系统。
gData = groupedData(data);gData.Properties.VariableUnits = {”,“小时”,毫克/升的,毫克/升的};gData。属性
ans = struct with fields: Description: " UserData: [] DimensionNames: {'Row' 'Variables'} VariableNames: {'ID' 'Time' 'CentralConc' 'PeripheralConc'} variabledescription: {} VariableUnits: {1x4 cell} variableccontinuity: [] RowNames: {} CustomProperties: [1x1 matlabl .tabular. tabular.]CustomProperties] GroupVariableName: 'ID'独立变量:'时间'
创建一个格子图,显示三个个体的PK配置文件。
sbiotrellis (gData“ID”,“时间”, {“CentralConc”,“PeripheralConc”},...“标记”,“+”,“线型”,“没有”);
利用内置的PK库构建一个双室模型,该模型具有注射剂量和一级消除,其中消除率取决于中心室的间隙和体积。使用configset对象打开单位转换。
pkmd = PKModelDesign;pkc1 = add隔间(pkmd,“中央”);pkc1。DosingType =“注入”;pkc1。EliminationType =“linear-clearance”;pkc1。HasResponseVariable = true;pkc2 = add隔间(pkmd,“外围”);Model = construct(pkmd);Configset = getconfigset(模型);configset.CompileOptions.UnitConversion = true;
假设每个人在时间= 0时接受输注剂量,总输注量为100mg,速度为50mg /小时。有关设置不同剂量策略的详细信息,请参见SimBiology模型中的剂量.
剂量= sbiodose(“剂量”,“TargetName”,“Drug_Central”);剂量。StartTime = 0;剂量。一个mount = 100; dose.Rate = 50; dose.AmountUnits =毫克的;剂量。时间Units =“小时”;剂量。RateUnits =“毫克/小时”;
数据包含在中央和周围区室测量的血浆浓度。将这些变量映射到适当的模型物种Drug_Central
而且Drug_Peripheral
.
responseMap = {'Drug_Central = CentralConc','Drug_Peripheral = PeripheralConc'};
在这个模型中要估计的参数是中心和外围隔室的体积(中央
而且外围
)、室间间隙12个
,及清除率Cl_Central
.在本例中,指定log-transform for中央
而且外围
因为它们被限制为正。的estimatedInfo
对象使您可以指定参数转换、初始值和参数边界(可选)。
paramsToEstimate = {“日志(中央)”,的日志(外围),“12”,“Cl_Central”};estimatedParam = estimatedInfo(paramsToEstimate,“InitialValue”,[1 1 1 1]);
将模型拟合到所有汇集在一起的数据,也就是说,为所有个体估计一组参数。默认的估计方法为sbiofit
用途将根据可用的工具箱而改变。看看是哪个估计函数sbiofit
用于配件,检查EstimationFunction
对应结果对象的属性。
pooledFit = sbiofit(模型,gData,responseMap,estimatedParam,剂量,“池”,真正的)
pooledFit = optimatedresults with properties: ExitFlag: 3 Output: [1x1 struct] GroupName: [] Beta: [4x3 table] ParameterEstimates: [4x3 table] J: [24x4x2 double] COVB: [4x4 double] CovarianceMatrix: [4x4 double] R: [24x2 double] MSE: 6.6220 SSE: 291.3688 Weights: [] LogLikelihood: -111.3904 AIC: 230.7808 BIC: 238.2656 DFE: 44 DependentFiles: {1x3 cell} EstimatedParameterNames: {'Central' 'Peripheral' 'Q12' 'Cl_Central'} ErrorModelInfo: [1x3 table] EstimationFunction: 'lsqnonlin'
将拟合结果与原始数据绘制成图。虽然生成了三个独立的图,但数据是用同一组参数拟合的(也就是说,所有三个个体都有相同的拟合线)。
情节(pooledFit);
为每个人估计一组参数,看看参数估计是否有任何改进。在这个例子中,因为有三个个体,所以估计了三组参数。
unpooledFit = sbiofit(模型,gData,responseMap,estimatedParam,剂量,“池”、假);
将拟合结果与原始数据绘制成图。每个个体都被以不同的方式拟合(也就是说,每条拟合的线对每个个体都是唯一的),而且每条线似乎都很适合个人数据。
情节(unpooledFit);
显示第一个个体的拟合结果。MSE低于合并拟合的MSE。另外两个人也是如此。
unpooledFit (1)
ans = optimatedresults with properties: ExitFlag: 3 Output: [1x1 struct] GroupName: 1 Beta: [4x3 table] ParameterEstimates: [4x3 table] J: [8x4x2 double] COVB: [4x4 double] CovarianceMatrix: [4x4 double] R: [8x2 double] MSE: 2.1380 SSE: 25.6559 Weights: [] LogLikelihood: -26.4805 AIC: 60.9610 BIC: 64.0514 DFE: 12 DependentFiles: {1x3 cell} EstimatedParameterNames: {'Central' 'Peripheral' 'Q12' 'Cl_Central'} ErrorModelInfo: [1x3 table] EstimationFunction: 'lsqnonlin'
生成随时间变化的残差图,以比较合并和未合并的拟合结果。该图表明未合并拟合的残差小于预期的合并拟合残差。除了比较残差之外,还可以使用其他严格的标准来比较拟合结果。
t = [gData.Time;gData.Time];res_pooled = vertcat(pooledFit.R);Res_pooled = Res_pooled (:);res_unpooled = vertcat(unpooledFit.R);Res_unpooled = Res_unpooled (:);情节(t, res_pooled“o”,“MarkerFaceColor”,' w ',“markerEdgeColor”,“b”)举行在情节(t, res_unpooled“o”,“MarkerFaceColor”,“b”,“markerEdgeColor”,“b”) refl = refine (0,0);表示残差为零的参考线标题(“剩余与时间”);包含(“时间”);ylabel (“残差”);传奇({“池”,未共享的});
这个例子展示了如何使用sbiofit
.如上图所示,未合并拟合解释了由于研究中特定主题而产生的变化,在这种情况下,模型更适合数据。但是,合并拟合返回总体范围的参数。如果你想在考虑个体变化的同时估计种群范围的参数,请使用sbiofitmixed
.