filter

Фильтруйте нарушения порядка через векторную модель коррекции ошибок (VEC)

Описание

пример

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

пример

Y = filter(Mdl,Z,Name,Value) использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение". Для примера, 'X',X,'Scale',false задает X как экзогенные данные предиктора для регрессионного компонента и воздержание от масштабирования нарушений порядка нижним треугольным фактором Холецкого модели инновационной ковариационной матрицы.

пример

[Y,E] = filter(___) возвращает многомерный ряд инноваций модели 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);

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

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

Оцените модель, используя весь набор данных и опции по умолчанию. По умолчанию estimate использует первые наблюдения p = 2 в качестве предварительных данных.

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

Сгенерируйте numobs-by-7 ряд случайных Гауссовых распределенных значений, где numobs - количество наблюдений в данных минус p.

numobs = size(FRED,1) - Mdl.P;
rng(1) % For reproducibility
Z = randn(numobs,Mdl.NumSeries);

Чтобы симулировать ответы, фильтруйте нарушения порядка через предполагаемую модель. Задайте первые наблюдения p = 2 как предварительные данные.

Y = filter(EstMdl,Z,'Y0',FRED{1:2,:});

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

Постройте график моделируемой и истинной характеристик.

figure;
subplot(2,2,1)
plot(FRED.Time(3:end),[FRED.GDP(3:end) Y(:,1)]);
title('Gross Domestic Product');
ylabel('Index (scaled)');
xlabel('Date');
legend('Simulation','True','Location','Best')
subplot(2,2,2)
plot(FRED.Time(3:end),[FRED.GDPDEF(3:end) Y(:,2)]);
title('GDP Deflator');
ylabel('Index (scaled)');
xlabel('Date');
legend('Simulation','True','Location','Best')
subplot(2,2,3)
plot(FRED.Time(3:end),[FRED.COE(3:end) Y(:,3)]);
title('Paid Compensation of Employees');
ylabel('Billions of $ (scaled)');
xlabel('Date');
legend('Simulation','True','Location','Best')
subplot(2,2,4)
plot(FRED.Time(3:end),[FRED.HOANBS(3:end) Y(:,4)]);
title('Nonfarm Business Sector Hours');
ylabel('Index (scaled)');
xlabel('Date');
legend('Simulation','True','Location','Best')

Figure contains 4 axes. Axes 1 with title Gross Domestic Product contains 2 objects of type line. These objects represent Simulation, True. Axes 2 with title GDP Deflator contains 2 objects of type line. These objects represent Simulation, True. Axes 3 with title Paid Compensation of Employees contains 2 objects of type line. These objects represent Simulation, True. Axes 4 with title Nonfarm Business Sector Hours contains 2 objects of type line. These objects represent Simulation, True.

figure;
subplot(2,2,1)
plot(FRED.Time(3:end),[FRED.FEDFUNDS(3:end) Y(:,5)]);
title('Federal Funds Rate');
ylabel('Percent');
xlabel('Date');
subplot(2,2,2)
plot(FRED.Time(3:end),[FRED.PCEC(3:end) Y(:,6)]);
title('Consumption Expenditures');
ylabel('Billions of $ (scaled)');
xlabel('Date');
subplot(2,2,3)
plot(FRED.Time(3:end),[FRED.GPDI(3:end) Y(:,7)]);
title('Gross Private Domestic Investment');
ylabel('Billions of $ (scaled)');
xlabel('Date');

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

Рассмотрим эту модель 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 with properties:

             Description: "3-Dimensional Rank = 2 VEC(1) Model"
             SeriesNames: "Y1"  "Y2"  "Y3" 
               NumSeries: 3
                    Rank: 2
                       P: 2
                Constant: [-1 -3 -30]'
              Adjustment: [3×2 matrix]
           Cointegration: [3×2 matrix]
                  Impact: [3×3 matrix]
   CointegrationConstant: [2×1 vector of NaNs]
      CointegrationTrend: [2×1 vector of NaNs]
                ShortRun: {3×3 matrix} at lag [1]
                   Trend: [3×1 vector of zeros]
                    Beta: [3×0 matrix]
              Covariance: [3×3 matrix]

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

Сгенерируйте 1000 путей 100 наблюдений из 3-D Гауссова распределения. numobs - количество наблюдений в данных без каких-либо отсутствующих значений.

numobs = 100;
numpaths = 1000;
rng(1);
Z = randn(numobs,Mdl.NumSeries,numpaths);

Пропустите нарушения порядка через предполагаемую модель. Верните нововведения (масштабированные нарушения порядка).

[Y,E] = filter(Mdl,Z);

Y и E представляют собой 100 на 3 на 1000 матриц фильтрованных откликов и масштабированных нарушений порядка, соответственно.

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

MeanFilt = mean(Y,3);

MeanFilt - матрица 100 на 3, содержащая среднее значение фильтрованных ответов в каждой временной точке.

Постройте график отфильтрованных ответов и их средних значений.

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(MeanFilt(:,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 должен быть полностью задан.

Базовый многомерный ряд нарушений порядка, связанный с процессом инноваций модели, задан как numobs-by- numseries числовая матрица или numobs-by- numseries-by- numpaths числовой массив.

numobs - размер выборки. numseries - количество серий нарушений порядка (Mdl.NumSeries). numpaths - количество путей нарушения порядка.

Строки соответствуют времени дискретизации, а последняя строка содержит последний набор нарушений порядка.

Столбцы соответствуют отдельной серии нарушений порядка для переменных отклика.

Страницы соответствуют отдельным, независимым путям. Для числовой матрицы, Z является единичным numseries-мерный путь нарушения порядка ряда. Для трехмерные массивы, каждая страница Z представляет отдельную numseries-мерный путь. Среди всех страниц нарушений порядка в соответствующих строках происходят одновременно.

The 'Scale' аргумент пары "имя-значение" задает, масштабировать ли нарушения порядка перед filter фильтрует их через Mdl. Для получения дополнительной информации смотрите Scale.

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

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

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'Scale',false,'X',X не масштабируется Z по нижнему треугольному фактору Холецкого ковариации матрицы перед фильтрацией и использует матрицу X как данные предиктора в регрессионном компоненте.

Примитивируйте отклики, которые обеспечивают начальные значения для модели Mdl, заданная как разделенная разделенными запятой парами, состоящая из 'Y0' и a numpreobs-by- numseries числовая матрица или numpreobs-by- numseries-by- numprepaths числовой массив.

numpreobs - количество предварительных наблюдений. numprepaths - количество предварительно выбранных путей отклика.

Строки соответствуют предварительным наблюдениям, а последняя строка содержит последние наблюдения предварительных образцов. Y0 должно иметь по крайней мере Mdl.P строки. Если вы поставляете больше строк, чем нужно, filter использует последние Mdl.P только наблюдения.

Столбцы должны соответствовать ряду ответов в Y.

Страницы соответствуют отдельным, независимым путям.

  • Если Y0 является матрицей, тогда filter применяет его к каждому пути (странице) в Y. Поэтому все пути в Y получают из общих начальных условий.

  • В противном случае, filter применяется Y0 (:,:, j) по Y (:,:, j). Y0 должно иметь по крайней мере numpaths страниц, и filter использует только первое numpaths страниц.

Среди всех страниц наблюдения в определенной строке происходят одновременно.

По умолчанию, filter устанавливает любые необходимые предварительные наблюдения.

  • Для стационарных процессов VAR без регрессионных компонентов, filter использует безусловное среднее μ=Φ1(L)c.

  • Для нестационарных процессов или моделей, содержащих регрессионый компонент, filter устанавливает предварительную выборку наблюдений в массив, состоящий из нулей.

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

Данные предиктора для регрессионного компонента в модели, заданные как разделенная разделенными запятой парами, состоящая из 'X' и числовую матрицу, содержащую numpreds столбцы.

numpreds - количество переменных предиктора (size(Mdl.Beta,2)).

Строки соответствуют наблюдениям, а последняя строка содержит последнее наблюдение. X должно иметь, по крайней мере, столько наблюдений, сколько Z. Если вы поставляете больше строк, чем нужно, filter использует только последние наблюдения. filter не использует регрессионный компонент в предварительном образце периода.

Столбцы соответствуют отдельным переменным предиктора. Все переменные предиктора присутствуют в регрессионном компоненте каждого уравнения отклика.

filter применяется X на каждый путь (страницу) в Z; то есть X представляет один путь наблюдаемых предикторов.

По умолчанию, filter исключает регрессионный компонент, независимо от его присутствия в Mdl.

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

Флаг, указывающий, масштабировать ли нарушения порядка нижним треугольным фактором Холецкого ковариации матрицы, заданный как разделенная разделенными запятой парами, состоящая из 'Scale' и true или false.

Для каждой страницы j = 1..., numpaths, filter фильтрует numobs-by- numseries матрица инноваций E (:,:, j) через модель VAR (p) Mdl, в соответствии с этими условиями.

  • Если Scale является true, затем E (:,:, j) = L * Z (:,:, j) и L = chol(Mdl.Covariance,'lower').

  • Если Scale является false, затем E (:,:, j) = Z (:,:, j).

Пример: 'Scale',false

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

Примечание

NaN значения в Z, Y0, и X указать отсутствующие значения. filter удаляет отсутствующие значения из данных путем перечисленного удаления.

  1. Если Z является трехмерный массив, тогда filter горизонтально конкатенирует страницы Z для формирования numobs-by- numpaths*numseries матрица.

  2. Если присутствует регрессионный компонент, то filter горизонтально конкатенирует X на Z для формирования numobs-by- (numpaths*numseries + numpreds) матрица. filter принимает, что последние строки каждой серии происходят одновременно.

  3. filter удаляет все строки, содержащие по крайней мере одну NaN из конкатенированных данных.

  4. filter применяет шаги 1 и 3 к предварительным образцам путей в Y0.

Этот процесс гарантирует, что отфильтрованные отклики и инновации каждого пути имеют одинаковый размер и основаны на одном и том же времени наблюдения. В случае отсутствующих наблюдений результаты, полученные из нескольких путей Z может отличаться от результатов, полученных по каждому пути индивидуально.

Этот тип сокращения данных уменьшает эффективный размер выборки.

Выходные аргументы

свернуть все

Отфильтрованный многомерный ряд отклика, возвращенный как numobs-by- numseries числовая матрица или numobs-by- numseries-by- numpaths числовой массив. Y представляет продолжение настроек presample в Y0.

Многомерные модели инноваций серии, возвращенные как numobs-by- numseries числовая матрица или numobs-by- numseries-by- numpaths числовой массив. Для получения дополнительной информации о значении E, см. Scale.

Алгоритмы

  • filter вычисляет Y и E используя этот процесс для каждой страницы j в Z.

    1. Если Scale является true, затем E (:,:, j) = L * Z (:,:, j), где L = chol(Mdl.Covariance,'lower'). В противном случае E (:,:, j) = Z (:,:, j). Установите et = E (:,:, j).

    2. Y (:,:, j) yt в этой системе уравнений.

      Δyt=Φ^1(L)(c^+d^t+A^B^yt1+β^xt+et).

      Для определений переменных см. «Векторная модель исправления ошибок».

  • filter делает вывод simulate. Обе функции фильтруют ряд нарушений порядка через модель, чтобы получить отклики и инновации. Однако, тогда как simulate генерирует ряд независимых Гауссовых нарушений порядка со средним нулем, с единичной дисперсией Z для формирования инноваций E = L*Z, filter позволяет вам подавать нарушения порядка от любого распределения.

  • filter использует этот процесс для определения времени источника t 0 моделей, которые включают линейные временные тренды.

    • Если вы не задаете Y0, затем t 0 = 0.

    • В противном случае, filter устанавливает t 0 в size(Y0,1)Mdl.P. Поэтому время в компоненте тренда: t = t 0 + 1, t 0 + 2,..., t 0 + numobs, где numobs является эффективным размером выборки (size(Y,1) после filter удаляет отсутствующие значения). Это соглашение согласуется с поведением по умолчанию оценки модели, в которой estimate удаляет первый Mdl.P ответы, уменьшение эффективного размера выборки. Хотя filter явно использует первое Mdl.P примитивируйте отклики в Y0 чтобы инициализировать модель, общее количество наблюдений в Y0 и Y (исключая отсутствующие значения) определяет 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