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

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

Синтаксис

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

Описание

пример

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

пример

Y = simulate(Mdl,numobs,Name,Value) дополнительные опции использования заданы одним или несколькими аргументами пары "имя-значение". Например, 'NumPaths',1000,'X',X задает симуляцию 1 000 путей и X как внешние данные о предикторе для компонента регрессии.

пример

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

Примеры

свернуть все

Рассмотрите модель VEC для следующих семи макроэкономических рядов, и затем соответствуйте модели к данным.

  • Валовой внутренний продукт (ВВП)

  • GDP неявный ценовой дефлятор

  • Заплаченная компенсация сотрудников

  • Несельскохозяйственные часы делового сектора всех людей

  • Эффективная ставка по федеральным фондам

  • Частные потребительские расходы

  • Грубые частные внутренние инвестиции

Предположим, что cointegrating ранг 4 и один срок короткого промежутка времени является соответствующим, то есть, рассмотрите модель VEC(1).

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

load Data_USEconVECModel

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

Определите, должны ли данные быть предварительно обработаны путем графического вывода ряда на отдельных графиках.

figure;
subplot(2,2,1)
plot(FRED.Time,FRED.GDP);
title('Gross Domestic Product');
ylabel('Index');
xlabel('Date');
subplot(2,2,2)
plot(FRED.Time,FRED.GDPDEF);
title('GDP Deflator');
ylabel('Index');
xlabel('Date');
subplot(2,2,3)
plot(FRED.Time,FRED.COE);
title('Paid Compensation of Employees');
ylabel('Billions of $');
xlabel('Date');
subplot(2,2,4)
plot(FRED.Time,FRED.HOANBS);
title('Nonfarm Business Sector Hours');
ylabel('Index');
xlabel('Date');

figure;
subplot(2,2,1)
plot(FRED.Time,FRED.FEDFUNDS);
title('Federal Funds Rate');
ylabel('Percent');
xlabel('Date');
subplot(2,2,2)
plot(FRED.Time,FRED.PCEC);
title('Consumption Expenditures');
ylabel('Billions of $');
xlabel('Date');
subplot(2,2,3)
plot(FRED.Time,FRED.GPDI);
title('Gross Private Domestic Investment');
ylabel('Billions of $');
xlabel('Date');

Стабилизируйте весь ряд, кроме ставки по федеральным фондам, путем применяния логарифмического преобразования. Масштабируйте получившийся ряд 100 так, чтобы все ряды были в той же шкале.

FRED.GDP = 100*log(FRED.GDP);      
FRED.GDPDEF = 100*log(FRED.GDPDEF);
FRED.COE = 100*log(FRED.COE);       
FRED.HOANBS = 100*log(FRED.HOANBS); 
FRED.PCEC = 100*log(FRED.PCEC);     
FRED.GPDI = 100*log(FRED.GPDI);

Создайте модель VECM(1) с помощью краткого синтаксиса. Задайте имена переменных.

Mdl = vecm(7,4,1);
Mdl.SeriesNames = FRED.Properties.VariableNames
Mdl = 
  vecm with properties:

             Description: "7-Dimensional Rank = 4 VEC(1) Model with Linear Time Trend"
             SeriesNames: "GDP"  "GDPDEF"  "COE"  ... and 4 more
               NumSeries: 7
                    Rank: 4
                       P: 2
                Constant: [7×1 vector of NaNs]
              Adjustment: [7×4 matrix of NaNs]
           Cointegration: [7×4 matrix of NaNs]
                  Impact: [7×7 matrix of NaNs]
   CointegrationConstant: [4×1 vector of NaNs]
      CointegrationTrend: [4×1 vector of NaNs]
                ShortRun: {7×7 matrix of NaNs} at lag [1]
                   Trend: [7×1 vector of NaNs]
                    Beta: [7×0 matrix]
              Covariance: [7×7 matrix of NaNs]

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

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

EstMdl = estimate(Mdl,FRED.Variables)
EstMdl = 
  vecm with properties:

             Description: "7-Dimensional Rank = 4 VEC(1) Model"
             SeriesNames: "GDP"  "GDPDEF"  "COE"  ... and 4 more
               NumSeries: 7
                    Rank: 4
                       P: 2
                Constant: [14.1329 8.77841 -7.20359 ... and 4 more]'
              Adjustment: [7×4 matrix]
           Cointegration: [7×4 matrix]
                  Impact: [7×7 matrix]
   CointegrationConstant: [-28.6082 109.555 -77.0912 ... and 1 more]'
      CointegrationTrend: [4×1 vector of zeros]
                ShortRun: {7×7 matrix} at lag [1]
                   Trend: [7×1 vector of zeros]
                    Beta: [7×0 matrix]
              Covariance: [7×7 matrix]

EstMdl является предполагаемым объектом модели vecm. Это полностью задано, потому что все параметры знали значения. По умолчанию estimate налагает ограничения формы модели H1 Йохансен VEC путем удаления cointegrating тренда и линейных условий тренда из модели. Исключение параметра из оценки эквивалентно внушительным ограничениям равенства, чтобы обнулить.

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

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

Y 240 7 матрица моделируемых ответов. Столбцы соответствуют именам переменных в EstMdl.SeriesNames.

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

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

load Data_JDanish

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

Создайте значение по умолчанию 4-D модель VEC(1). Примите, что cointegrating ранг 1 является соответствующим.

Mdl = vecm(4,1,1);
Mdl.SeriesNames = DataTable.Properties.VariableNames
Mdl = 
  vecm with properties:

             Description: "4-Dimensional Rank = 1 VEC(1) Model with Linear Time Trend"
             SeriesNames: "M2"  "Y"  "IB"  ... and 1 more
               NumSeries: 4
                    Rank: 1
                       P: 2
                Constant: [4×1 vector of NaNs]
              Adjustment: [4×1 matrix of NaNs]
           Cointegration: [4×1 matrix of NaNs]
                  Impact: [4×4 matrix of NaNs]
   CointegrationConstant: NaN
      CointegrationTrend: NaN
                ShortRun: {4×4 matrix of NaNs} at lag [1]
                   Trend: [4×1 vector of NaNs]
                    Beta: [4×0 matrix]
              Covariance: [4×4 matrix of NaNs]

Оцените модель VEC(1) с помощью целого набора данных. Задайте H1* форма модели Йохансена.

EstMdl = estimate(Mdl,Data,'Model','H1*');

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

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

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

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

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

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

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

rng default;
Z = randn(100,4);

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

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

YFilter 100 4 матрица моделируемых ответов. Столбцы соответствуют столбцам переменных в EstMdl.SeriesNames. Прежде, чем отфильтровать воздействия, 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

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

Рассмотрите эту модель VEC(1) для трех гипотетических рядов ответа.

Δyt=c+AByt-1+Φ1Δyt-1+εt=[-1-3-30]+[-0.30.3-0.20.1-10][0.1-0.20.2-0.70.50.2]yt-1+[00.10.20.2-0.200.7-0.20.3]Δyt-1+εt.

Инновации многомерны Гауссов со средним значением 0 и ковариационная матрица

Σ=[1.30.41.60.40.60.71.60.75].

Создайте переменные для значений параметров.

Adjustment = [-0.3 0.3; -0.2 0.1; -1 0];
Cointegration = [0.1 -0.7; -0.2 0.5; 0.2 0.2];
ShortRun = {[0. 0.1 0.2; 0.2 -0.2 0; 0.7 -0.2 0.3]};
Constant = [-1; -3; -30];
Trend = [0; 0; 0];
Covariance = [1.3 0.4 1.6; 0.4 0.6 0.7; 1.6 0.7 5];

Создайте объект модели vecm, представляющий модель VEC(1) с помощью соответствующих аргументов пары "имя-значение".

Mdl = vecm('Adjustment',Adjustment,'Cointegration',Cointegration,...
    'Constant',Constant,'ShortRun',ShortRun,'Trend',Trend,...
    'Covariance',Covariance);

Mdl является эффективно полностью заданным объектом модели vecm. Таким образом, коинтеграция постоянный и линейный тренд неизвестен, но не нужен для симуляции наблюдений или прогнозирования, учитывая, что полная константа и параметры тренда известны.

Моделируйте 1 000 путей 100 наблюдений. Возвратите инновации (масштабируемые воздействия).

numpaths = 1000;
numobs = 100;
rng(1); % For reproducibility
[Y,E] = simulate(Mdl,numobs,'NumPaths',numpaths);

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

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

MeanSim = mean(Y,3);

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

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

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

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

свернуть все

Модель VEC, заданная как объект модели vecm, созданный vecm или 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 из обычной, безусловной симуляции Монте-Карло.

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

Пример: Считайте симуляцию одного пути модели VEC состоявшей из четырех рядов ответа тремя периодами в будущее. Предположим, что у вас есть предварительные знания о некоторых будущих значениях ответов, и вы хотите моделировать неизвестное условное выражение ответов на своем знании. Задайте 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.

Введенный в R2017b