Этот пример показывает, как оценить фармакокинетические параметры нескольких людей с использованием двухкамерной модели.
Предположим, что у вас есть данные о концентрации лекарственного средства в плазме от трех человек, которые вы хотите использовать для оценки соответствующих фармакокинетических параметров, а именно объема центрального и периферического отделения (Central, Peripheral), скорость клиренса (Cl_Central) и межотраслевой клиренс (Q12). Предположим, что концентрация лекарственного средства по сравнению с профилем времени следует за бикспоненциальным снижением Be − bt, где Ct - концентрация лекарственного средства в момент t, а a и b - наклоны для соответствующих экспоненциальных понижений.
Набор синтетических данных содержит данные концентрации лекарственного средства в плазме, измеренные как в центральном, так и в периферическом отсеках. Данные были получены с использованием двухкамерной модели с инфузионной дозой и элиминацией первого порядка. Эти параметры использовались для каждого человека.
Central | Peripheral | Q12 | 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, Time, CentralConc, и PeripheralConc. Он представляет собой временной ход концентраций в плазме, измеренных в восемь различных моментов времени как для центрального, так и для периферического отделения после инфузионной дозы.
load('data10_32R.mat')
Преобразовать набор данных в groupedData объект, который является требуемым форматом данных для функции фитинга sbiofit для последующего использования. A groupedData объект также позволяет задавать независимые имена переменных и групп (если они существуют). Установка единиц измерения ID, Time, CentralConc, и PeripheralConc переменные. Установки являются необязательными и обязательными только для UnitConversion функция, которая автоматически преобразует соответствующие физические величины в одну согласованную систему единиц измерения.
gData = groupedData(data);
gData.Properties.VariableUnits = {'','hour','milligram/liter','milligram/liter'};
gData.Properties
ans =
struct with fields:
Description: ''
UserData: []
DimensionNames: {'Row' 'Variables'}
VariableNames: {'ID' 'Time' 'CentralConc' 'PeripheralConc'}
VariableDescriptions: {}
VariableUnits: {1x4 cell}
VariableContinuity: []
RowNames: {}
CustomProperties: [1x1 matlab.tabular.CustomProperties]
GroupVariableName: 'ID'
IndependentVariableName: 'Time'
Создайте решетчатый график, показывающий профили ПК трех отдельных пользователей.
sbiotrellis(gData,'ID','Time',{'CentralConc','PeripheralConc'},... 'Marker','+','LineStyle','none');

Используйте встроенную библиотеку ПК для построения двухкамерной модели с инфузионным дозированием и устранением первого порядка, где скорость устранения зависит от зазора и объема центрального отсека. Используйте объект configset для включения преобразования единиц измерения.
pkmd = PKModelDesign; pkc1 = addCompartment(pkmd,'Central'); pkc1.DosingType = 'Infusion'; pkc1.EliminationType = 'linear-clearance'; pkc1.HasResponseVariable = true; pkc2 = addCompartment(pkmd,'Peripheral'); model = construct(pkmd); configset = getconfigset(model); configset.CompileOptions.UnitConversion = true;
Предположим, что каждый человек получает инфузионную дозу в момент времени = 0, с общим инфузионным количеством 100 мг при скорости 50 мг/час. Для получения подробной информации о настройке различных стратегий дозирования см. Дозы в моделях SimBiology.
dose = sbiodose('dose','TargetName','Drug_Central'); dose.StartTime = 0; dose.Amount = 100; dose.Rate = 50; dose.AmountUnits = 'milligram'; dose.TimeUnits = 'hour'; dose.RateUnits = 'milligram/hour';
Данные содержат измеренные концентрации в плазме в центральном и периферийном отсеках. Сопоставьте эти переменные с соответствующими модельными видами, которые являются Drug_Central и Drug_Peripheral.
responseMap = {'Drug_Central = CentralConc','Drug_Peripheral = PeripheralConc'};
Параметрами для оценки в этой модели являются объемы центрального и периферийного отсеков (Central и Peripheral), межотраслевой клиренс Q12и степень очистки Cl_Central. В этом случае укажите преобразование журнала для Central и Peripheral поскольку они ограничены положительными. estimatedInfo объект позволяет задать преобразования параметров, начальные значения и границы параметров (необязательно).
paramsToEstimate = {'log(Central)','log(Peripheral)','Q12','Cl_Central'};
estimatedParam = estimatedInfo(paramsToEstimate,'InitialValue',[1 1 1 1]);
Подберите модель для всех данных, объединенных вместе, то есть оцените один набор параметров для всех пользователей. Метод оценки по умолчанию, который sbiofit использование будет изменяться в зависимости от доступных панелей инструментов. Просмотр функции оценки sbiofit используется для фитинга, проверьте EstimationFunction свойства соответствующего объекта результатов.
pooledFit = sbiofit(model,gData,responseMap,estimatedParam,dose,'Pooled',true)
pooledFit =
OptimResults 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'
Постройте график соответствия результатов исходным данным. Хотя были созданы три отдельных графика, данные были подстроены с использованием одного и того же набора параметров (то есть все три человека имели одинаковую подгоняемую линию).
plot(pooledFit);

Оцените один набор параметров для каждого индивидуума и проверьте, есть ли какие-либо улучшения в оценках параметров. В этом примере, поскольку существует три индивидуума, оцениваются три набора параметров.
unpooledFit = sbiofit(model,gData,responseMap,estimatedParam,dose,'Pooled',false);
Постройте график соответствия результатов исходным данным. Каждый индивидуум был подогнан по-разному (то есть каждая подогнанная линия уникальна для каждого индивидуума), и каждая строка, по-видимому, хорошо соответствовала отдельным данным.
plot(unpooledFit);

Просмотрите соответствующие результаты первого отдельного пользователя. MSE был ниже, чем у объединенной посадки. Это также справедливо для двух других лиц.
unpooledFit(1)
ans =
OptimResults 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(:); plot(t,res_pooled,'o','MarkerFaceColor','w','markerEdgeColor','b') hold on plot(t,res_unpooled,'o','MarkerFaceColor','b','markerEdgeColor','b') refl = refline(0,0); % A reference line representing a zero residual title('Residuals versus Time'); xlabel('Time'); ylabel('Residuals'); legend({'Pooled','Unpooled'});

В этом примере показано, как выполнять объединенные и незаполненные оценки с использованием sbiofit. Как показано, незаполненная подгонка учитывает вариации из-за конкретных субъектов в исследовании, и в этом случае модель лучше подходит к данным. Однако объединенная подгонка возвращает параметры для всего населения. Если требуется оценить параметры для всего населения с учетом отдельных вариаций, используйте sbiofitmixed.