fit

Выполните оценку параметра с помощью объекта задачи SimBiology

Описание

пример

fitResults = fit(problemObject) выполняет оценку параметра с помощью модели, данных и опций, заданных problemObject и возвращает подходящие результаты.

[fitResults,simdataI] = fit(problemObject) также возвращает данные моделирования simdataI использование предполагаемых значений параметров. Если problemObject.FitFunction "sbiofitmixed", симуляции используют отдельные оценки параметра.

[fitResults,simdataI,simdataP] = fit(problemObject) также возвращает оценки параметра населения использования результатов симуляции. Этот синтаксис поддерживается только когда problemObject.FitFunction "sbiofitmixed".

Примеры

свернуть все

В этом примере показано, как оценить параметры 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.

Входные параметры

свернуть все

Проблема оценки SimBiology в виде fitproblem объект.

Выходные аргументы

свернуть все

Результаты оценки, возвращенные как скалярный OptimResults объект, NLINResults объект, вектор из OptimResults или NLINResults объекты или скалярный NLMEResults объект.

Возвращенный тип объекта результатов варьируется в зависимости от того, если вы использовали problemObject.FitFunction="sbiofit" или problemObject.FitFunction="sbiofitmixed".

  • Если FitFunction="sbiofit" и FunctionName="nlinfit", возвращенным типом объекта результатов является NLINResults. Для других оптимизационных функций типом возвращенного объекта является OptimResults .

  • Если FitFunction="sbiofitmixed", типом возвращенного объекта всегда является NLMEResults.

Когда вы используете FitFunction="sbiofit", функция возвращает или скалярный объект результатов или вектор из объектов результатов можно следующим образом.

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

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

Когда объединенная опция не задана, и CategoryVariableName значения estimatedInfo объектами является весь <none>, fitResults один объект результатов. Это - то же поведение как объединенная подгонка.

Когда объединенная опция не задана, и CategoryVariableName значения estimatedInfo объектами является весь <GroupVariableName>, fitResults вектор из объектов результатов. Это - то же поведение как необъединенная подгонка.

Во всех других случаях, fitResults скалярный объект, содержащий оцененные значения параметров для различных групп или категорий, заданных CategoryVariableName.

Смотрите свойство Pooled для получения дополнительной информации о том, как выполнить объединенный, необъединенный или подгонку категории.

Когда вы используете FitFunction="sbiofitmixed", функция всегда возвращает скалярный NLMEResults объект.

Результаты симуляции, возвращенные как вектор из SimData объекты, представляющие результаты симуляции для каждой группы (или индивидуум) использование отдельно-специфичных оценок параметра.

О состояниях сообщают в simDataI состояния, которые включены в problemObject.ResponseMap а также любые другие состояния, перечисленные в StatesToLog свойство опций во время выполнения (RuntimeOptions) из модели SimBiology problemObject.Model.

Результаты симуляции, возвращенные как вектор из SimData объекты, представляющие результаты симуляции для каждой группы (или индивидуум) использование только оценок фиксированного эффекта (оценки параметра населения).

О состояниях сообщают в simDataP состояния, которые включены в problemObject.ResponseMap а также любые другие состояния, перечисленные в StatesToLog свойство опций во время выполнения (RuntimeOptions) из модели SimBiology problemObject.Model.

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

| |

Введенный в R2021b