Выполните оценку параметра с помощью объекта задачи SimBiology
выполняет оценку параметра с помощью модели, данных и опций, заданных fitResults = fit(problemObject)problemObject и возвращает подходящие результаты.
[ также возвращает данные моделирования fitResults,simdataI] = fit(problemObject)simdataI использование предполагаемых значений параметров. Если problemObject.FitFunction "sbiofitmixed", симуляции используют отдельные оценки параметра.
[ также возвращает оценки параметра населения использования результатов симуляции. Этот синтаксис поддерживается только когда fitResults,simdataI,simdataP] = fit(problemObject)problemObject.FitFunction "sbiofitmixed".
В этом примере показано, как оценить параметры PK модели SimBiology с помощью подхода, основанного на проблеме.
Загрузите синтетический набор данных. Это содержит данные о концентрации плазмы препарата, измеренные и в центральных и в периферийных отсеках.
load('data10_32R.mat')Преобразуйте набор данных в groupedData объект.
gData = groupedData(data); gData.Properties.VariableUnits = ["","hour","milligram/liter","milligram/liter"];
Отобразите данные.
sbiotrellis(gData,"ID","Time",["CentralConc","PeripheralConc"],... Marker="+",LineStyle="none");

Пользуйтесь встроенной библиотекой PK, чтобы создать модель 2D отсека с дозированием вливания и устранением первого порядка. Используйте объект configset включить модульное преобразование.
pkmd = PKModelDesign; pkc1 = addCompartment(pkmd,"Central"); pkc1.DosingType = "Infusion"; pkc1.EliminationType = "linear-clearance"; pkc1.HasResponseVariable = true; pkc2 = addCompartment(pkmd,"Peripheral"); model2cpt = construct(pkmd); configset = getconfigset(model2cpt); configset.CompileOptions.UnitConversion = true;
Примите, что каждый индивидуум получает капельное внутривенное введение во время = 0 с общим объемом вливания 100 мг на уровне 50 мг/час. Для получения дополнительной информации при подготовке различных стратегий дозирования, смотрите Дозы в Моделях SimBiology.
dose = sbiodose("dose","TargetName","Drug_Central"); dose.StartTime = 0; dose.Amount = 100; dose.Rate = 50; dose.AmountUnits = "milligram"; dose.TimeUnits = "hour"; dose.RateUnits = "milligram/hour";
Создайте объект задачи.
problem = fitproblem
problem =
fitproblem with properties:
Required:
Data: [0x0 groupedData]
Estimated: [1x0 estimatedInfo]
FitFunction: "sbiofit"
Model: [0x0 SimBiology.Model]
ResponseMap: [1x0 string]
Optional:
Doses: [0x0 SimBiology.Dose]
FunctionName: "auto"
Options: []
ProgressPlot: 0
UseParallel: 0
Variants: [0x0 SimBiology.Variant]
sbiofit options:
ErrorModel: "constant"
Pooled: "auto"
SensitivityAnalysis: "auto"
Weights: []
Задайте необходимые свойства объекта.
problem.Data = gData; problem.Estimated = estimatedInfo(["log(Central)","log(Peripheral)","Q12","Cl_Central"],InitialValue=[1 1 1 1]); problem.Model = model2cpt; problem.ResponseMap = ["Drug_Central = CentralConc","Drug_Peripheral = PeripheralConc"];
Задайте дозу, которая будет применена во время подбора кривой.
problem.Doses = dose;
Покажите прогресс оценки.
problem.ProgressPlot = true;
Подбирайте модель ко всем данным, объединенным вместе: то есть, оцените один набор параметров для всех индивидуумов путем установки Pooled свойство к true.
problem.Pooled = true;
Выполните оценку с помощью fit функция объекта.
pooledFit = fit(problem);

Отобразите предполагаемые значения параметров.
pooledFit.ParameterEstimates
ans=4×3 table
Name Estimate StandardError
______________ ________ _____________
{'Central' } 1.6627 0.16569
{'Peripheral'} 2.6864 1.0644
{'Q12' } 0.44945 0.19943
{'Cl_Central'} 0.78497 0.095621
Постройте подходящие результаты.
plot(pooledFit);

Оцените один набор параметров для каждого индивидуума и смотрите, улучшаются ли оценки параметра.
problem.Pooled = false; unpooledFit = fit(problem);

Отобразите предполагаемые значения параметров.
unpooledFit.ParameterEstimates
ans=4×3 table
Name Estimate StandardError
______________ ________ _____________
{'Central' } 1.422 0.12334
{'Peripheral'} 1.5619 0.36355
{'Q12' } 0.47163 0.15196
{'Cl_Central'} 0.5291 0.036978
ans=4×3 table
Name Estimate StandardError
______________ ________ _____________
{'Central' } 1.8322 0.019672
{'Peripheral'} 5.3364 0.65327
{'Q12' } 0.2764 0.030799
{'Cl_Central'} 0.86035 0.026257
ans=4×3 table
Name Estimate StandardError
______________ ________ _____________
{'Central' } 1.6657 0.038529
{'Peripheral'} 5.5632 0.37063
{'Q12' } 0.78361 0.058657
{'Cl_Central'} 1.0233 0.027311
plot(unpooledFit);

Сгенерируйте график остаточных значений в зависимости от времени, чтобы сравнить объединенные и необъединенные результаты подгонки. Фигура указывает, что необъединенные подходящие остаточные значения меньше, чем те из объединенной подгонки, как ожидалось. В дополнение к сравнению остаточных значений другие строгие критерии могут использоваться, чтобы сравнить подходящие результаты.
t = [gData.Time;gData.Time]; res_pooled = vertcat(pooledFit.R); res_pooled = res_pooled(:); res_unpooled = vertcat(unpooledFit.R); res_unpooled = res_unpooled(:); figure; plot(t,res_pooled,"o",MarkerFaceColor="w",markerEdgeColor="b") hold on plot(t,res_unpooled,"o",MarkerFaceColor="b",markerEdgeColor="b") refl = refline(0,0); % A reference line representing a zero residual title("Residuals versus Time"); xlabel("Time"); ylabel("Residuals"); legend(["Pooled","Unpooled"]);

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

Отобразите предполагаемые значения параметров.
NLMEResults.IndividualParameterEstimates
ans=12×3 table
Group Name Estimate
_____ ______________ ________
1 {'Central' } 1.4623
1 {'Peripheral'} 1.5306
1 {'Q12' } 0.4587
1 {'Cl_Central'} 0.53208
2 {'Central' } 1.783
2 {'Peripheral'} 6.6623
2 {'Q12' } 0.3589
2 {'Cl_Central'} 0.8039
3 {'Central' } 1.7135
3 {'Peripheral'} 4.2844
3 {'Q12' } 0.54895
3 {'Cl_Central'} 1.0708
Постройте подходящие результаты.
plot(NLMEResults);

Постройте взвешенные остаточные значения условного выражения (CWRES), и индивидуум взвесил остаточные значения (IWRES) ожидаемых значений модели.
plotResiduals(NLMEResults,'predictions')
problemObject — Проблема оценки SimBiologyfitproblem объектПроблема оценки SimBiology в виде fitproblem объект.
fitResults — Результаты оценкиOptimResults возразите | NLINResults возразите | NLMEResults возразите | вектор из объектов результатовРезультаты оценки, возвращенные как скалярный OptimResults объект, NLINResults объект, вектор из OptimResults или NLINResults объекты или скалярный NLMEResults объект.
Возвращенный тип объекта результатов варьируется в зависимости от того, если вы использовали problemObject.FitFunction="sbiofit" или problemObject.FitFunction="sbiofitmixed".
Если FitFunction="sbiofit" и FunctionName="nlinfit", возвращенным типом объекта результатов является NLINResults. Для других оптимизационных функций типом возвращенного объекта является OptimResults .
Если FitFunction="sbiofitmixed", типом возвращенного объекта всегда является NLMEResults.
Когда вы используете FitFunction="sbiofit", функция возвращает или скалярный объект результатов или вектор из объектов результатов можно следующим образом.
Для необъединенной подгонки функция соответствует каждой группе, отдельно использующей специфичные для группы параметры и fitResults вектор из объектов результатов с, каждый заканчивается объект для каждой группы.
Для объединенной подгонки функция выполняет подхождение всем индивидуумам или группам, одновременно использующим те же оценки параметра и fitResults скалярный объект результатов.
Когда объединенная опция не задана, и CategoryVariableName значения estimatedInfo объектами является весь <none>, fitResults один объект результатов. Это - то же поведение как объединенная подгонка.
Когда объединенная опция не задана, и CategoryVariableName значения estimatedInfo объектами является весь <GroupVariableName>, fitResults вектор из объектов результатов. Это - то же поведение как необъединенная подгонка.
Во всех других случаях, fitResults скалярный объект, содержащий оцененные значения параметров для различных групп или категорий, заданных CategoryVariableName.
Смотрите свойство Pooled для получения дополнительной информации о том, как выполнить объединенный, необъединенный или подгонку категории.
Когда вы используете FitFunction="sbiofitmixed", функция всегда возвращает скалярный NLMEResults объект.
simdataI — Результаты симуляцииSimData объектыРезультаты симуляции, возвращенные как вектор из SimData объекты, представляющие результаты симуляции для каждой группы (или индивидуум) использование отдельно-специфичных оценок параметра.
О состояниях сообщают в simDataI состояния, которые включены в problemObject.ResponseMap а также любые другие состояния, перечисленные в StatesToLog свойство опций во время выполнения (RuntimeOptions) из модели SimBiology problemObject.Model.
simdataP — Результаты симуляцииSimData объектыРезультаты симуляции, возвращенные как вектор из SimData объекты, представляющие результаты симуляции для каждой группы (или индивидуум) использование только оценок фиксированного эффекта (оценки параметра населения).
О состояниях сообщают в simDataP состояния, которые включены в problemObject.ResponseMap а также любые другие состояния, перечисленные в StatesToLog свойство опций во время выполнения (RuntimeOptions) из модели SimBiology problemObject.Model.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.