Соответствуйте параметрам PK Используя SimBiology основанный на проблеме рабочий процесс

В этом примере показано, как оценить параметры PK модели SimBiology с помощью подхода, основанного на проблеме.

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

load('data10_32R.mat')

Преобразуйте набор данных в groupedData объект.

gData = groupedData(data);
gData.Properties.VariableUnits = ["","hour","milligram/liter","milligram/liter"];

Отобразите данные.

sbiotrellis(gData,"ID","Time",["CentralConc","PeripheralConc"],...
            Marker="+",LineStyle="none");

Figure contains 4 axes objects. Axes object 1 with title ID 1 contains 2 objects of type line. These objects represent CentralConc, PeripheralConc. Axes object 2 with title ID 3 contains 2 objects of type line. Axes object 3 with title ID 2 contains 2 objects of type line. Axes object 4 is empty.

Пользуйтесь встроенной библиотекой PK, чтобы создать модель 2D отсека с дозированием вливания и устранением первого порядка. Используйте объект configset включить модульное преобразование.

pkmd                 = PKModelDesign;
pkc1                 = addCompartment(pkmd,"Central");
pkc1.DosingType      = "Infusion";
pkc1.EliminationType = "linear-clearance";
pkc1.HasResponseVariable = true;
pkc2                 = addCompartment(pkmd,"Peripheral");
model2cpt            = construct(pkmd);
configset            = getconfigset(model2cpt);
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";

Создайте объект задачи.

problem = fitproblem
problem = 
  fitproblem with properties:

   Required:
                   Data: [0x0 groupedData]
              Estimated: [1x0 estimatedInfo]
            FitFunction: "sbiofit"
                  Model: [0x0 SimBiology.Model]
            ResponseMap: [1x0 string]

   Optional:
                  Doses: [0x0 SimBiology.Dose]
           FunctionName: "auto"
                Options: []
           ProgressPlot: 0
            UseParallel: 0
               Variants: [0x0 SimBiology.Variant]

   sbiofit options:
             ErrorModel: "constant"
                 Pooled: "auto"
    SensitivityAnalysis: "auto"
                Weights: []

Задайте необходимые свойства объекта.

problem.Data        = gData;
problem.Estimated   = estimatedInfo(["log(Central)","log(Peripheral)","Q12","Cl_Central"],InitialValue=[1 1 1 1]);
problem.Model       = model2cpt;
problem.ResponseMap = ["Drug_Central = CentralConc","Drug_Peripheral = PeripheralConc"];

Задайте дозу, которая будет применена во время подбора кривой.

problem.Doses        = dose;

Покажите прогресс оценки.

problem.ProgressPlot = true;

Подбирайте модель ко всем данным, объединенным вместе: то есть, оцените один набор параметров для всех индивидуумов путем установки Pooled свойство к true.

problem.Pooled      = true;

Выполните оценку с помощью fit функция объекта.

pooledFit = fit(problem);

Figure Progress Plot for lsqnonlin contains objects of type uicontrol.

Отобразите предполагаемые значения параметров.

pooledFit.ParameterEstimates
ans=4×3 table
         Name         Estimate    StandardError
    ______________    ________    _____________

    {'Central'   }     1.6627        0.16569   
    {'Peripheral'}     2.6864         1.0644   
    {'Q12'       }    0.44945        0.19943   
    {'Cl_Central'}    0.78497       0.095621   

Постройте подходящие результаты.

plot(pooledFit);

Figure contains 4 axes objects. Axes object 1 is empty. Axes object 2 with title 3 contains 4 objects of type line. Axes object 3 with title 2 contains 4 objects of type line. Axes object 4 with title 1 contains 4 objects of type line.

Оцените один набор параметров для каждого индивидуума и смотрите, улучшаются ли оценки параметра.

problem.Pooled  = false;
unpooledFit     = fit(problem);

Figure Progress Plot for lsqnonlin contains 5 axes objects and other objects of type uicontrol, uipanel. Axes object 1 with title Termination Conditions contains an object of type text. These objects represent Failed, Converged. Axes object 2 with title Final Estimated Parameter Values contains an object of type histogram. Axes object 3 with title Final Estimated Parameter Values contains an object of type histogram. Axes object 4 with title Final Estimated Parameter Values contains an object of type histogram. Axes object 5 with title Final Estimated Parameter Values contains an object of type histogram.

Отобразите предполагаемые значения параметров.

unpooledFit.ParameterEstimates
ans=4×3 table
         Name         Estimate    StandardError
    ______________    ________    _____________

    {'Central'   }      1.422        0.12334   
    {'Peripheral'}     1.5619        0.36355   
    {'Q12'       }    0.47163        0.15196   
    {'Cl_Central'}     0.5291       0.036978   

ans=4×3 table
         Name         Estimate    StandardError
    ______________    ________    _____________

    {'Central'   }     1.8322       0.019672   
    {'Peripheral'}     5.3364        0.65327   
    {'Q12'       }     0.2764       0.030799   
    {'Cl_Central'}    0.86035       0.026257   

ans=4×3 table
         Name         Estimate    StandardError
    ______________    ________    _____________

    {'Central'   }     1.6657       0.038529   
    {'Peripheral'}     5.5632        0.37063   
    {'Q12'       }    0.78361       0.058657   
    {'Cl_Central'}     1.0233       0.027311   

plot(unpooledFit);

Figure contains 4 axes objects. Axes object 1 is empty. Axes object 2 with title 3 contains 4 objects of type line. Axes object 3 with title 2 contains 4 objects of type line. Axes object 4 with title 1 contains 4 objects of type line.

Сгенерируйте график остаточных значений в зависимости от времени, чтобы сравнить объединенные и необъединенные результаты подгонки. Фигура указывает, что необъединенные подходящие остаточные значения меньше, чем те из объединенной подгонки, как ожидалось. В дополнение к сравнению остаточных значений другие строгие критерии могут использоваться, чтобы сравнить подходящие результаты.

t = [gData.Time;gData.Time];
res_pooled = vertcat(pooledFit.R);
res_pooled = res_pooled(:);
res_unpooled = vertcat(unpooledFit.R);
res_unpooled = res_unpooled(:);
figure;
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"]);

Figure contains an axes object. The axes object with title Residuals versus Time contains 3 objects of type line. These objects represent Pooled, Unpooled.

Как проиллюстрировано, необъединенная подгонка составляет изменения из-за определенных предметов в исследовании, и, в этом случае, модель соответствует лучше к данным. Однако объединенная подгонка возвращает параметры всего населения. Как альтернатива, если вы хотите оценить параметры всего населения при рассмотрении отдельных изменений, можно выполнить нелинейные смешанные эффекты (NLME) оценка установкой problem.FitFunction к sbiofitmixed.

problem.FitFunction = "sbiofitmixed";
NLMEResults = fit(problem);

Figure contains 9 axes objects. Axes object 1 with title theta1 contains an object of type line. Axes object 2 with title theta2 contains an object of type line. Axes object 3 with title theta3 contains an object of type line. Axes object 4 with title theta4 contains an object of type line. Axes object 5 with title Psi indexOf 1 _ 1 baseline contains an object of type line. Axes object 6 with title Psi indexOf 2 _ 2 baseline contains an object of type line. Axes object 7 with title Psi indexOf 3 _ 3 baseline contains an object of type line. Axes object 8 with title Psi indexOf 4 _ 4 baseline contains an object of type line. Axes object 9 with title loglikelihood contains an object of type line.

Отобразите предполагаемые значения параметров.

NLMEResults.IndividualParameterEstimates
ans=12×3 table
    Group         Name         Estimate
    _____    ______________    ________

      1      {'Central'   }     1.4623 
      1      {'Peripheral'}     1.5306 
      1      {'Q12'       }     0.4587 
      1      {'Cl_Central'}    0.53208 
      2      {'Central'   }      1.783 
      2      {'Peripheral'}     6.6623 
      2      {'Q12'       }     0.3589 
      2      {'Cl_Central'}     0.8039 
      3      {'Central'   }     1.7135 
      3      {'Peripheral'}     4.2844 
      3      {'Q12'       }    0.54895 
      3      {'Cl_Central'}     1.0708 

Постройте подходящие результаты.

plot(NLMEResults);

Figure contains 4 axes objects. Axes object 1 is empty. Axes object 2 with title 3 contains 4 objects of type line. Axes object 3 with title 2 contains 4 objects of type line. Axes object 4 with title 1 contains 4 objects of type line.

Постройте взвешенные остаточные значения условного выражения (CWRES), и индивидуум взвесил остаточные значения (IWRES) ожидаемых значений модели.

plotResiduals(NLMEResults,'predictions')

Figure contains 2 axes objects. Axes object 1 contains 3 objects of type line. Axes object 2 contains 3 objects of type line.

Смотрите также