exponenta event banner

моделировать

Моделирование модели векторной авторегрессии (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) по умолчанию с использованием краткого синтаксиса.

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, важно предпринять эти действия.

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

  • Укажите те же данные предварительного примера ответа, используя 'Y0' аргумент пары имя-значение.

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

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

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

Задайте случайное начальное значение по умолчанию. Смоделировать 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.

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

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);

Смоделировать 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' и numpreobsоколо-numseries числовая матрица или numpreobsоколо-numseriesоколо-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 устанавливает предпробные наблюдения в безусловное среднее λ = Start− 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 является массивом 3-D, то 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(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 использует этот процесс для определения начала времени t0 моделей, включающих линейные временные тренды.

    • Если не указать Y0, то t0 = 0.

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

Ссылки

[1] Гамильтон, Джеймс Д. Анализ временных рядов. Принстон, Нью-Джерси: Princeton University Press, 1994.

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

[3] Джуселиус, К. Коинтегрированная модель VAR. Oxford: Oxford University Press, 2006.

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

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