getSimulationResults

Получите результаты симуляции модели и демонстрационные значения используемые в вычислениях индексы Sobol

Описание

пример

[samplesTable,simdata,validRuns] = getSimulationResults(sobolObj,idx) возвращает результаты симуляции и демонстрационные значения в SimBiology.gsa.Sobol объект sobolObj для заданного индекса idx. Индекс представляет i th столбец в sobolObj.SimulationInfo.SimData. Эта функция полезна, когда это необходимо, чтобы диагностировать или узнать, какие выборки параметра сгенерировали данные моделирования, которые привели к не пройдено симуляциям модели.

Примеры

свернуть все

Загрузите модель роста опухоли.

sbioloadproject tumor_growth_vpop_sa.sbproj

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

v = getvariant(m1);
d = getdose(m1,'interval_dose');

Получите активный configset и установите вес опухоли как ответ.

cs = getconfigset(m1);
cs.RuntimeOptions.StatesToLog = 'tumor_weight';

Симулируйте модель и постройте профиль роста опухоли.

sbioplot(sbiosimulate(m1,cs,v,d));

Figure contains an axes object. The axes object with title States versus Time contains an object of type line. This object represents tumor_weight.

Выполните глобальный анализ чувствительности (GSA) на модели, чтобы найти параметры модели, к которым рост опухоли чувствителен.

Во-первых, получите параметры модели интереса, которые вовлечены в фармакодинамику роста опухоли. Задайте ответ модели как вес опухоли.

modelParamNames = {'L0','L1','w0','k1','k2'};
outputName = 'tumor_weight';

Затем выполните GSA путем вычисления первого - и общий порядок индексы Sobol с помощью sbiosobol. Установите 'ShowWaitBar' к true показать прогресс симуляции. По умолчанию функция использует 1 000 выборок параметра, чтобы вычислить индексы Sobol [1].

rng('default');
sobolResults = sbiosobol(m1,modelParamNames,outputName,'Variants',v,'Doses',d,'ShowWaitBar',true)
sobolResults = 
  Sobol with properties:

                Time: [444x1 double]
        SobolIndices: [5x1 struct]
            Variance: [444x1 table]
    ParameterSamples: [1000x5 table]
         Observables: {'[Tumor Growth Model].tumor_weight'}
      SimulationInfo: [1x1 struct]

Можно изменить количество отсчетов путем определения 'NumberSamples' аргумент пары "имя-значение". Функция требует в общей сложности (number of input parameters + 2) * NumberSamples симуляции модели.

Покажите средний ответ модели, результаты симуляции и теневую область, покрывающую 90% результатов симуляции.

plotData(sobolResults);

Figure contains an axes object. The axes object contains 12 objects of type line, patch. These objects represent model simulation, 90.0% region, mean value.

Можно настроить область квантиля к различному проценту путем определения 'Alphas' для более низких и верхних квантилей всех ответов модели. Например, альфа-значение 0,1 графиков теневая область между 100 * alpha и 100 * (1 - alpha) квантили всех симулированных ответов модели.

plotData(sobolResults,'Alphas',0.1);

Figure contains an axes object. The axes object contains 12 objects of type line, patch. These objects represent model simulation, 80.0% region, mean value.

Постройте курс времени первого - и общий порядок индексы Sobol.

h = plot(sobolResults);
% Resize the figure.
h.Position(:) = [100 100 1280 800];

Figure contains 12 axes objects. Axes object 1 with title sensitivity output [Tumor Growth Model].tumor_weight contains 3 objects of type line. Axes object 2 with title sensitivity output [Tumor Growth Model].tumor_weight contains 3 objects of type line. Axes object 3 contains 3 objects of type line. Axes object 4 contains 3 objects of type line. Axes object 5 contains 3 objects of type line. Axes object 6 contains 3 objects of type line. Axes object 7 contains 3 objects of type line. Axes object 8 contains 3 objects of type line. Axes object 9 contains 3 objects of type line. Axes object 10 contains 3 objects of type line. Axes object 11 contains 3 objects of type line. Axes object 12 contains an object of type line.

Индекс Sobol первого порядка входного параметра дает часть полного отклонения ответа, которое может быть приписано изменениям одного только входного параметра. Индекс общего порядка дает часть полного отклонения ответа, которое может быть приписано любым объединенным изменениям параметра, которые включают изменения входного параметра.

Из графиков индексов Sobol, параметры L1 и w0 кажется, самые чувствительные параметры к весу опухоли, прежде чем доза была применена в t = 7. Но после того, как доза применяется, k1 и k2 станьте более чувствительными параметрами и способствуйте больше всего дозируемому после того, как этапу веса опухоли. Общий график отклонения также показывает большее отклонение для этапа после-того,-как-дозы в t> 35, чем для этапа прежде-чем-дозы роста опухоли, указывая на тот k1 и k2 могут быть более важные параметры, чтобы заняться расследованиями далее. Часть необъясненного отклонения показывает некоторое отклонение приблизительно в t = 33, но общий график отклонения показывает мало отклонения в t = 33, означая, что необъясненное отклонение могло быть незначительным. Часть необъясненного отклонения вычисляется как 1 - (сумма всех индексов Sobol первого порядка), и общее отклонение вычисляется с помощью var(response), где response ответ модели в каждом моменте времени.

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

bar(sobolResults);

Figure contains an axes object. The axes object with title sensitivity output [Tumor Growth Model].tumor_weight contains 22 objects of type patch, line. These objects represent first order, total order.

Можно задать больше выборок, чтобы увеличить точность индексов Sobol, но симуляция может занять больше времени, чтобы закончиться. Используйте addsamples добавить больше выборок. Например, если вы задаете 1 500 выборок, функция выполняет 1500 * (2 + number of input parameters) симуляции.

gsaMoreSamples = addsamples(gsaResults,1500)

Свойство SimulationInfo объекта результата содержит различную информацию для вычисления индексов Sobol. Например, данные о симуляции модели (SimData) для каждой симуляции с помощью набора выборок параметра хранятся в SimData поле свойства. Это поле является массивом SimData объекты.

sobolResults.SimulationInfo.SimData
 
   SimBiology SimData Array : 1000-by-7
 
   Index:    Name:         ModelName:         DataCount: 
   1           -           Tumor Growth Model 1          
   2           -           Tumor Growth Model 1          
   3           -           Tumor Growth Model 1          
   ...                                                   
   7000        -           Tumor Growth Model 1          
 

Можно узнать, перестала ли какая-либо симуляция модели работать во время расчета путем проверки ValidSample поле SimulationInfo. В этом примере поле не показывает не пройдено запусков симуляции.

all(sobolResults.SimulationInfo.ValidSample)
ans = 1x7 logical array

   1   1   1   1   1   1   1

SimulationInfo.ValidSample таблица логических значений. Это имеет тот же размер как SimulationInfo.SimData. Если ValidSample указывает, что любые симуляции перестали работать, можно получить больше информации о тех запусках симуляции и выборках, используемых для тех запусков путем извлечения информации из соответствующего столбца SimulationInfo.SimData. Предположим, что четвертый столбец содержит один или несколько не пройдено запусков симуляции. Получите данные моделирования и демонстрационные значения, используемые для той симуляции с помощью getSimulationResults.

[samplesUsed,sd,validruns] = getSimulationResults(sobolResults,4);

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

% Suppress an information warning that is issued during simulation.
warnSettings = warning('off', 'SimBiology:sbservices:SB_DIMANALYSISNOTDONE_MATLABFCN_UCON');
% Add the observable expression.
sobolObs = addobservable(sobolResults,'Maximum tumor_weight','max(tumor_weight)','Units','gram');

Постройте вычисленные результаты симуляции, показывающие 90%-ю область квантиля.

h2 = plotData(sobolObs);
h2.Position(:) = [100 100 1280 800];

Figure contains 2 axes objects. Axes object 1 contains 12 objects of type line, patch. These objects represent model simulation, 90.0% region, mean value. Axes object 2 contains 12 objects of type line, patch. These objects represent model simulation, 90.0% region, mean value.

Можно также удалить заметное путем определения его имени.

gsaNoObs = removeobservable(sobolObs,'Maximum tumor_weight');

Восстановите настройки предупреждения.

warning(warnSettings);

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

свернуть все

Результаты, содержащие первое - и общий порядок индексы Sobol в виде SimBiology.gsa.Sobol объект.

Индексируйте, чтобы извлечь результаты симуляции в sobolObj.SimulationInfo.SimDataВ виде положительного целого числа. Индекс должен быть меньшим, чем params + 2, где params является количеством входных параметров. Для получения дополнительной информации смотрите, Получают Результаты симуляции и Демонстрационные Значения Используя getSimulationResults.

Типы данных: double

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

свернуть все

Таблица, содержащая демонстрационные значения параметра, возвращенные как таблица.

Результаты симуляции получили использование выборок в samplesTable, возвращенный как вектор из SimData объекты.

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

Больше о

свернуть все

Получите результаты симуляции и демонстрационные значения Используя getSimulationResults

getSimulationResults возвращает i th столбец от массива SimData sobolObj.SimulationInfo.SimData, который является одними из свойств объектов.

Как объяснено в Методе Сальтелли, чтобы Вычислить индексы Sobol, A и B являются демонстрационными матрицами. ABi матрица, где все столбцы являются от A кроме i th столбцом, который является от B для i = 1, 2, …, params. params является количеством входных параметров.

Использованные для расчета индексы Sobol данных моделирования хранятся в sobolObj.SimulationInfo.SimData. Размером массивов является NumberSamples-by-params + 2, где NumberSamples является количеством отсчетов. Количеством столбцов является 2 + params потому что первые два столбца соответствуют результатам симуляции от A и B. Остальная часть столбцов соответствует AB1, AB2, …, ABparams. Другими словами, можно рассмотреть следующее:

sobolObj.SimulationInfo.SimData=[SimData(A),SimData(B),SimData(AB1),SimData(AB2),...,SimData(ABparams)]

Здесь, первый столбец соответствует данным моделирования с помощью демонстрационного матричного A, второй столбец соответствует данным моделирования с помощью демонстрационного матричного B, третий столбец соответствует данным моделирования с помощью матрицы AB1, и так далее.

Например, getSimulationResults(sobolObj,3) возвращается:

  • samplesTable (сначала выведите), который является AB1.

  • simdata (второй выход), который содержит результаты симуляции с помощью выборок от AB1. Это - третий столбец sobolObj.SimulationInfo.SimData.

  • validRuns (третий выход), который содержит логические значения, которые указывают на успешность или неуспешность каждой симуляции, запущенной в simdata (второй выход). validRuns соответствует i th столбец sobolObj.SimulationInfo.ValidSample.

Ссылки

[1] Сальтелли, Андреа, Паола Аннони, Ivano Azzini, Франческа Камполонго, Марко Ратто и Стефано Тарантола. “Основанный на отклонении Анализ чувствительности Выхода Модели. Проект и Средство оценки для Общего индекса Чувствительности”. Computer Physics Communications 181, № 2 (февраль 2010): 259–70. https://doi.org/10.1016/j.cpc.2009.09.018.

Смотрите также

| | | |

Введенный в R2020a