Подбор двухкамерной модели к профилям PK нескольких индивидуумов

Этот пример показывает, как оценить фармакокинетические параметры нескольких индивидуумов с помощью двухкамерной модели.

Предположим, что у вас есть данные о концентрации лекарственного средства в плазме от трёх индивидуумов, которые вы хотите использовать, чтобы оценить соответствующие фармакокинетические параметры, а именно объем центрального и периферического отделения (Central, Peripheral), коэффициент клиренса (Cl_Central) и межкомпартментальное разминирование (Q12). Предположим, что концентрация препарата в зависимости от временного профиля следует за биексоненциальным снижением Ct=Aeat+Bebt, где Ct - концентрация препарата в момент t, и a и b являются склонами для соответствующего экспоненциального снижения.

Синтетический набор данных содержит данные о концентрации лекарственного средства в плазме, измеренные как в центральном, так и в периферийном отсеках. Данные были сгенерированы с использованием двухкамерной модели с капельным внутривенным введением и первоклассным устранением. Эти параметры использовались для каждого индивидуума.

 CentralPeripheralQ12Cl_Central
Индивидуальный 11.900.680.240.57
Индивидуальный 22.106.050.360.95
Индивидуальный 31.704.210.460.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.

См. также

Похожие темы