simulate

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

Описание

пример

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

пример

Y = simulate(Mdl,numobs,Name,Value) дополнительные опции использования заданы одними или несколькими аргументами 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 contains 4 axes objects. Axes object 1 with title Gross Domestic Product contains an object of type line. Axes object 2 with title GDP Deflator contains an object of type line. Axes object 3 with title Paid Compensation of Employees contains an object of type line. Axes object 4 with title Nonfarm Business Sector Hours contains an object of type line.

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

Figure contains 3 axes objects. Axes object 1 with title Federal Funds Rate contains an object of type line. Axes object 2 with title Consumption Expenditures contains an object of type line. Axes object 3 with title Gross Private Domestic Investment contains an object of type line.

Стабилизируйте весь ряд, кроме ставки по федеральным фондам, путем применяния логарифмического преобразования. Масштабируйте получившийся ряд 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

Figure contains 3 axes objects. Axes object 1 with title Y1 contains 1001 objects of type line. Axes object 2 with title Y2 contains 1001 objects of type line. Axes object 3 with title Y3 contains 1001 objects of type line.

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

свернуть все

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

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

Пример: Считайте симуляцию одного пути модели 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- 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.

Введенный в R2017b