simulate

Симуляция Монте-Карло векторной модели (VAR) авторегрессии

Описание

пример

Y = simulate(Mdl,numobs) возвращает случайный numobs- путь к периоду многомерного ряда ответа (Y) от симуляции полностью заданной модели VAR (p) Mdl.

пример

Y = simulate(Mdl,numobs,Name,Value) дополнительные опции использования заданы одними или несколькими аргументами name-value. Например, можно задать симуляцию разнообразных путей, внешних данных о предикторе или включения будущих ответов для условной симуляции.

пример

[Y,E] = simulate(___) возвращает инновации модели E использование любого из входных параметров в предыдущих синтаксисах.

Примеры

свернуть все

Подбирайте модель VAR (4) к данным об уровне безработицы и индексу потребительских цен (CPI). Затем симулируйте ответы из предполагаемой модели.

Загрузите Data_USEconModel набор данных.

load Data_USEconModel

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

figure;
plot(DataTable.Time,DataTable.CPIAUCSL);
title('Consumer Price Index');
ylabel('Index');
xlabel('Date');

Figure contains an axes object. The axes object with title Consumer Price Index contains an object of type line.

figure;
plot(DataTable.Time,DataTable.UNRATE);
title('Unemployment Rate');
ylabel('Percent');
xlabel('Date');

Figure contains an axes object. The axes object with title Unemployment Rate contains an object of type line.

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

rcpi = price2ret(DataTable.CPIAUCSL);
unrate = DataTable.UNRATE(2:end);
dates = DataTable.Time(2:end);
idx = all(~ismissing([rcpi unrate]),2);
Data = array2timetable([rcpi(idx) unrate(idx)],...
    'RowTimes',DataTable.Time(idx),'VariableNames',{'rcpi','unrate'});

Создайте модель VAR (4) по умолчанию с помощью краткого синтаксиса.

Mdl = varm(2,4);

Оцените модель с помощью целого набора данных.

EstMdl = estimate(Mdl,Data.Variables);

EstMdl полностью заданный, предполагаемый varm объект модели.

Симулируйте ряд path ответа из предполагаемой модели с длиной, равной пути в данных.

rng(1); % For reproducibility
numobs = size(Data,1);
Y = simulate(EstMdl,numobs);

Y 245 2 матрица симулированных откликов. Первые и вторые столбцы содержат симулированный темп роста CPI и уровень безработицы, соответственно.

Постройте симулированные и истинные ответы.

figure;
plot(Data.Time,Y(:,1));
hold on;
plot(Data.Time,Data.rcpi)
title('CPI Growth Rate');
ylabel('Growth rate');
xlabel('Date');
legend('Simulation','True')

Figure contains an axes object. The axes object with title CPI Growth Rate contains 2 objects of type line. These objects represent Simulation, True.

figure;
plot(Data.Time,Y(:,2));
hold on;
plot(Data.Time,Data.unrate)
ylabel('Percent');
xlabel('Date');
title('Unemployment Rate');
legend('Simulation','True')

Figure contains an axes object. The axes object with title Unemployment Rate contains 2 objects of type line. These objects represent Simulation, True.

Проиллюстрируйте отношение между simulate и filter путем оценки 4-мерной модели VAR (2) четырех рядов ответа в датском наборе данных Йохансена. Симулируйте один путь ответов с помощью подобранной модели и исторических данных как начальные значения, и затем пропустите случайный набор Гауссовых воздействий через предполагаемую модель с помощью тех же преддемонстрационных ответов.

Загрузите датские экономические данные Йохансена.

load Data_JDanish

Для получения дополнительной информации на переменных, введите Description.

Создайте значение по умолчанию 4-D модель VAR (2).

Mdl = varm(4,2);

Оцените модель VAR (2) с помощью целого набора данных.

EstMdl = estimate(Mdl,Data);

При репродуцировании результатов simulate и filter, важно принять эти меры.

  • Установите тот же seed случайных чисел с помощью rng.

  • Задайте те же преддемонстрационные данные об ответе с помощью 'Y0' аргумент пары "имя-значение".

Установите случайный seed по умолчанию. Симулируйте 100 наблюдений путем передачи предполагаемой модели simulate. Задайте целый набор данных как предварительную выборку.

rng default
YSim = simulate(EstMdl,100,'Y0',Data);

YSim 100 4 матрица симулированных откликов. Столбцы соответствуют столбцам переменных в Data.

Установите случайный seed по умолчанию. Симулируйте 4 ряда 100 наблюдений от стандартного Распределения Гаусса.

rng default
Z = randn(100,4);

Пропустите Гауссовы значения через предполагаемую модель. Задайте целый набор данных как предварительную выборку.

YFilter = filter(EstMdl,Z,'Y0',Data);

YFilter 100 4 матрица симулированных откликов. Столбцы соответствуют столбцам переменных в данных Data. Прежде, чем отфильтровать воздействия, filter шкалы Z нижним треугольным Фактором Холецкого ковариации модели в EstMdl.Covariance.

Сравните получившиеся ответы между filter и simulate.

(YSim - YFilter)'*(YSim - YFilter)
ans = 4×4

     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0

Результаты идентичны.

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

Загрузите Data_USEconModel набор данных. Вычислите действительный GDP.

load Data_USEconModel
DataTable.RGDP = DataTable.GDP./DataTable.GDPDEF*100;

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

figure;
subplot(2,2,1)
plot(DataTable.Time,DataTable.CPIAUCSL);
ylabel('Index');
title('Consumer Price Index');
subplot(2,2,2)
plot(DataTable.Time,DataTable.UNRATE);
ylabel('Percent');
title('Unemployment Rate');
subplot(2,2,3)
plot(DataTable.Time,DataTable.RGDP);
ylabel('Output');
title('Real Gross Domestic Product');
subplot(2,2,4)
plot(DataTable.Time,DataTable.GCE);
ylabel('Billions of $');
title('Government Expenditures');

Figure contains 4 axes objects. Axes object 1 with title Consumer Price Index contains an object of type line. Axes object 2 with title Unemployment Rate contains an object of type line. Axes object 3 with title Real Gross Domestic Product contains an object of type line. Axes object 4 with title Government Expenditures contains an object of type line.

Стабилизируйте CPI, GDP и GCE путем преобразования каждого в серию темпов роста. Синхронизируйте ряд уровня безработицы с другими путем удаления его первого наблюдения. Создайте новый набор данных, содержащий преобразованные переменные.

inputVariables = {'CPIAUCSL' 'RGDP' 'GCE'};
Data = varfun(@price2ret,DataTable,'InputVariables',inputVariables);
Data.Properties.VariableNames = inputVariables;
Data.UNRATE = DataTable.UNRATE(2:end);
dates = DataTable.Time(2:end);

Расширьте ряд уровня GCE до матрицы, которая включает ее текущее значение и через четыре изолированных значения. Удалите GCE и наблюдения, содержащие любые отсутствующие значения от Data.

rgcelag4 = lagmatrix(Data.GCE,0:4);
idx = all(~ismissing([Data table(rgcelag4)]),2);
Data = Data(idx,:);
Data.GCE = [];

Создайте модель VAR (4) по умолчанию с помощью краткого синтаксиса.

Mdl = varm(3,4);
Mdl.SeriesNames = ["rcpi" "unrate" "rgdpg"];

Оцените модель с помощью целой выборки. Задайте матрицу GCE как данные для компонента регрессии.

EstMdl = estimate(Mdl,Data.Variables,'X',rgcelag4);

Симулируйте 1 000 путей из предполагаемой модели. Укажите, что длина путей совпадает с длиной данных без любых отсутствующих значений. Снабдите данными о предикторе. Возвратите инновации (масштабируемые воздействия).

numpaths = 1000;
numobs = size(Data,1);
rng(1); % For reproducibility
[Y,E] = simulate(EstMdl,numobs,'X',rgcelag4,'NumPaths',numpaths);

Y 244 3 1 000 матриц симулированных откликов. E матрица, размерности которой соответствуют размерностям Y, но представляет симулированные, масштабированные воздействия. Столбцы соответствуют темпу роста CPI, уровню безработицы и темпу роста GDP, соответственно. simulate применяет те же данные о предикторе ко всем путям.

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

MeanSim = mean(Y,3);

MeanSim 244 3 матрица, содержащая среднее значение симулированных откликов в каждом моменте времени.

Постройте симулированные отклики, их средние значения и данные.

figure;
for j = 1:Mdl.NumSeries
    subplot(2,2,j)
    plot(Data.Time,squeeze(Y(:,j,:)),'Color',[0.8,0.8,0.8])
    title(Mdl.SeriesNames{j});
    hold on
    h1 = plot(Data.Time,Data{:,j});
    h2 = plot(Data.Time,MeanSim(:,j));
    hold off
end

hl = legend([h1 h2],'Data','Mean');
hl.Position = [0.6 0.25 hl.Position(3:4)];

Figure contains 3 axes objects. Axes object 1 with title rcpi contains 1002 objects of type line. Axes object 2 with title unrate contains 1002 objects of type line. Axes object 3 with title rgdpg contains 1002 objects of type line. These objects represent Data, Mean.

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

свернуть все

Модель VAR в виде varm объект модели создается varm или estimate. Mdl должен быть полностью задан.

Количество случайных наблюдений, чтобы сгенерировать на выход path в виде положительного целого числа. Выходные аргументы Y и E имейте numobs 'Строки' .

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

Аргументы name-value

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'Y0',Y0,'X',X использует матричный Y0 как преддемонстрационные ответы и матричный X как данные о предикторе в компоненте регрессии.

Количество демонстрационных путей, чтобы сгенерировать в виде разделенной запятой пары, состоящей из 'NumPaths' и положительное целое число. Выходные аргументы Y и E имейте NumPaths страницы.

Пример: 'NumPaths',1000

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

Преддемонстрационные ответы, вводящие начальные значения для модели в виде разделенной запятой пары, состоящей из 'Y0' и numpreobs- numseries числовая матрица или numpreobs- numseries- numprepaths числовой массив.

numpreobs количество преддемонстрационных наблюдений. numseries количество ряда ответа (Mdl.NumSeries). numprepaths количество преддемонстрационных путей к ответу.

Строки соответствуют преддемонстрационным наблюдениям, и последняя строка содержит последнее преддемонстрационное наблюдение. Y0 должен иметь, по крайней мере, Mdl.P 'Строки' . Если вы предоставляете больше строк, чем необходимый, simulate использует последний Mdl.P наблюдения только.

Столбцы должны соответствовать серийным именам ответа в Mdl.SeriesNames.

Страницы соответствуют отдельным, независимым контурам.

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

  • В противном случае, simulate применяет Y0 (:: J) инициализировать путь к симуляции jy0 должен иметь, по крайней мере, numpaths страницы (см. NumPaths), и simulate использование только первый numpaths страницы.

По умолчанию, simulate наборы любые необходимые преддемонстрационные наблюдения.

  • Для стационарных процессов VAR без компонентов регрессии, simulate преддемонстрационные наблюдения наборов к безусловному среднему значению μ=Φ1(L)c.

  • Для неустановившихся процессов или моделей, которые содержат компонент регрессии, simulate обнуляет преддемонстрационные наблюдения.

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

Данные о предикторе для компонента регрессии в модели в виде разделенной запятой пары, состоящей из 'X' и числовая матрица, содержащая numpreds столбцы.

numpreds количество переменных предикторов (size(Mdl.Beta,2)).

Строки соответствуют наблюдениям, и последняя строка содержит последнее наблюдение. X должен иметь, по крайней мере, numobs 'Строки' . Если вы предоставляете больше строк, чем необходимый, simulate использование только последний numobs наблюдения. simulate не использует компонент регрессии в преддемонстрационный период.

Столбцы соответствуют отдельным переменным предикторам. Все переменные предикторы присутствуют в компоненте регрессии каждого уравнения ответа.

simulate применяет X к каждому пути (страница); то есть, X представляет один путь наблюдаемых предикторов.

По умолчанию, simulate исключает компонент регрессии, независимо от его присутствия в Mdl.

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

Будущий многомерный ряд ответа для условной симуляции в виде разделенной запятой пары, состоящей из 'YF' и числовая матрица или массив, содержащий numseries столбцы.

Строки соответствуют наблюдениям в горизонте симуляции, и первая строка является самым ранним наблюдением. А именно, строка j в демонстрационном пути k (YF (jK)) содержит ответы j периоды в будущее. YF должен иметь, по крайней мере, numobs строки, чтобы покрыть горизонт симуляции. Если вы предоставляете больше строк, чем необходимый, simulate использование только первый numobs 'Строки' .

Столбцы должны соответствовать именам переменной отклика в Mdl.SeriesNames.

Страницы соответствуют демонстрационным путям. А именно, путь k (YF (:: K)) получает состояние или знание, ряда ответа, когда они развиваются из преддемонстрационного прошлого (Y0) в будущее.

  • Если YF матрица, затем simulate применяет YF к каждому numpaths выведите пути (см. NumPaths).

  • В противном случае, YF должен иметь, по крайней мере, numpaths страницы. Если вы предоставляете больше страниц, чем необходимый, simulate использование только первый numpaths страницы.

Элементы YF могут быть числовые скаляры или отсутствующие значения (обозначенный NaN значения. simulate числовые скаляры обработок как детерминированные будущие ответы, которые известны заранее, например, установленный политикой. simulate симулирует ответы для соответствующего NaN условное выражение значений на известных значениях.

По умолчанию, YF массив, состоявший из NaN значения, указывающие на полное отсутствие знания будущего состояние всех симулированных откликов. Поэтому simulate получает выходные ответы Y от обычной, безусловной симуляции Монте-Карло.

Для получения дополнительной информации см. Алгоритмы.

Пример: Считайте симуляцию одного пути модели VAR состоявшей из четырех рядов ответа тремя периодами в будущее. Предположим, что у вас есть предварительные знания о некоторых будущих значениях ответов, и вы хотите симулировать неизвестное условное выражение ответов на своем знании. Задайте YF как матрица, содержащая значения, которые вы знаете и используете NaN для значений вы не знаете, но хотите симулировать. Например, 'YF',[NaN 2 5 NaN; NaN NaN 0.1 NaN; NaN NaN NaN NaN] указывает, что вы не знаете о будущих значениях первого и четвертого ряда ответа; вы знаете значение в течение периода 1 во втором ряду ответа, но никаком другом значении; и вы знаете значения в течение периодов 1 и 2 в третьем ряду ответа, но не значении в течение периода 3.

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

Примечание

NaN значения в Y0 и X укажите на отсутствующие значения. simulate удаляет отсутствующие значения из данных мудрым списком удалением. Если Y0 трехмерный массив, затем simulate выполняет эти шаги.

  1. Горизонтально конкатенируйте страницы, чтобы сформировать numpreobs- numpaths*numseries матрица.

  2. Удалите любую строку, которая содержит по крайней мере один NaN из конкатенированных данных.

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

Для условной симуляции (см. YF), если X содержит любые отсутствующие значения в последнем numobs наблюдения, затем simulate выдает ошибку.

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

свернуть все

Симулированный многомерный ряд ответа, возвращенный как numobs- numseries числовая матрица или numobs- numseries- numpaths числовой массив. Y представляет продолжение преддемонстрационных ответов в Y0.

Если вы задаете будущие ответы для условной симуляции с помощью YF аргумент пары "имя-значение", затем известные значения в YF появитесь в тех же положениях в Y. Однако Y содержит симулированные значения для недостающих наблюдений в YF.

Симулированный многомерный инновационный ряд модели, возвращенный как numobs- numseries числовая матрица или numobs- numseries- numpaths числовой массив.

Если вы задаете будущие ответы для условной симуляции (см. YF аргумент пары "имя-значение"), затем simulate выводит инновации из известных значений в YF и помещает выведенные инновации в соответствующие положения в E. Для недостающих наблюдений в YF, simulate чертит от условного выражения Распределения Гаусса на любых известных значениях и помещает ничьи в соответствующие положения в E.

Алгоритмы

  • simulate выполняет условную симуляцию с помощью этого процесса для всех страниц k = 1..., numpaths и в течение каждого раза t = 1..., numobs.

    1. simulate выводит (или обратные фильтры) инновации E (tK) от известных будущих ответов YF (tK). Для E (tK), simulate подражает шаблону NaN значения, который появляется в YF (tK).

    2. Для недостающих элементов E (tK), simulate выполняет эти шаги.

      1. Чертите Z1, случайное, стандартное условное выражение воздействий Распределения Гаусса на известных элементах E (tK).

      2. Масштабируйте Z1 нижним треугольным Фактором Холецкого условной ковариационной матрицы. Таким образом, Z2 = L*Z1, где L = chol(C,'lower') и C ковариация условного Распределения Гаусса.

      3. Припишите Z2 вместо соответствующих отсутствующих значений в E (tK).

    3. Для отсутствующих значений в YF (tK), simulate пропускает соответствующие случайные инновации через модель Mdl.

  • simulate использование этот процесс, чтобы определить источник времени t 0 из моделей, которые включают линейные тренды времени.

    • Если вы не задаете Y0, затем t 0 = 0.

    • В противном случае, simulate наборы t 0 к size(Y0,1)Mdl.P. Поэтому временами в компоненте тренда является t = t 0 + 1, t 0 + 2..., t 0 + numobs. Это соглашение сопоставимо с поведением по умолчанию оценки модели который estimate удаляет первый Mdl.P ответы, уменьшая эффективный объем выборки. Несмотря на то, что simulate явным образом использует первый Mdl.P преддемонстрационные ответы в Y0 инициализировать модель, общее количество наблюдений в Y0 (исключая любые отсутствующие значения), определяет t 0.

Ссылки

[1] Гамильтон, анализ временных рядов Джеймса Д. Принстон, NJ: Издательство Принстонского университета, 1994.

[2] Йохансен, S. Основанный на вероятности вывод в векторных авторегрессивных моделях Cointegrated. Оксфорд: Издательство Оксфордского университета, 1995.

[3] Juselius, K. Модель VAR Cointegrated. Оксфорд: Издательство Оксфордского университета, 2006.

[4] Lütkepohl, H. Новое введение в несколько анализ временных рядов. Берлин: Спрингер, 2005.

Введенный в R2017a