exponenta event banner

predict(LeastSquaresResults,OptimResults,NLINResults)

Моделируйте и оценивайте подобранную модель SimBiology

Синтаксис

[ynew,parameterEstimates]= predict(resultsObj)
[ynew,parameterEstimates]= predict(resultsObj,data,dosing)

Описание

[ynew,parameterEstimates]= predict(resultsObj) возвращает результаты симуляции ynew и оценки параметров parameterEstimates встроенной SimBiology® модель.

[ynew,parameterEstimates]= predict(resultsObj,data,dosing) возвращает результаты симуляции ynew и предполагаемые значения параметров parameterEstimates от оценки подобранной модели SimBiology с использованием заданной data и dosing информацию.

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

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

свернуть все

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

Выводит время или сгруппированные данные, заданные как вектор, или массив ячеек векторов с выходным временем, или groupedData object.

Если это вектор временных точек, predict моделирует модель с новыми временными точками, используя оценки параметров из объекта результатов resultsObj.

Если это массив ячеек из векторов временных точек, predict n раз симулирует модель, используя время выхода из каждого временного вектора, где n - длина data.

Если это groupedData объект должен иметь независимую переменную, такую как Time. Она также должна иметь групповую переменную, если обучающие данные, используемые для подбора кривой, имеют такую переменную. Можно использовать groupedData объект, чтобы запросить различные комбинации категорий, если resultsObj содержит оценки параметров для каждой категории. predict моделирует модель для каждой группы с заданными категориями. Например, предположим, что у вас есть набор оценок параметров для половой категории (мужчины и женщины) и возрастной категории (молодые и старые) в ваших обучающих данных. Можно использовать predict моделировать ответы старого мужчины (или любой другой комбинации), хотя такой пациент может не существовать в обучающих данных.

Если на resultsObj из оценки параметров конкретной категории, data должен быть groupedData объект.

Примечание

Если UnitConversion включен для базовой модели SimBiology, которая использовалась для подбора кривой и data является groupedData объект, data необходимо задать допустимые модули через data.Properties.VariableUnits свойство. Если это численный вектор или массив ячеек из векторов временных точек, predict использует TimeUnits модели.

Информация о дозах, заданная как пустой массив [] или 2-D матрица объектов дозы SimBiology (ScheduleDose object или RepeatDose object). Если dosing является матрицей объектов дозы, матрица должна содержать дозы по умолчанию или соответствовать исходным данным дозирования, используемым с sbiofit. То есть дозируйте объекты в dosing должны иметь те же значения свойств дозы (такие как TargetName) или должны быть параметризованы так же, как и исходные данные дозирования. Например, предположим, что исходная дозирующая матрица имеет два столбца доз, где дозы в первой колонке-мишени x и дозы во второй колонке-мишени y. Затем dosing должны иметь дозы в первом столбце, нацеленные на виды x и во втором столбце, нацеленные на виды y.

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

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

  • Допускается использование нескольких столбцов, чтобы можно было применить несколько объектов дозы к каждой группе или временному вектору. Все дозы в столбце должны быть дозами по умолчанию или должны ссылаться на те же компоненты в модели (для образца дозы должны иметь ту же цель дозы TargetName) и должны иметь согласованные параметризованные свойства, как в исходных данных дозирования, используемых с sbiofit. Для примера, если Amount свойство дозы, используемой в оригинале sbiofit вызов параметризован в параметр с параметрами model-scoped 'A', все дозы для соответствующей группы (столбца) в dosing должны иметь Amount свойство параметризовано в 'A'.

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

    d1 = sbiodose('d1');

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

Количество строк в dosing матрица и количество групп или выходных временных векторов в data определить общее количество результатов моделирования в выход ynew. Для получения дополнительной информации см. таблицу в ynew описание аргумента.

Примечание

Если UnitConversion включен для базовой модели SimBiology, которая использовалась для подбора кривой, dosing необходимо указать допустимую величину и временные модули.

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

свернуть все

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

Общее количество результатов симуляции в ynew зависит от количества групп или выходных временных векторов в data и количество строк в dosing матрица.

Количество групп или выходных временных векторов в dataКоличество строк в dosing матрицаРезультаты симуляции

1

0, то есть dosing пуст []

Общее количество SimData объекты в ynew равен 1.

Дозы во время симуляции не применяются.

1

1

Общее количество SimData объекты в ynew равен 1.

Данная строка доз применяется во время симуляции.

1

N

Общее количество SimData объекты в ynew является N.

Каждая строка dosing применяется к каждой симуляции.

N

0, то есть dosing пуст []

Общее количество SimData объекты в ynew является N.

Дозы во время симуляции не применяются.

N

1

Общее количество SimData объекты в ynew является N.

К каждой симуляции применяется одна и та же строка доз.

NN

Общее количество SimData объекты в ynew является N.

Каждая строка dosing применяется к отдельной группе в том же порядке, в котором появляются группы data.

MNФункция выдает ошибку при MN.

Предполагаемые значения параметров, возвращенные как таблица. Это идентично resultsObj.ParameterEstimates свойство. The predict метод использует эти значения параметров во время симуляции.

Примеры

свернуть все

Этот пример использует модель гетеротримерного 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]';

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

responseMap = 'GaFrac = GaFracExpt';

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

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

Использование 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  

Предположим, что вы хотите симулировать подобранную модель с использованием другого времени выхода, чем в обучающих данных. Можно использовать predict способ для этого.

Создайте новую переменную T с различными временами выхода.

T = [0;10;50;80;100;150;300;350;400;450;500;550];

Используйте predict метод для симуляции подобранной модели на новых временных точках. Дозирование не было задано, когда вы впервые побежали sbiofit. Следовательно, вы не можете использовать какую-либо информацию о дозах с predict метод, и пустой массив должен быть задан в качестве третьего входного параметра.

ynew = predict(fitResult,T,[]);

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

sbioplot(ynew);

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.

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

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

clear
load('sd5_302RAgeSex.mat');

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

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

Для свойств IndependentVariableName и GroupVariableName автоматически заданы переменные Time и ID данных.

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'

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

trainData = gData([gData.ID < 6],:);
testData  = gData([gData.ID == 6],:);

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

sbiotrellis(trainData,'ID','Time',{'CentralConc','PeripheralConc'});

Figure contains 6 axes. Axes 1 with title ID 1 contains 2 objects of type line. These objects represent CentralConc, PeripheralConc. Axes 2 with title ID 3 contains 2 objects of type line. Axes 3 with title ID 5 contains 2 objects of type line. Axes 4 with title ID 2 contains 2 objects of type line. Axes 5 with title ID 4 contains 2 objects of type line. Axes 6 is empty.

Используйте встроенную библиотеку 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;

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

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

Используйте свойство '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,trainData,responseMap,estimatedParam,dose)
categoryFit = 
  OptimResults with properties:

                   ExitFlag: 1
                     Output: [1x1 struct]
                  GroupName: []
                       Beta: [8x5 table]
         ParameterEstimates: [20x6 table]
                          J: [40x8x2 double]
                       COVB: [8x8 double]
           CovarianceMatrix: [8x8 double]
                          R: [40x2 double]
                        MSE: 0.1047
                        SSE: 7.5349
                    Weights: []
              LogLikelihood: -19.0159
                        AIC: 54.0318
                        BIC: 73.0881
                        DFE: 72
             DependentFiles: {1x3 cell}
    EstimatedParameterNames: {'Central'  'Peripheral'  'Q12'  'Cl_Central'}
             ErrorModelInfo: [1x3 table]
         EstimationFunction: 'lsqnonlin'

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

Постройте график предполагаемых результатов для конкретной категории. Для параметров Cl_Central и Q12 все мужчины имели одинаковые оценки, и аналогично для женщин. Для Центрального и Периферического параметров все молодые индивидуумы имели одинаковые оценки, и аналогично для старых индивидуумов.

plot(categoryFit);

Figure contains 6 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 3 contains 4 objects of type line. Axes 3 with title Group 5 contains 4 objects of type line. Axes 4 with title Group 2 contains 4 objects of type line. Axes 5 with title Group 4 contains 4 objects of type line. Axes 6 is empty.

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

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

[ynew,paramestim] = predict(categoryFit,testData,dose);

Постройте график симулированных откликов старого самца.

sbioplot(ynew);

Figure contains an axes. The axes with title States versus Time contains 2 objects of type line. These objects represent Central.Drug_Central, Peripheral.Drug_Peripheral.

Переменная paramestim содержит предполагаемые параметры, используемые методом предсказания. Оценки параметров для соответствующих категорий были получены из свойства categoryFit.ParameterEstimes. В частности, оценки параметров Central и Peripheral получают из Старой группы, а Q12 и Cl_Central оценки параметров получают из группы Male.

paramestim
paramestim=4×6 table
         Name         Estimate    StandardError    Group    CategoryVariableName    CategoryValue
    ______________    ________    _____________    _____    ____________________    _____________

    {'Central'   }     1.1993       0.0046483        6            {'Age'}               Old      
    {'Peripheral'}    0.55195        0.015098        6            {'Age'}               Old      
    {'Q12'       }     1.4969        0.074321        6            {'Sex'}               Male     
    {'Cl_Central'}    0.56363       0.0072862        6            {'Sex'}               Male     

Наложите экспериментальные результаты на моделируемые данные.

figure;
plot(testData.Time,testData.CentralConc,'LineStyle','none','Marker','d','MarkerEdgeColor','b');
hold on
plot(testData.Time,testData.PeripheralConc,'LineStyle','none','Marker','d','MarkerEdgeColor','r');
plot(ynew.Time,ynew.Data(:,1),'b');
plot(ynew.Time,ynew.Data(:,2),'r');
hold off
legend({'OBS1(CentralConc)','OBS2(PeripheralConc)',...
        'PRED1(Central.Drug\_Central)','PRED2(Peripheral.Drug\_Peripheral)'});

Figure contains an axes. The axes contains 4 objects of type line. These objects represent OBS1(CentralConc), OBS2(PeripheralConc), PRED1(Central.Drug\_Central), PRED2(Peripheral.Drug\_Peripheral).

Ссылки

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

Введенный в R2014a