Выполните регрессию нелинейного метода наименьших квадратов
Statistics and Machine Learning Toolbox™, Optimization Toolbox™ и Global Optimization Toolbox рекомендуются для этой функции.
fitResults = sbiofit(sm,grpData,responseMap,estiminfo)
fitResults = sbiofit(sm,grpData,responseMap,estiminfo,dosing)
fitResults = sbiofit(sm,grpData,responseMap,estiminfo,dosing,functionName)
fitResults = sbiofit(sm,grpData,responseMap,estiminfo,dosing,functionName,options)
fitResults = sbiofit(sm,grpData,responseMap,estiminfo,dosing,functionName,options,variants)
fitResults = sbiofit(_,Name,Value)
[fitResults,simdata]
= sbiofit(_)
оценочные параметры модели SimBiology fitResults
= sbiofit(sm
,grpData
,responseMap
,estiminfo
)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
является подходящей отдельно, приводя к специфичным для группы оценкам параметра. Если модель содержит активные дозы и варианты, они применяются перед симуляцией.
использует информацию дозирования, указанную матрицей объектов дозы SimBiology fitResults
= sbiofit(sm
,grpData
,responseMap
,estiminfo
,dosing
)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
.
[
также возвращается, вектор SimData возражает fitResults
,simdata
]
= sbiofit(_)simdata
с помощью любого из входных параметров в предыдущих синтаксисах.
sbiofit
объединяет sbionlinfit
и функции оценки sbioparamestim
. Используйте sbiofit
, чтобы выполнить регрессию нелинейного метода наименьших квадратов.
sbiofit
моделирует модель с помощью SimFunction object
, который автоматически ускоряет симуляции по умолчанию. Следовательно не необходимо запустить sbioaccelerate
, прежде чем вы вызовете sbiofit
.
Фон
Этот пример показывает, как соответствовать данным о профиле PK человека к модели с одним отсеком и оценить фармакокинетические параметры.
Предположим, что вы имеете данные о концентрации плазмы препарата от человека и хотите оценить объем центрального отсека и разрешения. Примите, что концентрация препарата по сравнению с профилем времени следует за моноэкспоненциальным снижением , где концентрация препарата во время t, начальная концентрация, и константа скорости устранения, которая зависит от разрешения и объема центрального отсека .
Синтетические данные в этом примере были сгенерированы с помощью следующей модели и параметров:
Модель с одним отсеком с болюсным введением и устранением первого порядка
Объем центрального отсека (Central
) = 1,70 литра
Параметр разрешения (Cl_Central
) = 0,55 литра/час
Постоянная ошибочная модель
Загрузите данные и визуализируйте
Данные хранятся как таблица с переменными Time
и Conc
, которые представляют ход времени плазменной концентрации человека после внутривенного администрирования шарика, измеренного в 13 различных моментах времени. Переменные модули для Time
и Conc
являются часом и миллиграммом/литр, соответственно.
clear all load(fullfile(matlabroot,'examples','simbio','data15.mat'))
plot(data.Time,data.Conc,'b+') xlabel('Time (hour)'); ylabel('Drug Concentration (milligram/liter)');
Преобразуйте в groupedData Формат
Преобразуйте набор данных в объект groupedData
, который является необходимым форматом данных для подходящего функционального sbiofit
для дальнейшего использования. Объект 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. Для получения дополнительной информации при подготовке различных расписаний дозирования, смотрите Дозы.
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'};
Задайте параметры, чтобы оценить
Параметры, чтобы поместиться в эту модель являются объемом центрального (Центрального) отсека и уровень раскрываемости преступлений (Cl_Central). В этом случае задайте логарифмическое преобразование для этих биологических параметров, поскольку они ограничиваются быть положительными. Объект 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);
Используйте различные ошибочные модели
Попробуйте три других поддерживаемых ошибочных модели (пропорциональный, комбинация постоянных и пропорциональных ошибочных моделей и экспоненциал).
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);
Сравните информационные критерии образцового выбора
Сравните loglikelihood, 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
На основе информационных критериев постоянная ошибочная модель (или равные веса) соответствует данным лучше всего, поскольку это имеет самое большое loglikelihood значение и самый маленький 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 к модели с одним отсеком. Вы сравнили информационные критерии каждой модели и оценили, что значения параметров различных ошибочных моделей видели, какая модель лучше всего объяснила данные. Финал соответствовал результатам, предложенным обоих, которых постоянные и объединенные ошибочные модели предоставили, самые близкие оценки к значениям параметров раньше генерировали данные. Однако постоянная ошибочная модель является лучшей моделью, как обозначено loglikelihood, AIC и критериями информации о BIC.
Предположим, что у вас есть данные о концентрации плазмы препарата от трех человек, которых вы хотите использовать, чтобы оценить соответствующие фармакокинетические параметры, а именно, объем центрального и периферийного отсека (Central
, Peripheral
), уровень раскрываемости преступлений (Cl_Central
) и межразделенное на отсеки разрешение (Q12
). Примите, что концентрация препарата по сравнению с профилем времени следует за снижением biexponential , где Ct является концентрацией препарата во время t, и a и b являются наклонами для соответствующих экспоненциальных снижений.
Синтетический набор данных содержит данные о концентрации плазмы препарата, измеренные и в центральных и в периферийных отсеках. Данные были сгенерированы с помощью модели 2D отсека с дозой вливания и устранением первого порядка. Эти параметры использовались для каждого человека.
Central | Peripheral | Q12 | Cl_Central | |
---|---|---|---|---|
Индивидуум 1 | 1.90 | 0.68 | 0.24 | 0.57 |
Индивидуум 2 | 2.10 | 6.05 | 0.36 | 0.95 |
Индивидуум 3 | 1.70 | 4.21 | 0.46 | 0.95 |
Данные хранятся как таблица с переменными ID
, Time
, CentralConc
и PeripheralConc
. Это представляет ход времени плазменных концентраций, измеренных в восьми различных моментах времени и для центральных и для периферийных отсеков после дозы вливания.
clear all load(fullfile(matlabroot,'examples','simbio','data10_32R.mat'))
Преобразуйте набор данных в объект groupedData
, который является необходимым форматом данных для подходящего функционального sbiofit
для дальнейшего использования. Объект 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, чтобы создать модель 2D отсека с дозированием вливания и устранением первого порядка, где уровень устранения зависит от разрешения и объема центрального отсека. Используйте объект 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 мг/час. Для получения дополнительной информации при подготовке различных стратегий дозирования, смотрите Дозы.
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 человек и хотите оценить фармакокинетические параметры, а именно, объемы центрального и периферийного отсека, разрешения и межразделенного на отсеки разрешения. Примите, что концентрация препарата по сравнению с профилем времени следует за снижением biexponential , где концентрация препарата во время t, и и наклоны для соответствующих экспоненциальных снижений.
Загрузка данных
Эти синтетические данные содержат ход времени плазменных концентраций 30 человек после дозы шарика (100 мг), измеренных в разное время и для центральных и для периферийных отсеков. Это также содержит категориальные переменные, а именно, Sex
и Age
.
clear load(fullfile(matlabroot,'examples','simbio','sd5_302RAgeSex.mat'))
Преобразуйте в groupedData Формат
Преобразуйте набор данных в объект groupedData
, который является необходимым форматом данных для подходящего функционального sbiofit
. Объект 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'
Свойства IndependentVariableName
и GroupVariableName
были автоматически установлены в переменные Time
и ID
данных.
Визуализируйте данные
Отобразите данные об ответе для каждого человека.
t = sbiotrellis(gData,'ID','Time',{'CentralConc','PeripheralConc'},... 'Marker','+','LineStyle','none'); % Resize the figure. t.hFig.Position(:) = [100 100 1280 800];
Настройте модель 2D отсека
Пользуйтесь встроенной библиотекой PK, чтобы создать модель 2D отсека с дозированием вливания и устранением первого порядка, где уровень устранения зависит от разрешения и объема центрального отсека. Используйте объект 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. Для получения дополнительной информации при подготовке различных стратегий дозирования, смотрите Дозы.
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
как параметры, чтобы оценить. Объект 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];
Для необъединенной подгонки всегда возвращается sbiofit
, каждый заканчивается объект для каждого человека.
Исследуйте оценки параметра на зависимости от категории
Исследуйте необъединенные оценки, чтобы видеть, существуют ли какие-либо специфичные для категории параметры, то есть, если некоторые параметры связаны с одной или несколькими категориями. Если существуют какие-либо зависимости от категории, может быть возможно уменьшать количество степеней свободы путем оценки только специфичных для категории значений для тех параметров.
Сначала извлеките ID и значения категории для каждого ID
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];
На основе графика кажется, что молодые люди склонны иметь более высокие объемы центральных и периферийных отсеков (Central
, Peripheral
), чем старые люди (то есть, объемы, кажется, являются возрастными). Кроме того, штекеры имеют тенденцию иметь более низкий уровень раскрываемости преступлений (Cl_Central
), чем розетки, но противоположное для параметра Q12 (то есть, разрешение и Q12, кажется, сексуально-специфичны).
Оцените специфичные для категории параметры
Используйте свойство 'CategoryVariableName'
объекта estimatedInfo
задать который категория использовать во время подбора кривой. Используйте 'Sex'
в качестве группы к пригодному для разрешения параметры Q12
и Cl_Central
. Используйте 'Age'
в качестве группы к пригодному для параметров Peripheral
и Central
.
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];
Для 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];
Сравните невязки
Сравните невязки 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];
Как показано в графике, необъединенная подгонка произвела лучшую подгонку к данным, когда это соответствует данным к каждому человеку. Это ожидалось, поскольку это использовало большую часть количества степеней свободы. Подгонка категории уменьшала количество степеней свободы подгонкой данных к двум категориям (пол и возраст). В результате невязки были больше, чем необъединенная подгонка, но еще меньшими, чем подгонка генеральной совокупности, которая оценила всего один набор параметров для всех людей. Подходящая категорией сила быть хорошим компромиссом между необъединенным и объединенным подбором кривой при условии, что любая иерархическая модель существует в ваших данных.
Этот пример использует дрожжи гетеротримерные данные модели белка G и экспериментальные данные, о которых сообщают [1]. Для получения дополнительной информации о модели, смотрите раздел Background в Сканировании Параметра, Оценке Параметра и Анализе чувствительности в Дрожжах Гетеротримерный Цикл Белка 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);
Этот пример показывает, как оценить задержку, прежде чем доза шарика была введена и длительность дозы с помощью модели с одним отсеком.
Загрузите набор выборочных данных.
load lagDurationData.mat
Отобразите данные на графике.
plot(data.Time,data.Conc,'x') xlabel('Time (hour)') ylabel('Conc (milligram/liter)')
Преобразуйте в 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;
Добавьте два параметра, которые представляют задержку и длительность дозы. Параметр задержки задает задержку, прежде чем доза будет введена. Параметр длительности задает отрезок времени, который требуется, чтобы ввести дозу.
lagP = addparameter(model,'lagP'); lagP.ValueUnits = 'hour'; durP = addparameter(model,'durP'); durP.ValueUnits = 'hour';
Создайте объект дозы. Установите свойства LagParameterName
и DurationParameterName
дозы к именам параметров задержки и длительности, соответственно.
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)
sm
— SimBiologyМодель SimBiology, заданная как model object
SimBiology. Активный configset object
модели содержит настройки решателя для симуляции. Любые активные дозы и варианты применяются к модели во время симуляции, если не задано в противном случае с помощью dosing
и входных параметров variants
, соответственно.
grpData
— Данные, чтобы соответствоватьДанные, чтобы соответствовать, заданный как groupedData object
.
Имя переменной времени должно быть задано в свойстве IndependentVariableName
grpData
. Например, если именем переменной времени является 'TIME'
, то задайте его можно следующим образом.
grpData.Properties.IndependentVariableName = 'TIME';
Если данные содержат больше чем одну группу измерений, имя группирующей переменной должно быть задано в свойстве GroupVariableName
grpData
. Например, если именем группирующей переменной является 'GROUP'
, то задайте его можно следующим образом.
grpData.Properties.GroupVariableName = 'GROUP';
sbiofit
использует функцию categorical
, чтобы идентифицировать группы. Если какие-либо значения группы преобразованы в то же значение categorical
, то те наблюдения обработаны как принадлежащий той же группе. Например, если некоторые наблюдения не имеют никакой информации о группе (то есть, пустой символьный вектор ''
), то categorical
преобразовывает пустые символьные вектора в <undefined>
, и эти наблюдения обработаны как одна группа.
responseMap
— Отображение информации компонентов модели к grpData
Отображение информации компонентов модели к grpData
, заданному как вектор символов, строка, представляет в виде строки вектор или массив ячеек из символьных векторов.
Каждый вектор символов или строка являются подобным уравнению выражением, подобным правилам присвоения в SimBiology. Это содержит имя (или полностью определенное имя) количества (разновидности, отсек или параметр) в модели sm
, сопровождаемой символьным '='
и именем переменной в grpData
. Для ясности пробелы позволены между именами и '='
.
Например, если у вас есть данные о концентрации 'CONC'
в grpData
для разновидности 'Drug_Central'
, можно задать его можно следующим образом.
responseMap = 'Drug_Central = CONC';
Чтобы назвать разновидность однозначно, используйте полностью определенное имя, которое включает имя отсека. Чтобы назвать ограниченный по объему реакцией параметр, используйте имя реакции, чтобы квалифицировать параметр. Если имя не является допустимым именем переменной MATLAB®, окружите его квадратными скобками, такими как [reaction 1].[parameter 1]
.
Ошибка выпущена, если какое-либо (квалифицированное) имя совпадает с двумя компонентами того же типа. Однако можно использовать (квалифицированное) имя, которое совпадает с двумя компонентами различных типов, и функция сначала находит разновидности с именем, сопровождаемым отсеками и затем параметрами.
estiminfo
— Предполагаемые параметрыestimatedInfo
| вектор объектов estimatedInfo
Предполагаемые параметры, заданные как 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>
, и эти наблюдения обработаны как одна группа.
dosing
— Дозирование информации[]
| 2D матрица объектов дозыДозирование информации, указанной как пустой массив или 2D матрица объектов дозы (ScheduleDose object
или RepeatDose object
).
Если пустой, никакие дозы не применяются во время симуляции, даже если модель имеет активные дозы.
Если не пустой, матрица должна иметь одну строку или одну строку на группу во входных данных. Если это имеет одну строку, те же дозы применяются ко всем группам во время симуляции. Если это имеет несколько строк, каждая строка применяется к отдельной группе в том же порядке, как группы появляются во входных данных.
Несколько столбцов позволены так, чтобы можно было применить несколько объектов дозы к каждой группе. Все дозы в столбце должны сослаться на те же компоненты в модели. Например, дозы в том же столбце должны иметь ту же цель дозы (TargetName
). Если вы параметризовали какое-либо свойство дозы, то всем дозам в рамках столбца нужно было параметризовать это свойство к тому же параметру. Если некоторые группы требуют большего количества доз, чем другие, то заполняют матрицу с (фиктивными) дозами по умолчанию.
Доза по умолчанию имеет значения по умолчанию для всех свойств, за исключением свойства Name
. Создайте дозу по умолчанию можно следующим образом.
d1 = sbiodose('d1');
В дополнение к ручному построению объектов дозы с помощью sbiodose
, если grpData
имеет информацию о дозировании, можно использовать метод createDoses
, чтобы создать дозы.
functionName
Имя функции оценкиИмя функции оценки, заданное как вектор символов или строка. Выбор следующие.
'fminsearch'
'nlinfit'
(Statistics and Machine Learning Toolbox требуется.)
'fminunc'
(Optimization Toolbox требуется.)
'fmincon'
(Optimization Toolbox требуется.)
'lsqcurvefit'
(Optimization Toolbox требуется.)
'lsqnonlin'
(Optimization Toolbox требуется.)
'patternsearch'
(Global Optimization Toolbox требуется.)
'ga'
(Global Optimization Toolbox требуется.)
'particleswarm'
(Global Optimization Toolbox требуется.)
По умолчанию sbiofit
использует первую доступную функцию оценки среди следующего: lsqnonlin
, nlinfit
или fminsearch
. Тот же приоритет применяется к локальному выбору решателя по умолчанию за scattersearch
.
Для сводных данных поддерживаемых методов и подходящих опций, см. Поддерживаемые Методы для Оценки Параметра.
опции
Опции, характерные для функции оценкиОпции, характерные для функции оценки, заданной как struct или объект optimoptions
.
Struct statset
для nlinfit
Struct optimset
для fminsearch
Объект optimoptions
для lsqcurvefit
, lsqnonlin
, fmincon
, fminunc
, particleswarm
, ga
и patternsearch
struct
для scattersearch
Смотрите Опции по умолчанию для Алгоритмов Оценки для получения дополнительной информации и опции по умолчанию, сопоставленные с каждой функцией оценки.
variants
— Варианты[]
| вектор различных объектовВарианты, заданные как пустой массив или вектор различных объектов. Если пустой, никакие варианты не используются, даже если модель имеет активные варианты.
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми.
Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение.
Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
'ErrorModel','constant','UseParallel',true
задает постоянную ошибочную модель и запускать симуляции параллельно во время оценки параметра.'ErrorModel'
— Error'constant'
(значение по умолчанию) | вектор символов | представляет в виде строки | вектор строки | массив ячеек вектора символов | категориальный вектор | таблицаОшибочные модели, используемые для оценки, заданной как вектор символов, строка, представляют в виде строки вектор, массив ячеек из символьных векторов, категориальный вектор или таблицу.
Если это - таблица, это должно содержать одну переменную, которая является вектор-столбцом ошибочных имен модели. Имена могут быть массивом ячеек из символьных векторов, вектором строки или вектором категориальных переменных. Если таблица имеет больше чем одну строку, то свойство RowNames
должно совпадать с именами переменной отклика, заданными в правой стороне responseMap
. Если таблица не использует свойство RowNames
, n th ошибка сопоставлен с n th ответ.
Если вы задаете только одну ошибочную модель, то sbiofit
оценивает один набор параметров ошибок для всех ответов.
Если вы задаете несколько ошибочных моделей с помощью категориального вектора, вектора строки, или массив ячеек из символьных векторов, длина векторного массива или массива ячеек должна совпадать с количеством ответов в аргументе responseMap
.
Можно задать несколько ошибочных моделей, только если вы используете эти методы: lsqnonlin
, lsqcurvefit
, fmincon
, fminunc
, fminsearch
, patternsearch
, ga
и particleswarm
.
Существует четыре встроенных ошибочных модели. Каждая модель задает ошибку стандартный средний нуль и переменная (Gaussian) модульного отклонения e, результаты симуляции f и один или два параметра a и b.
'constant'
:
'proportional'
:
'combined'
:
'exponential'
:
Если вы задаете ошибочную модель, вы не можете задать веса за исключением постоянной ошибочной модели.
'Weights'
— ВесаВеса использовали для оценки, заданной как матрица действительных положительных весов, где количество столбцов соответствует количеству ответов или указателю на функцию, который принимает вектор предсказанных значений ответа и возвращает вектор действительных положительных весов.
Если вы задаете ошибочную модель, вы не можете использовать веса за исключением постоянной ошибочной модели. Если ни один, 'ErrorModel'
или 'Weights'
заданы, по умолчанию функция, не использует постоянную ошибочную модель с равными весами.
'Pooled'
— Подходящий флаг опцииfalse
(значение по умолчанию) | true
Подходящий флаг опции, задавая, соответствовать ли каждому человеку (false
) или объединить все отдельные данные (true
).
То, когда true
, функция выполняет подхождение всем людям или группам, одновременно использующим те же оценки параметра, и fitResults
является скаляром, заканчивается объект.
Когда false
, функция соответствует каждой группе или человеку, отдельно использующему группу - или отдельно-специфичные параметры, и fitResults
является вектором объектов результатов с одним результатом для каждой группы.
Используйте эту опцию, чтобы заменить любые значения CategoryVariableName
estiminfo
.
'UseParallel'
Отметьте для параллельных симуляцийfalse
(значение по умолчанию) | true
Отметьте, чтобы включить распараллеливание, заданное как true
или false
. Если true
и Parallel Computing Toolbox™ доступны, sbiofit
поддерживает несколько уровней распараллеливания, но только один уровень используется за один раз.
Для необъединенной подгонки ('Pooled'
= false
) для нескольких групп, каждая подгонка запущена параллельно.
Для объединенной подгонки ('Pooled'
= true
), распараллеливание происходит на уровне решателя. Другими словами, вычисления решателя, такие как оценки целевой функции, запущены параллельно. Для получения дополнительной информации смотрите Несколько Оценок Параметра параллельно.
'SensitivityAnalysis'
— Отметьте, чтобы использовать чувствительность параметра, чтобы определить градиенты целевой функцииtrue
| false
Отметьте, чтобы использовать чувствительность параметра, чтобы определить градиенты целевой функции, заданной как true
или false
. По умолчанию это - true
для fmincon
, fminunc
, lsqnonlin
и методов lsqcurvefit
. В противном случае это - false
. Если это верно, SimBiology всегда использует решатель sundials
, независимо от того, что вы выбрали как свойство SolverType
в объекте Configset
.
SimBiology использует метод приближения комплексного шага, чтобы вычислить чувствительность параметра. Такая расчетная чувствительность может использоваться, чтобы определить градиенты целевой функции во время оценки параметра, чтобы улучшить подбор кривой. Поведение по умолчанию sbiofit
должно использовать такую чувствительность, чтобы определить градиенты каждый раз, когда алгоритм основан на градиенте и если модель SimBiology® поддерживает анализ чувствительности. Для получения дополнительной информации об образцовых требованиях и анализе чувствительности, смотрите Вычисление Чувствительности.
'ProgressPlot'
— Отметьте, чтобы показать прогресс оценки параметраfalse
(значение по умолчанию) | true
Отметьте, чтобы показать прогресс оценки параметра, заданной как true
или false
. Если true
, новая фигура открывается содержащий графики, которые показывают логарифмическую вероятность, критерии завершения и оцененные параметры для каждой итерации. Эта опция не поддержана для метода nlinfit
.
Если вы используете функции Optimization Toolbox (fminunc
, fmincon
, lsqcurvefit
, lsqnonlin
), данные также показывают Оптимальность Первого порядка (Optimization Toolbox) график.
Для необъединенной подгонки каждая строка на графиках представляет человека. Для объединенной подгонки одна строка представляет всех людей. Строка становится увядшей, когда подгонка завершена. Графики также отслеживают прогресс, когда вы запускаете sbiofit
(и для объединенных и для необъединенных подгонок) в параллельных использующих удаленных кластерах. Для получения дополнительной информации см. График Прогресса.
fitResults
— Результаты оценкиOptimResults object
| NLINResults object
| Вектор объектов результатовРезультаты оценки, возвращенные как OptimResults object
или NLINResults object
или вектор этих объектов. Оба объекта результатов являются подклассами LeastSquaresResults object
.
Если функция использует nlinfit
, то 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
— Результаты симуляцииSimData
Результаты симуляции, возвращенные как вектор объектов SimData
, представляющих результаты симуляции для каждой группы или человека.
Если опцией 'Pooled'
является false
, то каждая симуляция использует специфичные для группы значения параметров. Если true
, то все симуляции используют те же значения параметров (всей генеральной совокупности).
Состояния, о которых сообщают в simdata
, являются состояниями, которые были включены во входной параметр responseMap
и любые другие состояния, перечисленные в свойстве StatesToLog
опций во время выполнения (RuntimeOptions
) модели SimBiology sm
.
SimBiology оценивает параметры методом наибольшего правдоподобия. Вместо того, чтобы непосредственно максимизировать функцию правдоподобия, SimBiology создает эквивалентную проблему минимизации. Каждый раз, когда возможно, оценка формулируется как оптимизация метода взвешенных наименьших квадратов (WLS), которая минимизирует сумму квадратов взвешенных невязок. В противном случае оценка формулируется как минимизация отрицания логарифма вероятности (NLL). Формулировка WLS часто сходится лучше, чем формулировка NLL, и SimBiology может использовать в своих интересах специализированные алгоритмы WLS, такие как алгоритм Levenberg-Marquardt, реализованный в lsqnonlin
и lsqcurvefit
. SimBiology использует WLS, когда существует одна ошибочная модель, которая является постоянной, пропорциональной, или экспоненциальной. SimBiology использует NLL, если у вас есть объединенная ошибочная модель или модель нескольких-ошибок, то есть, модель, имеющая ошибочную модель для каждого ответа.
sbiofit
поддерживает различные методы оптимизации и передает в сформулированном WLS или выражении NLL к методу оптимизации, который минимизирует его.
Выражение, которое минимизируется | |
---|---|
Метод взвешенных наименьших квадратов (WLS) | Для постоянной ошибочной модели, |
Для пропорциональной ошибочной модели, | |
Для экспоненциальной ошибочной модели, | |
Для числовых весов, | |
Отрицательная логарифмическая вероятность (NLL) | Для объединенной ошибочной модели и модели нескольких-ошибок, |
Переменные заданы можно следующим образом.
N | Количество экспериментальных наблюдений |
yi | ith экспериментальное наблюдение |
Ожидаемое значение ith наблюдения | |
Стандартное отклонение ith наблюдения.
| |
Вес ith ожидаемого значения | |
Когда вы используете числовые веса или функцию веса, веса приняты, чтобы быть обратно пропорциональными отклонению ошибки, то есть, где a является постоянным параметром ошибок. Если вы используете веса, вы не можете задать ошибочную модель кроме постоянной ошибочной модели.
Различные методы оптимизации имеют различные требования к функции, которая минимизируется. Для некоторых методов оценка параметров модели выполняется независимо от оценки ошибочных параметров модели. Следующая таблица обобщает ошибочные модели и любые отдельные формулы, используемые для оценки ошибочных параметров модели, где a и b являются ошибочными параметрами модели, и e является стандартным средним нулем и переменной (Gaussian) модульного отклонения.
Ошибочная модель | Функция оценки параметра ошибок |
---|---|
'constant' : | |
'exponential' : | |
'proportional' : | |
'combined' : | Параметры ошибок включены в минимизацию. |
Веса |
nlinfit
только поддерживает одну ошибочные модели, не модели нескольких-ошибок, то есть, специфичные для ответа ошибочные модели. Для объединенной ошибочной модели это использует итеративный алгоритм WLS. Для других ошибочных моделей это использует алгоритм WLS, как описано ранее. Для получения дополнительной информации смотрите nlinfit
.
Если вы используете пропорциональную ошибочную модель во время подбора кривой данных, стараетесь не задавать точки данных время от времени, где решение (результат симуляции) является нулем, или устойчивое состояние является нулем. В противном случае можно столкнуться с проблемами деления на нуль. Рекомендуется, чтобы вы удалили те точки данных из набора данных.
Функция | Опции по умолчанию | ||||||
---|---|---|---|---|---|---|---|
nlinfit |
| ||||||
fmincon |
| ||||||
fminunc |
| ||||||
fminsearch |
| ||||||
lsqcurvefit , lsqnonlin | Требует Optimization Toolbox.
| ||||||
patternsearch | Требует Global Optimization Toolbox.
| ||||||
ga | Требует Global Optimization Toolbox.
| ||||||
particleswarm | Требует Global Optimization Toolbox. sbiofit использует следующие опции по умолчанию для алгоритма particleswarm , за исключением:
| ||||||
scattersearch | Смотрите поля точек алгоритм поиска. |
Метод scattersearch
реализует глобальный алгоритм оптимизации [2], который обращается к некоторым проблемам оценки параметра динамические модели, такие как сходимость к локальным минимумам.
Алгоритм выбирает подмножество точек от начального пула точек. В том подмножестве некоторые точки являются лучшими по качеству (то есть, самое низкое значение функции), и некоторые случайным образом выбраны. Алгоритм итеративно оценивает точки и исследует различные направления вокруг различных решений найти лучшие решения. Во время этого шага итерации алгоритм заменяет любое старое решение на новое лучшего качества. Итерации продолжают, пока любому критерию остановки не соответствуют. Это затем запускает локальный решатель на лучшей точке.
Инициализация
Чтобы запустить поля точек поиск, алгоритм сначала решает, что общему количеству точек было нужно (NumInitialPoints
). По умолчанию общим количеством является 10*N
, где N является количеством предполагаемых параметров. Это выбирает точки NumInitialPoints
(строки) из InitialPointMatrix
. Если InitialPointMatrix
не имеет достаточного количества точек, алгоритм вызывает функцию, определяемую в CreationFcn
, чтобы сгенерировать дополнительные необходимые точки. По умолчанию латинская выборка гиперкуба используется, чтобы сгенерировать эти дополнительные точки. Алгоритм затем выбирает подмножество точек NumTrialPoints
от точек NumInitialPoints
. Часть (FractionInitialBest
) подмножества содержит лучшие точки с точки зрения качества. Остающиеся точки в подмножестве случайным образом выбраны.
Шаги итерации
Алгоритм выполняет итерации на точках в подмножестве можно следующим образом:
Задайте гиперпрямоугольники вокруг каждой пары точек при помощи относительных качеств (то есть, значения функции) этих точек как мера смещения, чтобы создать эти прямоугольники.
Оцените новое решение в каждом прямоугольнике. Если новое решение превосходит исходное решение по характеристикам, замените оригинал на новый.
Примените движение - вне стратегии к улучшенным решениям и использованию многообещающие направления, чтобы найти лучшие решения.
Запустите локальный поиск в каждой итерации LocalSearchInterval
. Используйте вероятность LocalSelectBestProbability
, чтобы выбрать лучшую точку как отправную точку для локального поиска. По умолчанию решение случайно, давая равному шансу выбрать лучшую точку или случайную точку от испытательных точек. Если новое решение превосходит старое решение по характеристикам, замените старый на новый.
Замените любую остановленную точку, которая не производит нового решения для поражения после секунд MaxStallTime
с другой точкой от начального набора.
Оцените критерий остановки. Прекратите выполнять итерации, если каким-либо критериям соответствуют.
Алгоритм затем запускает локальный решатель на лучшей замеченной точке.
Критерий остановки
Алгоритм выполняет итерации, пока он не достигает останавливающегося критерия.
Остановка опции | Остановка теста |
---|---|
FunctionTolerance и MaxStallIterations | Относительное изменение в лучшем значении целевой функции по последнему |
MaxIterations | Количество итераций достигает |
OutputFcn |
|
ObjectiveLimit | Лучшее значение целевой функции в итерации меньше чем или равно |
MaxStallTime | Лучшее значение целевой функции не изменилось за прошлые секунды |
MaxTime | Функциональное время выполнения превышает секунды |
Вы создаете опции для алгоритма с помощью struct
.
Опция | Описание |
---|---|
CreationFcn | Обработайте к функции, которая создает дополнительные точки, необходимые для алгоритма. Значением по умолчанию является вектор символов Функциональная подпись: |
Display | Уровень отображения возвращен в командную строку.
|
FractionInitialBest | Числовой скаляр от |
FunctionTolerance | Числовой скаляр от |
InitialPointMatrix | Начальная буква (или частичный) набор точек. M-by-N действительная конечная матрица, где M является числом точек и N, является количеством предполагаемых параметров. Если M Если M InitialTransformedValue estimatedInfo object , то есть, [estiminfo.InitialTransformedValue] . |
LocalOptions | Опции для локального решателя. Это может быть struct (созданный с optimset или statset ) или объект optimoptions , в зависимости от локального решателя. Значением по умолчанию является вектор символов 'auto' , который использует опции по умолчанию выбранного решателя за некоторыми исключениями. В дополнение к этим исключениям следующие опции ограничивают время, проведенное в локальном решателе, потому что это неоднократно называется:
|
LocalSearchInterval | Положительное целое число. Значением по умолчанию является |
LocalSelectBestProbability | Числовой скаляр от |
LocalSolver | Вектор символов или строка, задающая имя локального решателя. Поддерживаемыми методами является Локальный решатель по умолчанию выбран со следующим приоритетом:
|
MaxIterations | Положительное целое число. Значением по умолчанию является вектор символов |
MaxStallIterations | Положительное целое число. Значением по умолчанию является |
MaxStallTime | Положительная скалярная величина. Значением по умолчанию является |
MaxTime | Положительная скалярная величина. Значением по умолчанию является |
NumInitialPoints | Положительное целое число, которое является |
NumTrialPoints | Положительное целое число, которое является |
ObjectiveLimit | Скаляр. Значением по умолчанию является |
OutputFcn | Указатель на функцию или cell-массив указателей на функцию. Выходные функции могут считать итеративные данные и остановить решатель. Значением по умолчанию является Подписью выходной функции является
|
TrialStallLimit | Положительное целое число, со значением по умолчанию |
UseParallel | Логический флаг, чтобы вычислить целевую функцию параллельно. Значением по умолчанию является |
XTolerance | Числовой скаляр от Получить отчет каждого потенциального локального минимального, набора |
Существует два способа использовать параллельные вычисления для оценки параметра.
'UseParallel'
на истинуЧтобы включить распараллеливание для sbiofit
, установите пару "имя-значение" 'UseParallel'
на true
. Функция поддерживает несколько уровней распараллеливания, но только один уровень используется за один раз. Для необъединенного пригодного для нескольких групп (или люди), каждая подгонка запускается параллельно. Для объединенной подгонки распараллеливание происходит на уровне решателя, если решатель поддерживает его. Таким образом, sbiofit
устанавливает параллельную опцию соответствующего метода оценки (решатель) к истине, и оценки функции возражения выполняются параллельно. Например, градиенты вычисляются параллельно для основанных на градиенте методов. Если вы выполняете объединенную подгонку с несколькими группами, использующими решатель, который не имеет параллельной опции, симуляции запущенный параллельно для каждой группы во время оптимизации (оценка наибольшего правдоподобия).
parfeval
или parfor
Можно также вызвать sbiofit
в цикле parfor
или использовать parfeval
в for
- цикл, чтобы выполнить несколько оценок параметра параллельно. Рекомендуется, чтобы вы использовали parfeval
потому что эти параллельные оценки, запущенные асинхронно. Если одна подгонка производит ошибку, она не влияет на другие подгонки.
При попытке найти глобальный минимум, можно использовать глобальные решатели, такие как particleswarm
или ga
(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).
Отправьте модель каждому рабочему. Следующий код гарантирует, что модель распределяется только однажды каждому рабочему.
modelOnWorkers = parallel.pool.Constant(m1);
Используя (рекомендуемый) parfeval
Во-первых, задайте указатель на функцию, который использует локальную функцию sbiofitpar
для оценки. Убедитесь, что функциональный sbiofitpar
задан в конце скрипта.
optimfun = @(x) sbiofitpar(modelOnWorkers.Value,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.0219 0.13319 -1.2842
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(modelOnWorkers.Value,grpData,responseMap,estimatedParam); fitResultPar = [fitResultPar;fitResultTemp]; end
Закройте параллельный пул.
delete(poolObj);
sbiofit
поддерживает глобальные методы оптимизации, а именно, ga
и particleswarm
(требуемый Global Optimization Toolbox). Чтобы улучшить результаты оптимизации, эти методы позволяют вам запустить гибридную функцию после того, как глобальный решатель остановится. Гибридная функция использует конечный пункт, возвращенный глобальным решателем как его начальная точка. Поддерживаемые гибридные функции:
Убедитесь, что ваша гибридная функция принимает ваши ограничения задач. Таким образом, если ваши параметры ограничены, используйте соответствующую функцию (такую как fmincon
или patternsearch
) для ограниченной оптимизации. Если не ограниченный, используйте fminunc
, fminsearch
или patternsearch
. В противном случае sbiofit
выдает ошибку.
Для проиллюстрированного примера смотрите, Выполняют Гибридную Оптимизацию Используя sbiofit.
[1] И, T-M., Kitano, H. и Саймон, M. (2003). Количественная характеристика дрожжей гетеротримерный цикл белка G. PNAS. 100, 10764–10769.
[2] Габор, A., и Банга, J.R. (2015). Устойчивая и эффективная оценка параметра динамические модели биологических систем. Системная биология BMC. 9:74.
Чтобы запуститься параллельно, установите 'UseParallel'
на true
.
Для получения дополнительной информации смотрите аргумент пары "имя-значение" 'UseParallel'
.
LeastSquaresResults object
| NLINResults object
| OptimResults object
| estimatedInfo object
| fmincon
| fminsearch
| fminunc
| ga
| groupedData object
| lsqcurvefit
| lsqnonlin
| nlinfit
| particleswarm
| patternsearch
| sbiofitmixed
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.