exponenta event banner

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

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

Предположим, что у вас есть данные о концентрации лекарственного средства в плазме от трех человек, которые вы хотите использовать для оценки соответствующих фармакокинетических параметров, а именно объема центрального и периферического отделения (Central, Peripheral), скорость клиренса (Cl_Central) и межотраслевой клиренс (Q12). Предположим, что концентрация лекарственного средства по сравнению с профилем времени следует за бикспоненциальным снижением Ct = Ae при + Be − bt, где 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'

Создайте решетчатый график, показывающий профили ПК трех отдельных пользователей.

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.

См. также

Связанные темы