exponenta event banner

Объект EstimateInfo

Объект, содержащий информацию об оценочных количествах модели

Описание

estimatedInfo объект содержит информацию об оценочных количествах модели (видах, параметрах или отсеках). Используйте этот объект, чтобы указать, какие величины в модели SimBiology ® оцениваются, какие преобразования параметров используются, и, при необходимости, начальные оценки для этих величин при использованииsbiofit или sbiofitmixed.

Строительство

estimInfo = estimatedInfo создает пустой estimatedInfo объект.

estimInfoArray = estimatedInfo(transformedNames) создает массив estimatedInfo объекты для количеств, указанных в transformedNames. Исходные значения для этих величин получаются из модели SimBiology при запуске sbiofit или sbiofitmixed.

estimInfoArray = estimatedInfo(___,'InitialTransformedValue',itValues) определяет начальные преобразованные значения величин модели, указанные itValues. Вы не можете указать эту пару имя-значение вместе с 'InitialValue' пара имя-значение.

estimInfoArray = estimatedInfo(___,'InitialValue',iValues) определяет начальные значения величин модели, указанные iValues. Вы не можете указать эту пару имя-значение вместе с 'InitialTransformedValue' пара имя-значение.

estimInfoArray = estimatedInfo(___,'Bounds',boundValues) определяет нижнюю и верхнюю границы для оценки параметров, указанные boundValues. Вы не можете указать эту пару имя-значение вместе с 'TransformedBounds' пара имя-значение. Все методы поддерживают границы параметров в sbiofit (то есть fminsearch, nlinfit(Набор инструментов для статистики и машинного обучения), fminunc(Панель инструментов оптимизации), fmincon(Панель инструментов оптимизации), lsqcurvefit(Панель инструментов оптимизации), lsqnonlin(Панель инструментов оптимизации), patternsearch (инструментарий глобальной оптимизации), ga (инструментарий глобальной оптимизации), particleswarm(Панель инструментов глобальной оптимизации) и scattersearch). При использовании fminsearch, nlinfit, или fminunc с границами целевая функция возвращает Inf если превышены границы. При включении таких параметров, как FunValCheck, оптимизация может быть ошибочной, если границы превышены во время оценки. При использовании nlinfit, он может сообщить о предупреждениях о том, что якобианец является плохо обусловленным или не может оценить, если окончательный результат слишком близко к границам. sbiofitmixed не поддерживает границы параметров.

estimInfoArray = estimatedInfo(___,'TransformedBounds',tBoundValues) определяет преобразованные границы для оценки параметров, указанные tBoundValues. Вы не можете указать эту пару имя-значение вместе с 'Bounds' пара имя-значение.

estimInfoArray = estimatedInfo(___,'CategoryVariableName',groups) определяет, какие группы в данных имеют отдельные оценочные значения для параметров. Другими словами, это позволяет оценить значения параметров, специфичные для каждой группы или категории. Например, можно оценить параметры по возрасту или полу человека.

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

свернуть все

Имена расчетных величин модели, указанных как символьный вектор, строка, строковый вектор или массив ячеек символьных векторов. Каждый символьный вектор (или строка) должен иметь один из следующих форматов:

  • Наименование или полное наименование количества модели, например 'Cl', 'Reaction1.k','[c 1].[r 1]'

  • Имя поддерживаемого преобразования параметров (log, logit, или probit) с последующим названием количества в скобках, например 'log(Cl)', 'logit(Reaction1.k)', 'probit([c 1].[r 1])'

Дополнительные сведения см. в разделе Преобразования параметров.

Начальные преобразованные значения величин модели, заданные как вектор или массив ячеек. Он должен иметь ту же длину, что и transformedNames. Если это массив ячеек, каждый элемент ячейки должен быть скаляром или пустой матрицей [].

Начальные значения величин модели, заданные как вектор или массив ячеек. Он должен иметь ту же длину, что и transformedNames. Если это массив ячеек, каждый элемент ячейки должен быть скаляром или пустой матрицей [].

Ограничения привязки для оцененных параметров, заданные как матрица или массив ячеек. Если boundValues - матрица, это N-by-2 матрица чисел, где N равно 1 или длина transformedNames. Если это массив ячеек, каждый элемент должен быть вектором размера 1 на 2 или пустым [].

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

Вы не можете указать эту пару имя-значение вместе с 'TransformedBounds' пара имя-значение.

Преобразованные ограничения границ для оцененных параметров, заданных как матрица или массив ячеек. tBoundValues - N-by-2 матрица чисел, где N равно 1 или длина transformedNames. Если это массив ячеек, каждый элемент должен быть вектором размера 1 на 2 или пустым [].

Каждая строка tBoundValues соответствует нижней (первое число) и верхней (второе число) границам каждого элемента (например, параметра) estimInfo. Нижняя граница должна быть меньше верхней границы. При указании одной строки границы применяются ко всем элементам estimInfoArray.

Вы не можете указать эту пару имя-значение вместе с 'Bounds' пара имя-значение.

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

  • Имя переменной в данных, используемых для фитинга

  • '<GroupVariableName>' (по умолчанию)

  • '<None>'

'<GroupVariableName>' указывает, что каждая группа в данных использует отдельную оценку параметра. '<None>' указывает, что все группы в данных используют одну и ту же оценку параметров.

Если данные, которые планируется использовать для фитинга, содержат переменные, группирующие данные по различным категориям, можно указать имена этих переменных. Например, если имеется переменная с именем Sex который указывает на мужчин и женщин, вы можете указать 'Sex' в качестве 'CategoryVariableName'. Это означает, что все мужчины имеют один набор оценок параметров, а все женщины имеют отдельный набор.

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

свернуть все

Оценочное количество модели, возвращенное как estimatedInfo объект.

Расчетные количества модели, возвращенные как estimatedInfo объект или вектор estimatedInfo объекты. Если transformedNames - одиночный символьный вектор, estimInfoArray является скаляром estimatedInfo объект. В противном случае estimInfoArray является вектором estimatedInfo объекты с той же длиной, что и входной аргумент transformedNames.

Свойства

Name

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

Transform

Символьный вектор, указывающий, преобразовано ли значение количества во время оценки. Допустимые имена: '', 'log', 'logit', и 'probit'. Пустой символьный вектор '' указывает, что преобразование не применяется.

Логарифмическое преобразование гарантирует, что значение компонента всегда будет положительным во время оценки. logit и probit преобразование ограничивает значения компонентов в диапазоне от 0 до 1.

probit функция - обратная кумулятивная функция распределения, связанная со стандартным нормальным распределением. Для probit transform, SimBiology использует norminv (Статистика и инструментарий машинного обучения). Следовательно, для преобразования требуется Toolbox™ статистики и машинного обучения.

Логитовая функция, которая является обратной сигмоидной функции, определяется как logit(x) = log(x) – log(1 – x).

TransformedName

Вектор символов только для чтения, объединяющий имя преобразования (например, 'log'и наименование количества (например, 'Central') в выражение (например, 'log(Central)').

InitialValue

Пустая матрица [] или вещественное, конечное, скалярное значение, определяющее исходные значения величин модели, используемых для оценки. Пустая матрица указывает, что начальные значения для оценки получены из соответствующего свойства количества (Value для параметров, InitialAmount для видов, и Capacity для отсеков).

Изменение этого свойства автоматически обновляет InitialTransformedValue свойство соответствующих величин модели.

InitialTransformedValue

Пустая матрица [] или скалярное значение, определяющее начальные преобразованные значения величин модели, используемых для оценки. Пустая матрица указывает, что начальные преобразованные значения для оценки получаются путем преобразования соответствующего свойства количества (Value для параметров, InitialAmount для видов, и Capacity для отсеков).

Изменение этого свойства автоматически обновляет InitialValue свойство соответствующих величин модели.

Bounds

Пустая матрица [] или вектор 1 на 2 вещественного конечного значения, определяющего нижнюю и верхнюю границы для расчетного параметра. Пустая матрица [] указывает, что единственными ограничивающими ограничениями являются ограничения, введенные значением Transform. Например, настройка Transform кому 'log' ограничивает параметр диапазоном [0,inf]. Изменение этого свойства также обновляет TransformedBounds.

Нижняя граница должна быть меньше верхней границы.

TransformedBounds

Пустая матрица [] или вектор 1 на 2 вещественного конечного значения, определяющего нижнюю и верхнюю границы для расчетного параметра. Пустая матрица [] указывает, что значение параметра в преобразованном пространстве не ограничено. Изменение этого свойства также обновляет Bounds.

Нижняя граница должна быть меньше верхней границы.

CategoryVariableName

Символьный вектор или массив ячеек символьных векторов, указывающих, какие группы в данных имеют отдельные оценочные значения для параметра. Символьный вектор может быть именем переменной в данных, используемых для подгонки, или одним из ключевых слов: '<GroupVariableName>' или '<None>'.

'<GroupVariableName>' указывает, что каждая группа в данных использует отдельную оценку параметра. '<None>' указывает, что все группы в данных используют одну и ту же оценку параметров.

При указании 'Pooled' аргумент пары имя-значение (для true или false) при запуске sbiofit, то функция игнорирует эту переменную. sbiofitmixed всегда игнорирует это свойство.

Примеры

свернуть все

Создайте однокамерную модель ПК с болюсным дозированием и линейным зазором.

pkmd                    = PKModelDesign;
pkc1                    = addCompartment(pkmd,'Central');
pkc1.DosingType         = 'Bolus';
pkc1.EliminationType    = 'linear-clearance';
pkc1.HasResponseVariable = true;

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

estimated = estimatedInfo('log(Central)','InitialValue', 1,'Bounds',[0 10])
estimated = 
  estimatedInfo with properties:

                       Name: 'Central'
                  Transform: 'log'
            TransformedName: 'log(Central)'
               InitialValue: 1
    InitialTransformedValue: 0
                     Bounds: [0 10]
          TransformedBounds: [-Inf 2.3026]
       CategoryVariableName: '<GroupVariableName>'

Фон

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

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

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

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

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

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

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

  • Болюсная доза 10 мг

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

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

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

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

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

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

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

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

Построение однокамерной модели

Используйте встроенную библиотеку ПК для построения однокамерной модели с болюсным дозированием и устранением первого порядка, где скорость устранения зависит от зазора и объема центрального отсека. Используйте 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;

Дополнительные сведения о создании моделей компартментальных ПК с использованием встроенной библиотеки SimBiology ® см. в разделе Создание фармакокинетических моделей.

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

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

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

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

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

responseMap = {'Drug_Central = Conc'};

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

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

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

Параметры оценки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

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

Фон

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

Загрузить данные

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

clear
load('sd5_302RAgeSex.mat')

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

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

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

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

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

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

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

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

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

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

Дополнительные сведения о создании моделей компартментальных ПК с использованием встроенной библиотеки SimBiology ® см. в разделе Создание фармакокинетических моделей.

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

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

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

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

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

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

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

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

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

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

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

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

Показать результаты

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Параметры, специфичные для категории оценки

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

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

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

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

Результаты графика

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

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

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

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

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

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

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

Результаты графика

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

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

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

Сравнить остатки

Сравнить остатки CentralConc и PeripheralConc отклики для каждой посадки.

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

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

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

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

Представлен в R2014a