exponenta event banner

sbiofit

Выполните нелинейный метод наименьших квадратов регрессию

Для этой функции рекомендованы Statistics and Machine Learning Toolbox™, Optimization Toolbox™ и Global Optimization Toolbox.

Описание

пример

fitResults = sbiofit(sm,grpData,responseMap,estiminfo) оценивает параметры модели SimBiology sm использование нелинейного метода наименьших квадратов регрессии.

grpData является groupedData object определение подходящих данных. responseMap определяет отображение между компонентами модели и данными отклика в grpData. estimatedInfo является EstimatedInfo object который определяет оценочные параметры в модели sm. fitResults является OptimResults object или NLINResults object или вектор этих объектов.

sbiofit использует первую доступную функцию оценки среди следующих: lsqnonlin (Optimization Toolbox), nlinfit (Statistics and Machine Learning Toolbox), или fminsearch.

По умолчанию каждая группа в grpData подгоняется отдельно, получая оценки параметров для конкретной группы. Если модель содержит активные дозы и варианты, они применяются перед симуляцией.

пример

fitResults = sbiofit(sm,grpData,responseMap,estiminfo,dosing) использует информацию о дозах, заданную матрицей объектов дозы SimBiology dosing вместо использования активных доз модели sm если таковые имеются.

пример

fitResults = sbiofit(sm,grpData,responseMap,estiminfo,dosing,functionName) использует функцию оценки, заданную как functionName. Если указанная функция недоступна, выдается предупреждение, и используется первая доступная функция по умолчанию.

пример

fitResults = sbiofit(sm,grpData,responseMap,estiminfo,dosing,functionName,options) использует дополнительные опции, заданные options для функции functionName.

пример

fitResults = sbiofit(sm,grpData,responseMap,estiminfo,dosing,functionName,options,variants) применяет объекты вариантов, заданные как variants вместо использования любых активных вариантов модели.

пример

fitResults = sbiofit(_,Name,Value) использует дополнительные опции, заданные одним или несколькими Name,Value аргументы в виде пар.

пример

[fitResults,simdata] = sbiofit(_) также возвращает вектор объектов SimData simdata использование любого из входных параметров в предыдущих синтаксисах.

Примечание

  • sbiofit объединяет sbionlinfit и sbioparamestim функции оценки. Использовать sbiofit для выполнения нелинейного метода наименьших квадратов регрессии.

  • sbiofit моделирует модель с помощью a SimFunction object, который автоматически ускоряет симуляции по умолчанию. Следовательно, нет необходимости бежать sbioaccelerate перед вызовом sbiofit.

Примеры

свернуть все

Фон

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

Предположим, что у вас есть данные о концентрации лекарственного средства в плазме от индивидуума и вы хотите оценить объем центрального отделения и зазор. Предположим, что концентрация препарата в зависимости от временного профиля следует за моноэкспоненциальным снижением Ct=C0e-ket, где Ct - концентрация препарата в момент t, C0 является начальной концентрацией, и ke - константа скорости устранения, которая зависит от зазора и объема центрального отсека ke=Cl/V.

Синтетические данные в этом примере были сгенерированы с использованием следующей модели, параметров и дозы:

  • Однокамерная модель с болюсным дозированием и устранением первого порядка

  • Объем центрального отсека (Central) = 1,70 л

  • Параметр зазора (Cl_Central) = 0,55 л/час

  • Модель постоянной ошибки

  • Болусовая доза 10 мг

Загрузка данных и визуализация

Данные хранятся как таблица с переменными Time и Conc которые представляют временное течение концентрации индивидуума в плазме после внутривенного болюсного введения, измеренное в 13 различных временных точках. Переменные модули для Time и Conc час и миллиграмм/литр, соответственно.

clear all
load('data15.mat')
plot(data.Time,data.Conc,'b+')
xlabel('Time (hour)');
ylabel('Drug Concentration (milligram/liter)');

Figure contains an axes. The axes contains an object of type line.

Преобразование в формат сгруппированных данных

Преобразуйте набор данных в groupedData объект, который является необходимым форматом данных для функции аппроксимации sbiofit для дальнейшего использования. A groupedData Объект также позволяет задать независимые имена переменных и групп (если они существуют). Установите модули Time и Conc переменные. Модули являются необязательными и требуются только для UnitConversion функция, которая автоматически преобразует совпадающие физические величины в одну последовательную единичную систему.

gData = groupedData(data);
gData.Properties.VariableUnits = {'hour','milligram/liter'};
gData.Properties
ans = struct with fields:
                Description: ''
                   UserData: []
             DimensionNames: {'Row'  'Variables'}
              VariableNames: {'Time'  'Conc'}
       VariableDescriptions: {}
              VariableUnits: {'hour'  'milligram/liter'}
         VariableContinuity: []
                   RowNames: {}
           CustomProperties: [1x1 matlab.tabular.CustomProperties]
          GroupVariableName: ''
    IndependentVariableName: 'Time'

groupedData автоматическая установка имени IndependentVariableName свойство для Time переменная данных.

Создайте модель с одним отсеком

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

pkmd                    = PKModelDesign;
pkc1                    = addCompartment(pkmd,'Central');
pkc1.DosingType         = 'Bolus';
pkc1.EliminationType    = 'linear-clearance';
pkc1.HasResponseVariable = true;
model                   = construct(pkmd);
configset               = getconfigset(model);
configset.CompileOptions.UnitConversion = true;

Для получения дополнительной информации о создании компартментных моделей PK с помощью встроенной библиотеки SimBiology ®, смотрите, Создают Фармакокинетические модели.

Определите дозирование

Задайте одну дозу болюса 10 миллиграммов, заданную во время = 0. Для получения дополнительной информации о настройке различных графиков дозирования, смотрите Дозы в SimBiology Моделях.

dose                = sbiodose('dose');
dose.TargetName     = 'Drug_Central';
dose.StartTime      = 0;
dose.Amount         = 10;
dose.AmountUnits    = 'milligram';
dose.TimeUnits      = 'hour';

Сопоставьте данные отклика с соответствующим компонентом модели

Данные содержат данные о концентрации препарата, хранящиеся в Conc переменная. Эти данные соответствуют Drug_Central виды в модели. Поэтому сопоставьте данные с Drug_Central следующим образом.

responseMap = {'Drug_Central = Conc'};

Задайте параметры для оценки

Параметрами, подходящими в этой модели, являются объем центрального отсека (Central) и скорость зазора (Cl_Central). В этом случае задайте логарифмическое преобразование для этих биологических параметров, поскольку они ограничены, чтобы быть положительными. The estimatedInfo Объект позволяет при необходимости задать преобразования параметров, начальные значения и ограничения параметров.

paramsToEstimate    = {'log(Central)','log(Cl_Central)'};
estimatedParams     = estimatedInfo(paramsToEstimate,'InitialValue',[1 1],'Bounds',[1 5;0.5 2]);

Оценка параметров

Теперь, когда вы определили модель с одним отделением, данные для подгонки, сопоставили данные отклика, параметры для оценки и дозирования, используйте sbiofit для оценки параметров. Функция оценки по умолчанию, которая sbiofit использование будет изменяться в зависимости от того, какие тулбоксы доступны. Чтобы увидеть, какая функция использовалась во время подбора кривой, проверьте EstimationFunction свойство соответствующего объекта результатов.

fitConst = sbiofit(model,gData,responseMap,estimatedParams,dose);

Отображение предполагаемых параметров и результатов построения графика

Обратите внимание, что оценки параметров были недалеко от истинных значений (1,70 и 0,55), которые использовались для генерации данных. Можно также попробовать различные модели ошибок, чтобы увидеть, могут ли они еще больше улучшить оценки параметров.

fitConst.ParameterEstimates
ans=2×4 table
         Name         Estimate    StandardError      Bounds  
    ______________    ________    _____________    __________

    {'Central'   }     1.6993       0.034821         1      5
    {'Cl_Central'}    0.53358        0.01968       0.5      2

s.Labels.XLabel     = 'Time (hour)';
s.Labels.YLabel     = 'Concentration (milligram/liter)';
plot(fitConst,'AxesStyle',s);

Figure contains an axes. The axes with title Group One group contains 2 objects of type line. These objects represent OBS1 (Conc), PRED1 (Central.Drug_Central).

Использование различных моделей ошибок

Попробуйте три другие поддерживаемые модели ошибок (пропорциональные, комбинация постоянных и пропорциональных моделей ошибок и экспоненциальные).

fitProp = sbiofit(model,gData,responseMap,estimatedParams,dose,...
                      'ErrorModel','proportional');
fitExp  = sbiofit(model,gData,responseMap,estimatedParams,dose,...
                      'ErrorModel','exponential');
fitComb = sbiofit(model,gData,responseMap,estimatedParams,dose,...
                      'ErrorModel','combined');

Используйте веса вместо модели ошибки

Можно задать веса как числовую матрицу, где количество столбцов соответствует количеству откликов. Установка всех весов равной 1 эквивалентна модели постоянной ошибки.

weightsNumeric = ones(size(gData.Conc));
fitWeightsNumeric = sbiofit(model,gData,responseMap,estimatedParams,dose,'Weights',weightsNumeric);

Также можно использовать указатель на функцию, который принимает вектор предсказанных значений отклика и возвращает вектор весов. В этом примере используйте указатель на функцию, который эквивалентен пропорциональной модели ошибки.

weightsFunction = @(y) 1./y.^2;
fitWeightsFunction = sbiofit(model,gData,responseMap,estimatedParams,dose,'Weights',weightsFunction);

Сравнение информационных критериев для выбора модели

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

allResults = [fitConst,fitWeightsNumeric,fitWeightsFunction,fitProp,fitExp,fitComb];
errorModelNames = {'constant error model','equal weights','proportional weights', ...
                   'proportional error model','exponential error model',...
                   'combined error model'};
LogLikelihood = [allResults.LogLikelihood]';
AIC = [allResults.AIC]';
BIC = [allResults.BIC]';
t = table(LogLikelihood,AIC,BIC);
t.Properties.RowNames = errorModelNames;
t
t=6×3 table
                                LogLikelihood      AIC        BIC  
                                _____________    _______    _______

    constant error model            3.9866       -3.9732    -2.8433
    equal weights                   3.9866       -3.9732    -2.8433
    proportional weights           -3.8472        11.694     12.824
    proportional error model       -3.8257        11.651     12.781
    exponential error model         1.1984        1.6032     2.7331
    combined error model            3.9163       -3.8326    -2.7027

Основываясь на информационных критериях, постоянная модель ошибки (или равные веса) лучше всего подходит для данных, поскольку она имеет самое большое значение логарифмической правдоподобности и самые маленькие AIC и BIC.

Отображение предполагаемых значений параметров

Покажите оцененные значения параметров каждой модели.

Estimated_Central       = zeros(6,1);
Estimated_Cl_Central    = zeros(6,1);
t2 = table(Estimated_Central,Estimated_Cl_Central);
t2.Properties.RowNames = errorModelNames;
for i = 1:height(t2)
    t2{i,1} = allResults(i).ParameterEstimates.Estimate(1);
    t2{i,2} = allResults(i).ParameterEstimates.Estimate(2);
end
t2
t2=6×2 table
                                Estimated_Central    Estimated_Cl_Central
                                _________________    ____________________

    constant error model             1.6993                0.53358       
    equal weights                    1.6993                0.53358       
    proportional weights             1.9045                0.51734       
    proportional error model         1.8777                0.51147       
    exponential error model          1.7872                0.51701       
    combined error model             1.7008                0.53271       

Заключение

Этот пример показал, как оценить параметры PK, а именно объем центрального отсека и параметр зазора индивидуума, путем подгонки данных профиля PK к модели с одним отсеком. Вы сравнили информационные критерии каждой модели и оцененные значения параметров различных моделей ошибок, чтобы увидеть, какая модель лучше всего объяснила данные. Окончательные подгоняемые результаты позволили предположить, что как постоянная, так и комбинированная модели ошибок предоставили самые близкие оценки значениям параметров, используемым для генерации данных. Однако модель постоянной ошибки является лучшей моделью, на которую указывает логарифмическую правдоподобность, AIC и информационные критерии BIC.

Предположим, что у вас есть данные о концентрации лекарственного средства в плазме от трёх индивидуумов, которые вы хотите использовать, чтобы оценить соответствующие фармакокинетические параметры, а именно объем центрального и периферического отделения (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.

В этом примере показано, как оценить специфичные для категории (такие как молодые от старых, мужские от женских), индивидуальные и общегосударственные параметры, используя данные профиля PK от нескольких индивидуумов.

Фон

Предположим, что у вас есть данные о концентрации лекарственного средства в плазме от 30 индивидуумов, и вы хотите оценить фармакокинетические параметры, а именно объемы центрального и периферического отделения, клиренс и межкомпартментарный клиренс. Предположим, что концентрация препарата в зависимости от временного профиля следует за биексоненциальным снижением Ct=Ae-at+Be-bt, где Ct - концентрация лекарственного средства в момент t, и a и b являются склонами для соответствующего экспоненциального падения.

Загрузка данных

Эти синтетические данные содержат временное течение концентраций в плазме 30 индивидуумов после болюсной дозы (100 мг), измеренной в разное время как для центрального, так и для периферического отделения. Он также содержит категориальные переменные, а именно Sex и Age.

clear
load('sd5_302RAgeSex.mat')

Преобразование в формат сгруппированных данных

Преобразуйте набор данных в groupedData объект, который является необходимым форматом данных для функции аппроксимации sbiofit. A groupedData объект также позволяет вам задать независимые имена переменных и групп (если они существуют). Установите модули ID, Time, CentralConc, PeripheralConc, Age, и Sex переменные. Модули являются необязательными и требуются только для UnitConversion функция, которая автоматически преобразует совпадающие физические величины в одну последовательную единичную систему.

gData = groupedData(data);
gData.Properties.VariableUnits = {'','hour','milligram/liter','milligram/liter','',''};
gData.Properties
ans = struct with fields:
                Description: ''
                   UserData: []
             DimensionNames: {'Row'  'Variables'}
              VariableNames: {1x6 cell}
       VariableDescriptions: {}
              VariableUnits: {1x6 cell}
         VariableContinuity: []
                   RowNames: {}
           CustomProperties: [1x1 matlab.tabular.CustomProperties]
          GroupVariableName: 'ID'
    IndependentVariableName: 'Time'

The IndependentVariableName и GroupVariableName свойства были автоматически установлены на Time и ID переменные данных.

Визуализация данных

Отображение данных отклика для каждого индивидуума.

t = sbiotrellis(gData,'ID','Time',{'CentralConc','PeripheralConc'},...
                'Marker','+','LineStyle','none');
% Resize the figure.
t.hFig.Position(:) = [100 100 1280 800];

Figure contains 30 axes. Axes 1 with title ID 1 contains 2 objects of type line. These objects represent CentralConc, PeripheralConc. Axes 2 with title ID 6 contains 2 objects of type line. Axes 3 with title ID 11 contains 2 objects of type line. Axes 4 with title ID 16 contains 2 objects of type line. Axes 5 with title ID 21 contains 2 objects of type line. Axes 6 with title ID 26 contains 2 objects of type line. Axes 7 with title ID 2 contains 2 objects of type line. Axes 8 with title ID 7 contains 2 objects of type line. Axes 9 with title ID 12 contains 2 objects of type line. Axes 10 with title ID 17 contains 2 objects of type line. Axes 11 with title ID 22 contains 2 objects of type line. Axes 12 with title ID 27 contains 2 objects of type line. Axes 13 with title ID 3 contains 2 objects of type line. Axes 14 with title ID 8 contains 2 objects of type line. Axes 15 with title ID 13 contains 2 objects of type line. Axes 16 with title ID 18 contains 2 objects of type line. Axes 17 with title ID 23 contains 2 objects of type line. Axes 18 with title ID 28 contains 2 objects of type line. Axes 19 with title ID 4 contains 2 objects of type line. Axes 20 with title ID 9 contains 2 objects of type line. Axes 21 with title ID 14 contains 2 objects of type line. Axes 22 with title ID 19 contains 2 objects of type line. Axes 23 with title ID 24 contains 2 objects of type line. Axes 24 with title ID 29 contains 2 objects of type line. Axes 25 with title ID 5 contains 2 objects of type line. Axes 26 with title ID 10 contains 2 objects of type line. Axes 27 with title ID 15 contains 2 objects of type line. Axes 28 with title ID 20 contains 2 objects of type line. Axes 29 with title ID 25 contains 2 objects of type line. Axes 30 with title ID 30 contains 2 objects of type line.

Настройте двухкамерную модель

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

pkmd                                    = PKModelDesign;
pkc1                                    = addCompartment(pkmd,'Central');
pkc1.DosingType                         = 'Bolus';
pkc1.EliminationType                    = 'linear-clearance';
pkc1.HasResponseVariable                = true;
pkc2                                    = addCompartment(pkmd,'Peripheral');
model                                   = construct(pkmd);
configset                               = getconfigset(model);
configset.CompileOptions.UnitConversion = true;

Для получения дополнительной информации о создании компартментных моделей PK с помощью встроенной библиотеки SimBiology ®, смотрите, Создают Фармакокинетические модели.

Определите дозирование

Предположим, что каждый индивидуум получит болюсную дозу 100 мг во время = 0. Для получения дополнительной информации о настройке различных стратегий дозирования, смотрите Дозы в SimBiology Моделей.

dose             = sbiodose('dose','TargetName','Drug_Central');
dose.StartTime   = 0;
dose.Amount      = 100;
dose.AmountUnits = 'milligram';
dose.TimeUnits   = 'hour';

Сопоставьте данные отклика с соответствующими компонентами модели

Данные содержат измеренную концентрацию плазмы в центральном и периферийном отсеках. Сопоставьте эти переменные с соответствующими компонентами модели, которые Drug_Central и Drug_Peripheral.

responseMap = {'Drug_Central = CentralConc','Drug_Peripheral = PeripheralConc'};

Задайте параметры для оценки

Укажите объемы центрального и периферийного отсеков Central и Peripheral, межкомпартментное разминирование Q12, и зазор Cl_Central как параметры для оценки. The estimatedInfo позволяет вам опционально задать преобразования параметров, начальные значения и ограничения параметров. Начиная с обоих Central и Peripheral ограничены, чтобы быть положительным, задайте логарифмическое преобразование для каждого параметра.

paramsToEstimate    = {'log(Central)', 'log(Peripheral)', 'Q12', 'Cl_Central'};
estimatedParam      = estimatedInfo(paramsToEstimate,'InitialValue',[1 1 1 1]);

Оценка индивидуально специфичных параметров

Оцените один набор параметров для каждого индивидуума путем установки 'Pooled' аргумент пары "имя-значение" в false.

unpooledFit =  sbiofit(model,gData,responseMap,estimatedParam,dose,'Pooled',false);

Отображение результатов

Постройте график подгонки результатов по сравнению с исходными данными для каждого индивидуума (группы).

t = plot(unpooledFit);
% Resize the figure.
t.hFig.Position(:) = [100 100 1280 800];

Figure contains 30 axes. Axes 1 with title Group 1 contains 4 objects of type line. These objects represent OBS1 (CentralConc), OBS2 (PeripheralConc), PRED1 (Central.Drug_Central), PRED2 (Peripheral.Drug_Peripheral). Axes 2 with title Group 6 contains 4 objects of type line. Axes 3 with title Group 11 contains 4 objects of type line. Axes 4 with title Group 16 contains 4 objects of type line. Axes 5 with title Group 21 contains 4 objects of type line. Axes 6 with title Group 26 contains 4 objects of type line. Axes 7 with title Group 2 contains 4 objects of type line. Axes 8 with title Group 7 contains 4 objects of type line. Axes 9 with title Group 12 contains 4 objects of type line. Axes 10 with title Group 17 contains 4 objects of type line. Axes 11 with title Group 22 contains 4 objects of type line. Axes 12 with title Group 27 contains 4 objects of type line. Axes 13 with title Group 3 contains 4 objects of type line. Axes 14 with title Group 8 contains 4 objects of type line. Axes 15 with title Group 13 contains 4 objects of type line. Axes 16 with title Group 18 contains 4 objects of type line. Axes 17 with title Group 23 contains 4 objects of type line. Axes 18 with title Group 28 contains 4 objects of type line. Axes 19 with title Group 4 contains 4 objects of type line. Axes 20 with title Group 9 contains 4 objects of type line. Axes 21 with title Group 14 contains 4 objects of type line. Axes 22 with title Group 19 contains 4 objects of type line. Axes 23 with title Group 24 contains 4 objects of type line. Axes 24 with title Group 29 contains 4 objects of type line. Axes 25 with title Group 5 contains 4 objects of type line. Axes 26 with title Group 10 contains 4 objects of type line. Axes 27 with title Group 15 contains 4 objects of type line. Axes 28 with title Group 20 contains 4 objects of type line. Axes 29 with title Group 25 contains 4 objects of type line. Axes 30 with title Group 30 contains 4 objects of type line.

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

Исследуйте оценки параметров для зависимостей категорий

Исследуйте неохлажденные оценки, чтобы увидеть, есть ли какие-либо параметры для категории, то есть, связаны ли некоторые параметры с одной или несколькими категориями. Если есть какие-либо зависимости категории, возможно, удастся уменьшить количество степеней свободы, оценив только значения этих параметров для категории.

Сначала извлеките идентификатор и значения категорий для каждого идентификатора

catParamValues = unique(gData(:,{'ID','Sex','Age'}));

Добавьте переменные в таблицу, содержащую оценку каждого параметра.

allParamValues            = vertcat(unpooledFit.ParameterEstimates);
catParamValues.Central    = allParamValues.Estimate(strcmp(allParamValues.Name, 'Central'));
catParamValues.Peripheral = allParamValues.Estimate(strcmp(allParamValues.Name, 'Peripheral'));
catParamValues.Q12        = allParamValues.Estimate(strcmp(allParamValues.Name, 'Q12'));
catParamValues.Cl_Central = allParamValues.Estimate(strcmp(allParamValues.Name, 'Cl_Central'));

Постройте графики оценок каждого параметра для каждой категории. gscatter требует Statistics and Machine Learning Toolbox™. Если у вас его нет, используйте другие альтернативные функции построения графика, такие как plot.

h           = figure;
ylabels     = {'Central','Peripheral','Cl\_Central','Q12'};
plotNumber  = 1;
for i = 1:4
    thisParam = estimatedParam(i).Name;
    
    % Plot for Sex category
    subplot(4,2,plotNumber);
    plotNumber  = plotNumber + 1;
    gscatter(double(catParamValues.Sex), catParamValues.(thisParam), catParamValues.Sex);
    ax          = gca;
    ax.XTick    = [];
    ylabel(ylabels(i));
    legend('Location','bestoutside')
    % Plot for Age category
    subplot(4,2,plotNumber);
    plotNumber  = plotNumber + 1;
    gscatter(double(catParamValues.Age), catParamValues.(thisParam), catParamValues.Age);
    ax          = gca;
    ax.XTick    = [];
    ylabel(ylabels(i));
    legend('Location','bestoutside')
end
% Resize the figure.
h.Position(:) = [100 100 1280 800];

Figure contains 8 axes. Axes 1 contains 2 objects of type line. These objects represent Female, Male. Axes 2 contains 2 objects of type line. These objects represent Old, Young. Axes 3 contains 2 objects of type line. These objects represent Female, Male. Axes 4 contains 2 objects of type line. These objects represent Old, Young. Axes 5 contains 2 objects of type line. These objects represent Female, Male. Axes 6 contains 2 objects of type line. These objects represent Old, Young. Axes 7 contains 2 objects of type line. These objects represent Female, Male. Axes 8 contains 2 objects of type line. These objects represent Old, Young.

Исходя из графика, кажется, что молодые индивидуумы, как правило, имеют более высокие объемы центральных и периферийных отсеков (Central, Peripheral), чем старые индивидуумы (то есть объемы кажутся возрастными). У сложения мужчины, как правило, имеют более высокие скорости клиренса (Cl_Central), чем самки, но противоположное для параметра Q12 (то есть клиренс и Q12 кажутся специфичными для пола).

Оценка специфичных для категории параметров

Используйте 'CategoryVariableName' свойство estimatedInfo объект, чтобы указать, какую категорию использовать во время подбора кривой. Использование 'Sex' как группа, подходящая для зазора Cl_Central и Q12 параметры. Использование 'Age' как группа, подходящая для Central и Peripheral параметры.

estimatedParam(1).CategoryVariableName = 'Age';
estimatedParam(2).CategoryVariableName = 'Age';
estimatedParam(3).CategoryVariableName = 'Sex';
estimatedParam(4).CategoryVariableName = 'Sex';
categoryFit = sbiofit(model,gData,responseMap,estimatedParam,dose)
categoryFit = 
  OptimResults with properties:

                   ExitFlag: 3
                     Output: [1x1 struct]
                  GroupName: []
                       Beta: [8x5 table]
         ParameterEstimates: [120x6 table]
                          J: [240x8x2 double]
                       COVB: [8x8 double]
           CovarianceMatrix: [8x8 double]
                          R: [240x2 double]
                        MSE: 0.4362
                        SSE: 205.8690
                    Weights: []
              LogLikelihood: -477.9195
                        AIC: 971.8390
                        BIC: 1.0052e+03
                        DFE: 472
             DependentFiles: {1x3 cell}
    EstimatedParameterNames: {'Central'  'Peripheral'  'Q12'  'Cl_Central'}
             ErrorModelInfo: [1x3 table]
         EstimationFunction: 'lsqnonlin'

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

Графическое изображение результатов

Постройте график предполагаемых результатов для конкретной категории.

t = plot(categoryFit);
% Resize the figure.
t.hFig.Position(:) = [100 100 1280 800];

Figure contains 30 axes. Axes 1 with title Group 1 contains 4 objects of type line. These objects represent OBS1 (CentralConc), OBS2 (PeripheralConc), PRED1 (Central.Drug_Central), PRED2 (Peripheral.Drug_Peripheral). Axes 2 with title Group 6 contains 4 objects of type line. Axes 3 with title Group 11 contains 4 objects of type line. Axes 4 with title Group 16 contains 4 objects of type line. Axes 5 with title Group 21 contains 4 objects of type line. Axes 6 with title Group 26 contains 4 objects of type line. Axes 7 with title Group 2 contains 4 objects of type line. Axes 8 with title Group 7 contains 4 objects of type line. Axes 9 with title Group 12 contains 4 objects of type line. Axes 10 with title Group 17 contains 4 objects of type line. Axes 11 with title Group 22 contains 4 objects of type line. Axes 12 with title Group 27 contains 4 objects of type line. Axes 13 with title Group 3 contains 4 objects of type line. Axes 14 with title Group 8 contains 4 objects of type line. Axes 15 with title Group 13 contains 4 objects of type line. Axes 16 with title Group 18 contains 4 objects of type line. Axes 17 with title Group 23 contains 4 objects of type line. Axes 18 with title Group 28 contains 4 objects of type line. Axes 19 with title Group 4 contains 4 objects of type line. Axes 20 with title Group 9 contains 4 objects of type line. Axes 21 with title Group 14 contains 4 objects of type line. Axes 22 with title Group 19 contains 4 objects of type line. Axes 23 with title Group 24 contains 4 objects of type line. Axes 24 with title Group 29 contains 4 objects of type line. Axes 25 with title Group 5 contains 4 objects of type line. Axes 26 with title Group 10 contains 4 objects of type line. Axes 27 with title Group 15 contains 4 objects of type line. Axes 28 with title Group 20 contains 4 objects of type line. Axes 29 with title Group 25 contains 4 objects of type line. Axes 30 with title Group 30 contains 4 objects of type line.

Для Cl_Central и Q12 параметры, все мужчины имели одинаковые оценки и аналогично для женщин. Для Central и Peripheral параметры, все молодые индивидуумы имели одинаковые оценки, и аналогично для старых индивидуумов.

Оценка популяционных параметров

Чтобы лучше сравнить результаты, подгоните модель ко всем данным, объединенным вместе, то есть оцените один набор параметров для всех индивидуумов путем установки 'Pooled' аргумент пары "имя-значение" в true. Предупреждающее сообщение указывает, что эта опция будет игнорировать любую информацию, относящуюся к категории (если она существует).

pooledFit = sbiofit(model,gData,responseMap,estimatedParam,dose,'Pooled',true);
Warning: CategoryVariableName property of the estimatedInfo object is ignored when using the 'Pooled' option.

Графическое изображение результатов

Постройте график подгонки результатов по сравнению с исходными данными. Хотя для каждого индивидуума был сгенерирован отдельный график, данные подгонялись с использованием одного и того же набора параметров (то есть все индивидуумы имели одинаковую установленную линию).

t = plot(pooledFit);
% Resize the figure.
t.hFig.Position(:) = [100 100 1280 800];

Figure contains 30 axes. Axes 1 with title Group 1 contains 4 objects of type line. These objects represent OBS1 (CentralConc), OBS2 (PeripheralConc), PRED1 (Central.Drug_Central), PRED2 (Peripheral.Drug_Peripheral). Axes 2 with title Group 6 contains 4 objects of type line. Axes 3 with title Group 11 contains 4 objects of type line. Axes 4 with title Group 16 contains 4 objects of type line. Axes 5 with title Group 21 contains 4 objects of type line. Axes 6 with title Group 26 contains 4 objects of type line. Axes 7 with title Group 2 contains 4 objects of type line. Axes 8 with title Group 7 contains 4 objects of type line. Axes 9 with title Group 12 contains 4 objects of type line. Axes 10 with title Group 17 contains 4 objects of type line. Axes 11 with title Group 22 contains 4 objects of type line. Axes 12 with title Group 27 contains 4 objects of type line. Axes 13 with title Group 3 contains 4 objects of type line. Axes 14 with title Group 8 contains 4 objects of type line. Axes 15 with title Group 13 contains 4 objects of type line. Axes 16 with title Group 18 contains 4 objects of type line. Axes 17 with title Group 23 contains 4 objects of type line. Axes 18 with title Group 28 contains 4 objects of type line. Axes 19 with title Group 4 contains 4 objects of type line. Axes 20 with title Group 9 contains 4 objects of type line. Axes 21 with title Group 14 contains 4 objects of type line. Axes 22 with title Group 19 contains 4 objects of type line. Axes 23 with title Group 24 contains 4 objects of type line. Axes 24 with title Group 29 contains 4 objects of type line. Axes 25 with title Group 5 contains 4 objects of type line. Axes 26 with title Group 10 contains 4 objects of type line. Axes 27 with title Group 15 contains 4 objects of type line. Axes 28 with title Group 20 contains 4 objects of type line. Axes 29 with title Group 25 contains 4 objects of type line. Axes 30 with title Group 30 contains 4 objects of type line.

Сравнение невязок

Сравнение невязок CentralConc и PeripheralConc ответы для каждой подгонки.

t = gData.Time;
allResid(:,:,1) = pooledFit.R;
allResid(:,:,2) = categoryFit.R;
allResid(:,:,3) = vertcat(unpooledFit.R);

h = figure;
responseList = {'CentralConc', 'PeripheralConc'};
for i = 1:2
    subplot(2,1,i);
    oneResid = squeeze(allResid(:,i,:));
    plot(t,oneResid,'o');
    refline(0,0); % A reference line representing a zero residual
    title(sprintf('Residuals (%s)', responseList{i}));
    xlabel('Time');
    ylabel('Residuals');
    legend({'Pooled','Category-Specific','Unpooled'});
end
% Resize the figure.
h.Position(:) = [100 100 1280 800];

Figure contains 2 axes. Axes 1 with title Residuals (CentralConc) contains 4 objects of type line. These objects represent Pooled, Category-Specific, Unpooled. Axes 2 with title Residuals (PeripheralConc) contains 4 objects of type line. These objects represent Pooled, Category-Specific, Unpooled.

Как показано на графике, неохлажденная подгонка дала лучшее соответствие данным, так как она соответствует данным для каждого индивидуума. Это ожидалось, поскольку в нем использовалось наибольшее число степеней свободы. Подгонка по категории уменьшила количество степеней свободы, подгоняя данные к двум категориям (пол и возраст). В результате невязки были больше, чем неохлажденная подгонка, но все еще меньше, чем популяционная подгонка, которая оценивала всего один набор параметров для всех индивидуумов. Подгонка категории может быть хорошим компромиссом между неохлаждённым и объединённым подбором кривой при условии, что в ваших данных существует любая иерархическая модель.

Этот пример использует модель гетеротримерного G-белка дрожжей и экспериментальные данные, представленные [1]. Для получения дополнительной информации о модели смотрите раздел «Фон» в Сканировании параметров, Оценке параметров и Анализе чувствительности в дрожжевом гетеротримерном цикле G-белка.

Загрузите модель G-белка.

sbioloadproject gprotein

Сохраните экспериментальные данные, содержащие время течения для фракции активного G-белка.

time = [0 10 30 60 110 210 300 450 600]';
GaFracExpt = [0 0.35 0.4 0.36 0.39 0.33 0.24 0.17 0.2]';

Создайте groupedData объект на основе экспериментальных данных.

tbl = table(time,GaFracExpt);
grpData = groupedData(tbl);

Сопоставьте соответствующий компонент модели с экспериментальными данными. Другими словами, укажите, какой вид в модели соответствует какой переменной отклика в данных. В этом примере сопоставьте параметр модели GaFrac в переменную экспериментальных данных GaFracExpt от grpData.

responseMap = 'GaFrac = GaFracExpt';

Использование estimatedInfo объект для определения параметра модели kGd как параметр, который будет оценен.

estimatedParam = estimatedInfo('kGd');

Выполните оценку параметра.

fitResult = sbiofit(m1,grpData,responseMap,estimatedParam);

Просмотрите предполагаемое значение параметров kGd.

fitResult.ParameterEstimates
ans=1×3 table
     Name      Estimate    StandardError
    _______    ________    _____________

    {'kGd'}    0.11307      3.4439e-05  

Предположим, что вы хотите построить график результатов симуляции модели с помощью предполагаемого значения параметров. Можно перезапустить sbiofit и задайте, чтобы вернуть дополнительный второй выходной аргумент, который содержит результаты симуляции, или используйте fitted метод для извлечения результатов без перезапуска sbiofit.

[yfit,paramEstim] = fitted(fitResult);

Постройте график результатов симуляции.

sbioplot(yfit);

Figure contains an axes. The axes with title States versus Time contains 7 objects of type line. These objects represent G, Gd, Ga, RL, R, Gbg, GaFrac.

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

Загрузите выборочные данные набор.

load lagDurationData.mat

Постройте график данных.

plot(data.Time,data.Conc,'x')
xlabel('Time (hour)')
ylabel('Conc (milligram/liter)')

Figure contains an axes. The axes contains an object of type line.

Преобразуйте в groupedData.

gData = groupedData(data);
gData.Properties.VariableUnits = {'hour','milligram/liter'};

Создайте модель с одним отсеком.

pkmd                    = PKModelDesign;
pkc1                    = addCompartment(pkmd,'Central');
pkc1.DosingType         = 'Bolus';
pkc1.EliminationType    = 'linear-clearance';
pkc1.HasResponseVariable = true;
model                   = construct(pkmd);
configset               = getconfigset(model);
configset.CompileOptions.UnitConversion = true;

Добавьте два параметра, которые представляют задержку во времени и длительность дозы. Параметр lag определяет временную задержку перед введением дозы. Параметр длительности задает время, необходимое для введения дозы.

lagP = addparameter(model,'lagP');
lagP.ValueUnits = 'hour';
durP = addparameter(model,'durP');
durP.ValueUnits = 'hour';

Создайте объект дозы. Установите LagParameterName и DurationParameterName свойства дозы к именам параметров задержки и длительности, соответственно. Установите суммарную дозу в 10 миллиграммов, которая была количеством, используемым для генерации данных.

dose                = sbiodose('dose');
dose.TargetName     = 'Drug_Central';
dose.StartTime      = 0;
dose.Amount         = 10;
dose.AmountUnits    = 'milligram';
dose.TimeUnits      = 'hour';
dose.LagParameterName = 'lagP';
dose.DurationParameterName = 'durP';

Сопоставьте вид модели с соответствующими данными.

responseMap = {'Drug_Central = Conc'};

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

paramsToEstimate    = {'log(lagP)','log(durP)'};
estimatedParams     = estimatedInfo(paramsToEstimate,'InitialValue',2,'Bounds',[1 5]);

Выполните оценку параметра.

fitResults = sbiofit(model,gData,responseMap,estimatedParams,dose,'fminsearch')
fitResults = 
  OptimResults with properties:

                   ExitFlag: 1
                     Output: [1x1 struct]
                  GroupName: One group
                       Beta: [2x4 table]
         ParameterEstimates: [2x4 table]
                          J: [11x2 double]
                       COVB: [2x2 double]
           CovarianceMatrix: [2x2 double]
                          R: [11x1 double]
                        MSE: 0.0024
                        SSE: 0.0213
                    Weights: []
              LogLikelihood: 18.7511
                        AIC: -33.5023
                        BIC: -32.7065
                        DFE: 9
             DependentFiles: {1x2 cell}
    EstimatedParameterNames: {'lagP'  'durP'}
             ErrorModelInfo: [1x3 table]
         EstimationFunction: 'fminsearch'

Отобразите результат.

fitResults.ParameterEstimates
ans=2×4 table
      Name      Estimate    StandardError    Bounds
    ________    ________    _____________    ______

    {'lagP'}     1.986        0.0051568      1    5
    {'durP'}     1.527         0.012956      1    5

plot(fitResults)

Figure contains an axes. The axes with title Group One group contains 2 objects of type line. These objects represent OBS1 (Conc), PRED1 (Central.Drug_Central).

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

свернуть все

SimBiology модель, заданная как SimBiology model object. Активное configset object модели содержит настройки решателя для симуляции. Любые активные дозы и варианты применяются к модели во время симуляции, если не указано иное с помощью dosing и variants входные параметры, соответственно.

Данные в соответствии, заданные как groupedData object.

Имя временной переменной должно быть определено в IndependentVariableName свойство grpData. Например, если имя временной переменной 'TIME', затем укажите его следующим образом.

grpData.Properties.IndependentVariableName = 'TIME';

Если данные содержат более одной группы измерений, имя сгруппированной переменной должно быть определено в GroupVariableName свойство grpData. Например, если имя сгруппированной переменной 'GROUP', затем укажите его следующим образом.

grpData.Properties.GroupVariableName = 'GROUP';
Группа обычно относится к набору измерений, которые представляют один временной курс, часто соответствующий конкретному индивидууму или экспериментальному условию.

Примечание

sbiofit использует categorical функция для идентификации групп. Если какие-либо значения групп преобразуются в одно и то же значение, categoricalзатем эти наблюдения рассматривают как принадлежность к той же группе. Например, если некоторые наблюдения не имеют информации о группе (то есть пустом символьном векторе ''), затем categorical преобразует пустые символьные векторы в <undefined>и эти наблюдения рассматриваются как одна группа.

Сопоставление информации о компонентах модели с grpData, заданный как вектор символов, строка, строковый вектор или массив ячеек из векторов символов.

Каждый вектор или строка символов является выражением, подобным уравнению, подобным правилам назначения в SimBiology. Он содержит имя (или квалифицированное название) количества (вида, отделения или параметра) или observable объект в модели sm, далее следует символ '=' и имя переменной в grpData. Для ясности, белые пространства разрешены между именами и '='.

Для примера, если у вас есть данные о концентрации 'CONC' в grpData для видового 'Drug_Central', можно задать его следующим образом.

responseMap = 'Drug_Central = CONC';

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

Если имя компонента модели или grpData имя переменной не является допустимым MATLAB® имя переменной, окружайте ее квадратными скобками, такими как:

responseMap = '[Central 1].Drug = [Central 1 Conc]';

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

Выдается ошибка, если любое (квалифицированное) имя совпадает с двумя компонентами одного типа. Однако можно использовать (квалифицированное) имя, которое совпадает с двумя компонентами разных типов, и функция сначала находит виды с заданным именем, далее указываются отделения, а затем параметры.

Предполагаемые параметры, заданные как EstimatedInfo object или вектор estimatedInfo объекты, которые определяют оценочные параметры в модели smи другую необязательную информацию, такую как их начальные оценки, преобразования, связанные ограничения и категории. Поддерживаемые преобразования log, logit, и probit. Для получения дополнительной информации смотрите Преобразования параметров.

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

При использовании scattersearchнеобходимо задать конечные границы преобразования для каждого предполагаемого параметра.

При использовании fminsearch, nlinfit, или fminunc с границами целевая функция возвращает Inf если ограничения превышены. Когда вы включаете такие опции, как FunValCheck, оптимизация может ошибиться, если ограничения превышены во время оценки. При использовании nlinfit, это может сообщить предупреждения о том, что якобиан является плохо обусловленным или не может оценить, является ли конечный результат слишком близким к границам.

Если вы не задаете Pooled аргумент пары "имя-значение", sbiofit использование CategoryVariableName свойство estiminfo решить, должны ли параметры быть оценены для каждого индивидуума, группы, категории или всех индивидуумов в целом. Используйте Pooled опция для переопределения любого CategoryVariableName значения. Для получения дополнительной информации о CategoryVariableName свойство, см. EstimatedInfo object.

Примечание

sbiofit использует categorical функция для идентификации групп или категорий. Если какие-либо значения групп преобразуются в одно и то же значение, categoricalзатем эти наблюдения рассматривают как принадлежность к той же группе. Например, если некоторые наблюдения не имеют информации о группе (то есть пустом символьном векторе '' как значение группы), затем categorical преобразует пустые символьные векторы в <undefined>и эти наблюдения рассматриваются как одна группа.

Информация о дозах, заданная как пустой массив или 2-D матрица объектов дозы (ScheduleDose object или RepeatDose object).

  • Если он пуст, никакие дозы не применяются во время симуляции, даже если модель имеет активные дозы.

  • Если не пустой, матрица должна иметь одну строку или по одной строке на группу во входных данных. Если она имеет одну строку, одинаковые дозы применяются ко всем группам во время симуляции. Если она имеет несколько строк, каждая строка применяется к отдельной группе в том же порядке, в котором группы появляются во входных данных.

  • Допускается использование нескольких столбцов, чтобы можно было применить несколько объектов дозы к каждой группе. Все дозы в столбце должны ссылаться на одни и те же компоненты в модели. Для примера дозы в том же столбце должны иметь ту же дозу, что и целевые (TargetName). Если вы параметризоваете любое свойство дозы, то все дозы в столбце должны иметь это свойство, параметризованное к одному и тому же параметру. Если одни группы требуют больше доз, чем другие, то заполните матрицу стандартными (манекенщицами) дозами.

  • Доза по умолчанию имеет значения по умолчанию для всех свойств, кроме Name свойство. Создайте дозу по умолчанию следующим образом.

    d1 = sbiodose('d1');

  • В дополнение к ручному построению объектов дозы с помощью sbiodose, если grpData имеет информацию о дозах, вы можете использовать createDoses СПОСОБ СОЗДАНИЯ ДОЗ.

Имя функции оценки, заданное как вектор символов или строка. Варианты являются следующими.

  • 'fminsearch'

  • 'nlinfit' (Требуется набор инструментов Statistics and Machine Learning Toolbox.)

  • 'fminunc'(Требуется Optimization Toolbox.)

  • 'fmincon'(Требуется Optimization Toolbox.)

  • 'lsqcurvefit'(Требуется Optimization Toolbox.)

  • 'lsqnonlin'(Требуется Optimization Toolbox.)

  • 'patternsearch' (Требуется глобальный набор инструментов оптимизации.)

  • 'ga' (Требуется глобальный набор инструментов оптимизации.)

  • 'particleswarm' (Требуется глобальный набор инструментов оптимизации.)

  • 'scattersearch'

По умолчанию, sbiofit использует первую доступную функцию оценки среди следующих: lsqnonlin (Optimization Toolbox), nlinfit (Statistics and Machine Learning Toolbox), или fminsearch. Тот же приоритет применяется к выбору локального решателя по умолчанию для scattersearch.

Для сводных данных поддерживаемых методов и параметров аппроксимации смотрите Поддерживаемые методы оценки параметра в SimBiology.

Опции, характерные для функции оценки, заданные как struct или optimoptions объект.

  • statset struct для nlinfit

  • optimset struct для fminsearch

  • optimoptions объект для lsqcurvefit, lsqnonlin, fmincon, fminunc, particleswarm, ga, и patternsearch

  • struct для scattersearch

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

Варианты, заданные как пустой массив или вектор объектов варианта. Если он пуст, никакие варианты не используются, даже если у модели есть активные варианты.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'ErrorModel','constant','UseParallel',true задает модель постоянной ошибки и запускает параллельные симуляции во время оценки параметра.

Модели ошибок, используемые для оценки, заданные как вектор символов, строка, строковый вектор, массив ячеек из векторов символов, категориальный вектор или таблица.

Если это таблица, она должна содержать одну переменную, которая является вектором-столбцом имен моделей ошибок. Имена могут быть массивом ячеек из векторов символов, строковым вектором или вектором категориальных переменных. Если таблица имеет более одной строки, то RowNames свойство должно совпадать с именами переменных отклика, заданными в правой части responseMap. Если таблица не использует RowNames свойство, n-я ошибка связана с n-й характеристикой.

Если вы задаете только одну модель ошибки, то sbiofit оценивает один набор параметров ошибки для всех ответов.

Если вы задаете несколько моделей ошибок с помощью категориального вектора, строкового вектора или массива ячеек из векторов символов, длина вектора или массива ячеек должна совпадать с количеством откликов в responseMap аргумент.

Можно задать несколько моделей ошибок, только если вы используете следующие методы: lsqnonlin, lsqcurvefit, fmincon, fminunc, fminsearch, patternsearch, ga, и particleswarm.

Существует четыре встроенные модели ошибок. Каждая модель определяет ошибку при использовании стандартного среднего нуля и отклонения модуля (Гауссовская) переменная e, результаты симуляции f, и один или два параметра a и b.

  • 'constant': y=f+ae

  • 'proportional': y=f+b|f|e

  • 'combined': y=f+(a+b|f|)e

  • 'exponential': y=fexp(ae)

Примечание

  • Если вы задаете модель ошибки, вы не можете задать веса, кроме модели постоянной ошибки.

  • Если вы используете пропорциональную или комбинированную модель ошибки во время подбора кривой данных, избегайте задавать точки данных в моменты, когда решение (результат симуляции) является нулем или установившееся состояние равняется нулю. В противном случае вы можете столкнуться с задачами деления на нули. Рекомендуется удалить эти точки данных из набора данных. Для получения дополнительной информации о функциях оценки параметра ошибки, смотрите Максимальную оценку правдоподобия.

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

Если вы задаете модель ошибки, вы не можете использовать веса, кроме модели постоянной ошибки. Если ни один из 'ErrorModel' или 'Weights' задано, по умолчанию функция использует модель постоянной ошибки с равными весами.

Флаг опции подгонки, определяющий, подходить ли каждому индивидууму (false) или объедините все отдельные данные (true).

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

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

Примечание

Используйте эту опцию, чтобы переопределить любое CategoryVariableName значения estiminfo.

Флаг для включения параллелизации, заданный как true или false. Если true и доступно Parallel Computing Toolbox™, sbiofit поддерживает несколько уровней параллелизации, но одновременно используется только один уровень.

Для неохлажденной подгонки ('Pooled' = false) для нескольких групп каждая подгонка выполняется параллельно.

Для объединенной подгонки ('Pooled' = true), параллелизация происходит на уровне решателя. Другими словами, расчеты решателя, такие как вычисления целевой функции, выполняются параллельно. Для получения дополнительной информации см. «Множественные оценки параметров параллельно».

Флаг, чтобы использовать чувствительности параметров для определения градиентов целевой функции, заданный как true или false. По умолчанию это true для fmincon, fminunc, lsqnonlin, и lsqcurvefit методы. В противном случае это false. Если это правда, SimBiology всегда использует sundials решатель, независимо от того, что вы выбрали в качестве SolverType свойство в Configset объект.

SimBiology использует метод приближения комплексного шага, чтобы вычислить чувствительность параметра. Такие вычисленные чувствительности могут использоваться, чтобы определить градиенты целевой функции во время оценки параметра, чтобы улучшить подбор кривой. Поведение по умолчанию sbiofit использовать такие чувствительности для определения градиентов всякий раз, когда алгоритм основан на градиентах и если SimBiology® модель поддерживает анализ чувствительности. Для получения дополнительной информации о требованиях модели и анализе чувствительности, см. Анализ чувствительности в SimBiology.

Флаг для отображения прогресса оценки параметра, заданный как true или false. Если trueОткроется новый рисунок, содержащая графики, которые показывают логарифмическую правдоподобность, критерии завершения и предполагаемые параметры для каждой итерации. Эта опция не поддерживается для nlinfit способ.

Если вы используете функции Optimization Toolbox (fminunc, fmincon, lsqcurvefit, lsqnonlin), рисунок также показывает график Оптимальности первого порядка (Optimization Toolbox).

Для неохлажденной подгонки каждая линия на графиках представляет отдельный индивидуума. Для объединенной подгонки одна линия представляет всех индивидуумов. Линия становится затухшей, когда подгонка завершена. Графики также отслеживают прогресс, когда вы запускаете sbiofit (для объединенных и неохваченных подгонок) параллельно с использованием удаленных кластеров. Для получения дополнительной информации смотрите График прогресса.

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

свернуть все

Результаты оценки, возвращенные как OptimResults object или NLINResults object или вектор этих объектов. Оба объекта результатов являются подклассами LeastSquaresResults object.

Если функция использует nlinfit (Statistics and Machine Learning Toolbox), затем fitResults является NLINResults object. В противном случае fitResults является OptimResults object.

Когда 'Pooled' установлено в falseфункция подходит для каждой группы отдельно, используя параметры, специфичные для группы, и fitResults является вектором объектов результатов с одним объектом результатов для каждой группы.

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

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

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

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

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

Если на 'Pooled' опция false, затем в каждой симуляции используются специфичные для группы значения параметров. Если true, затем во всех симуляциях используются одни и те же (по всей популяции) значения параметров.

Информация о состояниях представлена в simdata являются состояниями, которые были включены в responseMap входной параметр и любые другие состояния, перечисленные в StatesToLog свойство опций среды выполнения (RuntimeOptions) модели SimBiology sm.

Подробнее о

свернуть все

Оценка максимальных вероятностей

SimBiology оценивает параметры методом максимальной вероятности. Вместо того, чтобы непосредственно максимизировать функцию правдоподобия, SimBiology создает эквивалентную задачу минимизации. Когда это возможно, оценка формулируется как взвешенная оптимизация методом наименьших квадратов (WLS), которая минимизирует сумму квадратов взвешенных невязок. В противном случае оценка формулируется как минимизация противоположного логарифма вероятности (NLL). Формулировка WLS часто сходится лучше, чем формулировка NLL, и SimBiology может использовать специализированные алгоритмы WLS, такие как алгоритм Левенберга-Марквардта, реализованный в lsqnonlin и lsqcurvefit. SimBiology использует WLS, когда существует единственная модель ошибки, которая является постоянной, пропорциональной или экспоненциальной. SimBiology использует NLL, если у вас есть комбинированная модель ошибки или модель с несколькими ошибками, то есть модель, имеющая модель ошибки для каждого ответа.

sbiofit поддерживает различные методы оптимизации и передает в сформулированном выражении WLS или NLL метод оптимизации, который минимизирует его. Для простоты каждое выражение, показанное ниже, принимает только одну модель ошибки и один ответ. Если ответов несколько, SimBiology принимает сумму выражений, которые соответствуют моделям ошибок заданных ответов.

 Выражение, которое минимизируется
Взвешенные наименьшие квадраты (WLS)Для модели постоянной ошибки, iN(yifi)2
Для пропорциональной модели ошибки, iN(yifi)2fi2/fgm2
Для экспоненциальной модели ошибки, iN(lnyilnfi)2
Для числовых весов, iN(yifi)2wgm/wi
Отрицательная логарифмическая правдоподобность (NLL)Для комбинированной модели ошибки и модели с несколькими ошибками, iN(yifi)22σi2+iNln2πσi2

Переменные определяются следующим образом.

N

Количество экспериментальных наблюдений

yi

i-е экспериментальное наблюдение

fi

Предсказанное значение i-го наблюдения

σi

Стандартное отклонение i-го наблюдения.

  • Для модели постоянной ошибки, σi=a

  • Для пропорциональной модели ошибки, σi=b|fi|

  • Для объединенной модели ошибки, σi=a+b|fi|

fgm

fgm=(iN|fi|)1N

wi

Вес i-го предсказанного значения

wgm

wgm=(iNwi)1N

Когда вы используете числовые веса или функцию веса, веса приняты обратно пропорциональными отклонения ошибки, то есть σi2=a2wi где a - параметр постоянной ошибки. Если вы используете веса, вы не можете задать модель ошибки, кроме модели постоянной ошибки.

Различные методы оптимизации имеют различные требования к функции, которая минимизируется. Для некоторых методов оценка параметров модели выполняется независимо от оценки параметров модели ошибки. В следующей таблице обобщены модели ошибок и любые отдельные формулы, используемые для оценки параметров модели ошибок, где a и b являются параметрами модели ошибок, и e является стандартной переменной среднего нуля и единичной дисперсии (Гауссова).

Модель ошибкиФункция оценки параметра ошибки
'constant': yi=fi+aea2=1NiN(yifi)2
'exponential': yi=fiexp(ae)a2=1NiN(lnyilnfi)2
'proportional': yi=fi+b|fi|eb2=1NiN(yififi)2
'combined': yi=fi+(a+b|fi|)eПараметры ошибки включены в минимизацию.
Весаa2=1NiN(yifi)2wi

Примечание

nlinfit поддерживаются только модели с одной ошибкой, а не модели с несколькими ошибками, то есть модели с конкретной реакцией. Для комбинированной модели ошибки он использует итерационный алгоритм WLS. Для других моделей ошибок он использует алгоритм WLS, как описано ранее. Для получения дополнительной информации см. nlinfit (Statistics and Machine Learning Toolbox).

Опции по умолчанию для алгоритмов оценки

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

ФункцияОпции по умолчанию
nlinfit (Statistics and Machine Learning Toolbox)

sbiofit использует структуру опций по умолчанию, связанную с nlinfit, за исключением:

FunValCheck = 'off'
DerivStep = max(eps^(1/3), min(1e-4,SolverOptions.RelativeTolerance)), где SolverOptions свойство соответствует активной модели configset object.
fmincon (Optimization Toolbox)

sbiofit использует структуру опций по умолчанию, связанную с fmincon, за исключением:

Display = 'off'
FunctionTolerance = 1e-6*abs(f0), где f0 - начальное значение целевой функции.
OptimalityTolerance = 1e-6*abs(f0), где f0 - начальное значение целевой функции.
Algorithm = 'trust-region-reflective' когда 'SensitivityAnalysis' является true, или 'interior-point' когда 'SensitivityAnalysis' является ложным.
FiniteDifferenceStepSize = max(eps^(1/3),min(1e-4,SolverOptions.RelativeTolerance)), где SolverOptions свойство соответствует активной модели configset object.
TypicalX = 1e-6*x0, где x0 является массивом преобразованных начальных оценок.
fminunc (Optimization Toolbox)

sbiofit использует структуру опций по умолчанию, связанную с fminunc, за исключением:

Display = 'off'
FunctionTolerance = 1e-6*abs(f0), где f0 - начальное значение целевой функции.
OptimalityTolerance = 1e-6*abs(f0), где f0 - начальное значение целевой функции.
Algorithm = 'trust-region' когда 'SensitivityAnalysis' является true, или 'quasi-newton' когда 'SensitivityAnalysis' является ложным.
FiniteDifferenceStepSize = max(eps^(1/3),min(1e-4,SolverOptions.RelativeTolerance)), где SolverOptions свойство соответствует активной модели configset object.
TypicalX = 1e-6*x0, где x0 является массивом преобразованных начальных оценок.
fminsearch

sbiofit использует структуру опций по умолчанию, связанную с fminsearch, за исключением:

Display = 'off'
TolFun = 1e-6*abs(f0), где f0 - начальное значение целевой функции.
lsqcurvefit (Optimization Toolbox), lsqnonlin (Optimization Toolbox)

Требуется Optimization Toolbox.

sbiofit использует структуру опций по умолчанию, связанную с lsqcurvefit и lsqnonlin, за исключением:

Display = 'off'
FunctionTolerance = 1e-6*norm(f0), где f0 - начальное значение целевой функции.
OptimalityTolerance = 1e-6*norm(f0), где f0 - начальное значение целевой функции.
FiniteDifferenceStepSize = max(eps^(1/3),min(1e-4,SolverOptions.RelativeTolerance)) , где SolverOptions свойство соответствует активной модели configset object.
TypicalX = 1e-6*x0, где x0 является массивом преобразованных начальных оценок.
patternsearch (Global Optimization Toolbox)

Требуется Global Optimization Toolbox.

sbiofit использует объект опций по умолчанию (optimoptions), сопоставленный с patternsearch, за исключением:

Display = 'off'
FunctionTolerance = 1e-6*abs(f0), где f0 - начальное значение целевой функции.
MeshTolerance = 1.0e-3
AccelerateMesh = true
ga (Global Optimization Toolbox)

Требуется Global Optimization Toolbox.

sbiofit использует объект опций по умолчанию (optimoptions), сопоставленный с ga, за исключением:

Display = 'off'
FunctionTolerance = 1e-6*abs(f0), где f0 - начальное значение целевой функции.
MutationFcn = @mutationadaptfeasible
particleswarm (Global Optimization Toolbox)

Требуется Global Optimization Toolbox.

sbiofit использует следующие опции по умолчанию для particleswarm алгоритм, кроме:
Display = 'off'
FunctionTolerance = 1e-6*abs(f0), где f0 - начальное значение целевой функции.
InitialSwarmSpan = 2000 or 8; 2000 для предполагаемых параметров без преобразования; 8 для расчетных параметров с log, logit, или probit преобразования.
scattersearchСм. Алгоритм поиска рассеяния.

Алгоритм поиска рассеяния

The scattersearch метод реализует глобальный алгоритм оптимизации [2], который решает некоторые проблемы оценки параметра в динамических моделях, таких как сходимость к локальным минимумам.

Обзор алгоритма

Алгоритм выбирает подмножество точек из начального пула точек. В этом подмножестве некоторые точки являются лучшими по качеству (то есть самым низким значением функции), а некоторые выбираются случайным образом. Алгоритм итеративно оценивает точки и исследует различные направления вокруг различных решений, чтобы найти лучшие решения. На этом шаге итерации алгоритм заменяет любое старое решение на новое, более качественное. Итерации продолжаются до тех пор, пока не будут достигнуты какие-либо критерии остановки. Затем он запускает локальный решатель на лучшей точке.

Инициализация

Чтобы запустить поиск рассеяния, алгоритм сначала определяет общее число точек, необходимое (NumInitialPoints). По умолчанию общая сумма 10*N, где N количество предполагаемых параметров. Он выбирает NumInitialPoints точки (строки) из InitialPointMatrix. Если InitialPointMatrix не имеет достаточного количества точек, алгоритм вызывает функцию, заданную в CreationFcn чтобы сгенерировать дополнительные точки, необходимые. По умолчанию для генерации этих дополнительных точек используется латинская выборка гиперкуба. Затем алгоритм выбирает подмножество NumTrialPoints точки из NumInitialPoints точки. Дробь (FractionInitialBest) подмножества содержит лучшие точки с точки зрения качества. Остальные точки в подмножестве выбираются случайным образом.

Шаги итерации

Алгоритм итератирует точки в подмножестве следующим образом:

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

  2. Оцените новое решение внутри каждого прямоугольника. Если новое решение превзошло исходное, замените оригинал на новый.

  3. Примените стратегию выхода за рамки к улучшенным решениям и используйте многообещающие направления, чтобы найти лучшие решения.

  4. Запуск локального поиска в каждом LocalSearchInterval итерация. Используйте LocalSelectBestProbability вероятность выбрать лучшую точку в качестве начальной точки для локального поиска. По умолчанию решение является случайным, давая равный шанс выбрать лучшую точку или случайную точку из пробных точек. Если новое решение превзошло старое, замените старое на новое.

  5. Замените любую застопорившуюся точку, которая не дает никакого нового превосходящего решения после MaxStallTime секунд с другой точкой от начального набора.

  6. Оцените критерий остановки. Остановите итерацию, если какие-либо критерии удовлетворены.

Затем алгоритм запускает локальный решатель на лучшую точку.

Критерий остановки

Алгоритм итализируется, пока не достигнет критерия остановки.

Опция остановкиОстановка теста
FunctionTolerance и MaxStallIterations

Относительное изменение значения наилучшей целевой функции за последнее MaxStallIterations меньше FunctionTolerance.

MaxIterations

Количество итераций достигает MaxIterations.

OutputFcn

OutputFcn может остановить итерации.

ObjectiveLimit

Лучшее значение целевой функции на итерации меньше или равно ObjectiveLimit.

MaxStallTime

Лучшее значение целевой функции не изменилось в последней MaxStallTime секунд.

MaxTime

Время выполнения функции превышает MaxTime секунд.

Опции алгоритма

Опции для алгоритма вы создаете с помощью struct.

ОпцияОписание
CreationFcn

Указатель на функцию, которая создает дополнительные точки, необходимые для алгоритма. По умолчанию это вектор символов 'auto', который использует латинскую выборку гиперкуба.

Сигнатура функции: points = CreationFcn(s,N,lb,ub), где s - общее количество выборочных точек, N - количество предполагаемых параметров, lb - нижняя граница, а ub - верхняя граница. Если любой выход функции превышает границы, эти результаты обрезаются до границ.

Display

Level of display вернулся в командную строку.

  • 'off' или 'none' (по умолчанию) не отображает выход.

  • 'iter' обеспечивает итерационное отображение.

  • 'final' отображает только окончательный выход.

FractionInitialBest

Числовой скаляр из 0 через 1. По умолчанию это 0.5. Это число является долей NumTrialPoints которые выбираются как лучшие точки из NumInitialPoints точки.

FunctionTolerance

Числовой скаляр из 0 через 1. По умолчанию это 1e-6. Решатель останавливается, если относительное изменение наилучшего значения целевой функции за последнее MaxStallIterations меньше FunctionTolerance. Эта опция также используется для удаления повторяющихся локальных решений. См. XTolerance для получения дополнительной информации.

InitialPointMatrix

Начальный (или частичный) набор точек. M -by - N действительная конечная матрица, где M - количество точек и N - количество оцененных параметров.

Если M < NumInitialPoints, затем scattersearch создает больше точек, так что общее количество строк NumInitialPoints.

Если M > NumInitialPoints, затем scattersearch использует первую NumInitialPoints строки.

По умолчанию это начальные преобразованные значения предполагаемых параметров, сохраненные в InitialTransformedValue свойство EstimatedInfo object, то есть [estiminfo.InitialTransformedValue].

LocalOptions

Опции для локального решателя. Это может быть struct (созданный с optimset или statset (Statistics and Machine Learning Toolbox)) или optimoptions (Optimization Toolbox) объект, в зависимости от локального решателя. По умолчанию это вектор символов 'auto', который использует опции по умолчанию выбранного решателя за некоторыми исключениями. В дополнение к этим исключениям, следующие опции ограничивают время, потраченное в локальном решателе, потому что это называется неоднократно:

  • MaxFunEvals (максимально допустимое количество вычислений функции) = 300

  • MaxIter (максимальное количество разрешенных итераций) = 200

LocalSearchInterval

Положительное целое число. По умолчанию это 10. The scattersearch алгоритм применяет локальный решатель к одной из пробных точек после первой итерации и снова каждую LocalSearchInterval итерация.

LocalSelectBestProbability

Числовой скаляр из 0 через 1. По умолчанию это 0.5. Это вероятность выбора лучшей точки в качестве начальной точки для локального поиска. В других случаях одна из пробных точек выбирается случайным образом.

LocalSolver

Вектор символов или строка, задающая имя локального решателя. Поддерживаемые методы 'fminsearch', 'lsqnonlin', 'lsqcurvefit', 'fmincon', 'fminunc', 'nlinfit'.

Локальный решатель по умолчанию выбирается со следующим приоритетом:

  • Если Optimization Toolbox доступен, решатель lsqnonlin.

  • Если Statistics and Machine Learning Toolbox доступен, решатель nlinfit.

  • В противном случае решатель fminsearch.

MaxIterations

Положительное целое число. По умолчанию это вектор символов 'auto' представление 20*N, где N количество предполагаемых параметров.

MaxStallIterations

Положительное целое число. По умолчанию это 50. Решатель останавливается, если относительное изменение наилучшего значения целевой функции за последнее MaxStallIterations итерации меньше FunctionTolerance.

MaxStallTime

Положительная скалярная величина. По умолчанию это Inf. Решатель останавливается, если MaxStallTime секунды прошли с момента последнего улучшения наиболее заметного значения целевой функции. Здесь время является стенкой тактовым временем в отличие от циклов процессора.

MaxTime

Положительная скалярная величина. По умолчанию это Inf. Решатель останавливается, если MaxTime с начала поиска прошло несколько секунд. Время здесь означает стенку тактовое время в отличие от циклов процессора.

NumInitialPoints

Положительное целое число >= NumTrialPoints. Решатель генерирует NumInitialPoints точки перед выбором подмножества пробных точек (NumTrialPoints) для последующих шагов. По умолчанию это вектор символов 'auto', который представляет 10*N, где N количество предполагаемых параметров.

NumTrialPoints

Положительное целое число >= 2 и <= NumInitialPoints. Решатель генерирует NumInitialPoints начальные точки перед выбором подмножества пробных точек (NumTrialPoints) для последующих шагов. По умолчанию это вектор символов 'auto', который представляет первое четное число n для которого n2n10*N, где N количество предполагаемых параметров.

ObjectiveLimit

Скаляр. По умолчанию это -Inf. Решатель останавливается, если лучшее значение целевой функции на итерации меньше или равно ObjectiveLimit.

OutputFcn

Указатель на функцию или cell-массив указателей на функцию. Выходные функции могут считывать итерационные данные и останавливать решатель. По умолчанию это [].

Сигнатура выходной функции stop = myfun(optimValues,state), где:

  • stop является логическим скаляром. Установите значение true чтобы остановить решатель.

  • optimValues - структура, содержащая информацию о пробных точках с полями.

    • bestx - лучшая найденная точка решения, соответствующая значению функции bestfval.

    • bestfval - лучшее (самое низкое) найденное значение целевой функции.

    • iteration - число итерации.

    • medianfval - среднее значение целевой функции среди всех текущих пробных точек.

    • stalliterations количество итераций с момента последнего изменения bestfval.

    • trialx является матрицей текущих пробных точек. Каждая строка представляет одну точку, и количество строк равно NumTrialPoints.

    • trialfvals является вектором значений целевой функции для пробных точек. Это матрица для lsqcurvefit и lsqnonlin методы.

  • state - вектор символов, задающий статус текущей итерации.

    • 'init' - Решатель не начал итерацию. Ваша выходная функция может использовать это состояние для открытия файлов или настройки структур данных или графиков для последующих итераций.

    • 'iter' - Решатель продолжает свои итерации. Обычно это состояние, где ваша выходная функция выполняет свою работу.

    • 'done' - Решатель достигает критерия остановки. Ваша выходная функция может использовать это состояние для очистки, например, для закрытия любых файлов, которые она открыла.

TrialStallLimit

Положительное целое число со значением по умолчанию 22. Если конкретная пробная точка не улучшается после TrialStallLimit итерации, он заменяется другой точкой.

UseParallel

Логический флаг для параллельного вычисления целевой функции. По умолчанию это false.

XTolerance

Числовой скаляр из 0 через 1. По умолчанию это 1e-6. Эта опция определяет, насколько близко должны быть две точки, чтобы считать их идентичными для создания вектора локальных решений. Решатель вычисляет расстояние между парой точек с norm, евклидово расстояние. Если внутри два решения XTolerance расстояние друг от друга и иметь значения целевых функций в FunctionTolerance решатель считает их идентичными. Если оба условия не выполняются, решатель сообщает о решениях как об отличных.

Чтобы получить отчет о каждом потенциальном локальном минимуме, установите XTolerance на 0. Чтобы получить отчет о меньшем количестве результатов, задайте XTolerance к большему значению.

Множественные оценки параметров параллельно

Существует два способа использовать параллельные вычисления для оценки параметра.

Задайте 'UseParallel' к истинному

Чтобы включить параллелизацию для sbiofit, установите пару "имя-значение" 'UseParallel' на true. Функция поддерживает несколько уровней параллелизации, но одновременно используется только один уровень. Для неохлажденной подгонки для нескольких групп (или индивидуумов) каждая подгонка выполняется параллельно. Для объединенной подгонки параллелизация происходит на уровне решателя, если решатель поддерживает его. То есть, sbiofit устанавливает параллельную опцию соответствующего метода оценки (решателя) на true, и вычисления функции возражения выполняются параллельно. Для образца градиенты вычисляются параллельно для основанных на градиентах методов. Если вы выполняете объединенную подгонку с несколькими группами с помощью решателя, который не имеет параллельной опции, симуляции выполняются параллельно для каждой группы во время оптимизации (оценка максимального правдоподобия).

Использовать parfeval или parfor

Вы также можете вызвать sbiofit внутри parfor цикл или использовать parfeval внутри for-цикл, чтобы выполнить несколько оценок параметров параллельно. Рекомендуется использовать parfeval потому что эти параллельные оценки выполняются асинхронно. Если одна подгонка вызывает ошибку, она не влияет на другую.

Если вы пытаетесь найти глобальный минимум, можно использовать глобальные решатели, такие как particleswarm (Global Optimization Toolbox) или ga (Global Optimization Toolbox) (Требуется Global Optimization Toolbox). Однако, если вы хотите задать начальные условия и запустить подгонку параллельно, смотрите следующий пример, который показывает, как использовать оба parfor и parfeval.

Модель и Setup

Загрузите модель G-белка.

sbioloadproject gprotein

Сохраните экспериментальные данные, содержащие время течения для фракции активного G-белка [1].

time = [0 10 30 60 110 210 300 450 600]';
GaFracExpt = [0 0.35 0.4 0.36 0.39 0.33 0.24 0.17 0.2]';

Создайте groupedData object на основе экспериментальных данных.

tbl = table(time,GaFracExpt);
grpData = groupedData(tbl);

Сопоставьте соответствующий элемент модели с экспериментальными данными.

responseMap = 'GaFrac = GaFracExpt';

Укажите параметр для оценки.

paramToEstimate    = {'kGd'};

Сгенерируйте начальные значения параметров для kGd.

rng('default');
iniVal = abs(normrnd(0.01,1,10,1));
fitResultPar = [];

Функции параллельного пула Setup

Запустите параллельный пул с помощью локального профиля.

poolObj = parpool('local');
Starting parallel pool (parpool) using the 'local' profile ...
Connected to the parallel pool (number of workers: 6).

Используя parfeval рекомендуется

Во-первых, задайте указатель на функцию, который использует локальную функцию sbiofitpar для оценки. Убедитесь, что функция sbiofitpar определяется в конце скрипта.

optimfun = @(x) sbiofitpar(m1,grpData,responseMap,x);

Выполните несколько оценок параметров параллельно через parfeval использование различных начальных значений параметров.

for i=1:length(iniVal)
    f(i) = parfeval(optimfun,1,iniVal(i)); 
end
fitResultPar = fetchOutputs(f);

Результирующие результаты для каждого запуска.

allParValues = vertcat(fitResultPar.ParameterEstimates);
allParValues.LogLikelihood = [fitResultPar.LogLikelihood]';
allParValues.RunNumber = (1:length(iniVal))';
allParValues.Name = categorical(allParValues.Name);
allParValues.InitialValue = iniVal;
% Rearrange the columns.
allParValues = allParValues(:,[5 1 6 2 3 4]);
% Sort rows by LogLikelihood.
sortrows(allParValues,'LogLikelihood')
ans=10×6 table
    RunNumber    Name    InitialValue    Estimate    StandardError    LogLikelihood
    _________    ____    ____________    ________    _____________    _____________

        9        kGd        3.5884         3.022           0.127         -1.2843   
       10        kGd        2.7794         2.779        0.029701         -1.2319   
        3        kGd        2.2488        2.2488        0.096013         -1.0786   
        2        kGd        1.8439         1.844         0.28825        -0.90104   
        6        kGd        1.2977        1.2977        0.011344        -0.48209   
        4        kGd       0.87217       0.65951        0.003583          0.9279   
        1        kGd       0.54767       0.54776       0.0020424          1.5323   
        7        kGd       0.42359       0.42363       0.0024555          2.6097   
        8        kGd       0.35262       0.35291      0.00065289          3.6098   
        5        kGd       0.32877       0.32877      0.00042474          4.0604   

Определите локальную функцию sbiofitpar который выполняет оценку параметра используя sbiofit.

function fitresult = sbiofitpar(model,grpData,responseMap,initialValue)
estimatedParam = estimatedInfo('kGd');
estimatedParam.InitialValue = initialValue;
fitresult = sbiofit(model,grpData,responseMap,estimatedParam);
end

Использование parfor

В качестве альтернативы можно выполнить несколько оценок параметров параллельно через parfor цикл.

parfor i=1:length(iniVal)
    estimatedParam = estimatedInfo(paramToEstimate,'InitialValue',iniVal(i));
    fitResultTemp = sbiofit(m1,grpData,responseMap,estimatedParam); 
    fitResultPar = [fitResultPar;fitResultTemp];
end

Закройте параллельный пул.

delete(poolObj);

Оценка параметра гибридными решателями

sbiofit поддерживает глобальные методы оптимизации, а именно ga (Global Optimization Toolbox) и particleswarm (Global Optimization Toolbox) (Требуется Global Optimization Toolbox). Чтобы улучшить результаты оптимизации, эти методы позволяют вам запустить гибридную функцию после остановки глобального решателя. Гибридная функция использует конечную точку, возвращенную глобальным решателем, в качестве своей начальной точки. Поддерживаемые гибридные функции:

Убедитесь, что ваша гибридная функция принимает ваши ограничения задачи. То есть, если ваши параметры ограничены, используйте соответствующую функцию (такую как fmincon или patternsearch) для ограниченной оптимизации. Если не ограничено, используйте fminunc, fminsearch, или patternsearch. В противном случае, sbiofit выдает ошибку.

Для иллюстрированного примера смотрите Выполнить гибридную оптимизацию Используя sbiofit.

Ссылки

[1] Yi, T-M., Kitano, H. and Simon, M. (2003). Количественная характеристика дрожжевого гетеротримерного G-белкового цикла. PNAS. 100, 10764–10769.

[2] Gábor, A. and Banga, J.R. (2015). Устойчивая и эффективная оценка параметров в динамических моделях биологических систем. BMC Systems Biology. 9:74.

Расширенные возможности

Введенный в R2014a