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

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

Синтаксис

Y = simulate(Mdl,numobs)
Y = simulate(Mdl,numobs,Name,Value)
[Y,E] = simulate(___)

Описание

пример

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

пример

Y = simulate(Mdl,numobs,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;
plot(DataTable.Time,DataTable.UNRATE);
title('Unemployment Rate');
ylabel('Percent');
xlabel('Date');

Стабилизируйте 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;
plot(Data.Time,Y(:,2));
hold on;
plot(Data.Time,Data.unrate)
ylabel('Percent');
xlabel('Date');
title('Unemployment Rate');
legend('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');

Стабилизируйте 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)];

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

свернуть все

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

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

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

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

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

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

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

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

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

Преддемонстрационные ответы, обеспечивающие начальные значения для модели, заданной как пара, разделенная запятой, состоящая из 'Y0' и 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 представляет продолжение преддемонстрационных ответов в 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] Гамильтон, J. D. Анализ timeseries. Принстон, NJ: Издательство Принстонского университета, 1994.

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

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

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

Введенный в R2017a