simulate

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

Описание

пример

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

пример

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

пример

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

Примеры

свернуть все

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

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

  • Неявный дефлятор цен ВВП

  • Выплаченная компенсация работникам

  • Нерезультатное рабочее время всех лиц

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

  • Расходы на личное потребление

  • Валовые частные внутренние инвестиции

Предположим, что подходят коинтегрирующий ранг 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. Axes 1 with title Gross Domestic Product contains an object of type line. Axes 2 with title GDP Deflator contains an object of type line. Axes 3 with title Paid Compensation of Employees contains an object of type line. Axes 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. Axes 1 with title Federal Funds Rate contains an object of type line. Axes 2 with title Consumption Expenditures contains an object of type line. Axes 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 форму модели Johansen VEC путем удаления коинтегрирующего тренда и линейных терминов тренда из модели. Исключение параметра из оценки эквивалентно наложению ограничений равенства на нуль.

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

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) по умолчанию. Предположим, что коинтегрирующий ранг 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 * Johansen.

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

Симулируйте 1000 путей 100 наблюдений. Верните нововведения (масштабированные нарушения порядка).

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

Y является матрицей 100 на 3 на 1000 симулированные отклики. 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. Axes 1 with title Y1 contains 1001 objects of type line. Axes 2 with title Y2 contains 1001 objects of type line. Axes 3 with title Y3 contains 1001 objects of type line.

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

свернуть все

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

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

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

См. также

Объекты

Функции

Введенный в R2017b