Этот пример показывает, как оценить фармакокинетические параметры нескольких индивидуумов с помощью двухкамерной модели.
Предположим, что у вас есть данные о концентрации лекарственного средства в плазме от трёх индивидуумов, которые вы хотите использовать, чтобы оценить соответствующие фармакокинетические параметры, а именно объем центрального и периферического отделения (Central
, Peripheral
), коэффициент клиренса (Cl_Central
) и межкомпартментальное разминирование (Q12
). Предположим, что концентрация препарата в зависимости от временного профиля следует за биексоненциальным снижением , где 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'
Создайте график шпалеры, которая показывает профили PK трёх индивидуумов.
sbiotrellis(gData,'ID','Time',{'CentralConc','PeripheralConc'},... 'Marker','+','LineStyle','none');
Используйте встроенную библиотеку PK для создания двухкамерной модели с инфузионным дозированием и устранением первого порядка, где скорость устранения зависит от зазора и объема центрального отделения. Используйте объект 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
.