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