exponenta event banner

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

Моделирование модели векторной коррекции ошибок (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 форма модели Йохансена VEC, удаляя cointegrating тенденцию и линейные условия тенденции из модели. Исключение параметра из оценки эквивалентно наложению ограничений равенства на ноль.

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

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

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

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

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

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

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

Задайте случайное начальное значение по умолчанию. Смоделировать 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+AB′yt-1+Φ1Δyt-1+εt= [-1-3-30] + [-0.30,3-0,20,1-10] [0,1-0,20,2-0,70,50,2] ыт-1 + [00,10,20,2-0,200,7-0,20,3] Δyt-1 + αт.

Нововведения многомерные гауссовы со средним значением 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' и 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 из обычного, безусловного моделирования Монте-Карло.

Дополнительные сведения см. в разделе Алгоритмы.

Пример: Попробуйте смоделировать один путь модели 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 является массивом 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.

См. также

Объекты

Функции

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