simulate

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

Описание

пример

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

пример

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

пример

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

Примеры

свернуть все

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

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

load Data_USEconModel

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

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

Figure contains an axes. The axes 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. The axes with title Unemployment Rate contains an object of type line.

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

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) по умолчанию с помощью синтаксиса shorthand.

Mdl = varm(2,4);

Оцените модель, используя весь набор данных.

EstMdl = estimate(Mdl,Data.Variables);

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

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

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

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

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

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. The axes 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. The axes 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) индекса потребительских цен (ИПЦ), уровня безработицы и валового внутреннего продукта (ВВП). Включить линейный регрессионный компонент, содержащий текущие и последние 4 квартала государственных расходов и инвестиций. Симулируйте несколько путей из предполагаемой модели.

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

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. Axes 1 with title Consumer Price Index contains an object of type line. Axes 2 with title Unemployment Rate contains an object of type line. Axes 3 with title Real Gross Domestic Product contains an object of type line. Axes 4 with title Government Expenditures contains an object of type line.

Стабилизируйте ИПЦ, ВВП и 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) по умолчанию с помощью синтаксиса shorthand.

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

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

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

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

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

Y - 244 на 3 на 1000 матрица симулированных откликов. E - матрица, размерности которой соответствуют размерностям Y, но представляет моделируемые, масштабированные нарушения порядка. Столбцы соответствуют темпам роста ИПЦ, безработице и темпам роста ВВП, соответственно. 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. Axes 1 with title rcpi contains 1002 objects of type line. Axes 2 with title unrate contains 1002 objects of type line. Axes 3 with title rgdpg contains 1002 objects of type line. These objects represent Data, Mean.

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

свернуть все

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

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

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

Аргументы в виде пар имя-значение

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

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

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

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

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

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

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

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

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

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

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

  • В противном случае, simulate применяется Y0 (:,:, j) для инициализации симуляции пути j. Y0 должно иметь по крайней мере 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 (j:, k)) содержит ответы 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-by- numpaths*numseries матрица.

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

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

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

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

свернуть все

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

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

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

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

Алгоритмы

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

    1. simulate выводит (или обратные фильтры) нововведения E (t:, k) из известных будущих ответов YF (t:, k). Для E (t:, k), simulate имитирует шаблон NaN значения, которые появляются в YF (t:, k).

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

      1. Нарисуйте Z1, случайные, стандартные Гауссовы нарушения порядка распределения, обусловленные известными элементами E (t:, k).

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

      3. Условные Z2 вместо соответствующих отсутствующих значений в E (t:, k).

    3. Для отсутствующих значений в YF (t:, k), 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] Гамильтон, Джеймс Д. Анализ временных рядов. Princeton, NJ: Princeton University Press, 1994.

[2] Йохансен, С. Основанный на вероятностях вывод в коинтегрированных векторных авторегрессивных моделях. Oxford: Oxford University Press, 1995.

[3] Juselius, K. Cointegrated VAR Model. Oxford: Oxford University Press, 2006.

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

Введенный в R2017a
Для просмотра документации необходимо авторизоваться на сайте