filter

Фильтруйте нарушения порядка через модель векторной авторегрессии (VAR)

Описание

пример

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

пример

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

пример

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

Примеры

свернуть все

Подбор модели VAR (4) к данным индекса потребительских цен (ИПЦ) и уровня безработицы. Затем моделируйте ответы путем фильтрации случайной серии Гауссовых распределенных нарушений порядка через предполагаемую модель.

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

load Data_USEconModel

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

figure;
plot(DataTable.Time,DataTable.CPIAUCSL);
title('Consumer Price Index');
ylabel('Index');
xlabel('Date');

Figure contains an axes. The axes with title Consumer Price Index contains an object of type line.

figure;
plot(DataTable.Time,DataTable.UNRATE);
title('Unemployment rate');
ylabel('Percent');
xlabel('Date');

Figure contains an axes. The axes with title Unemployment rate contains an object of type line.

Стабилизируйте ИПЦ путем преобразования его в ряд темпов роста. Синхронизируйте две серии путем удаления первого наблюдения из ряда уровней безработицы. Создайте новый набор данных, содержащий преобразованные переменные, и не включающий строки, содержащие по крайней мере одно отсутствующее наблюдение.

rcpi = price2ret(DataTable.CPIAUCSL);
unrate = DataTable.UNRATE(2:end);
idx = all(~ismissing([rcpi unrate]),2);
Data = array2timetable([rcpi(idx) unrate(idx)],...
    'RowTimes',DataTable.Time(idx),'VariableNames',{'rcpi','unrate'});

Создайте модель VAR (4) по умолчанию с помощью синтаксиса shorthand.

Mdl = varm(2,4);

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

EstMdl = estimate(Mdl,Data.Variables);

EstMdl является полностью заданным, предполагаемым varm объект модели.

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

numobs = size(Data,1);
rng(1) % For reproducibility
Z = mvnrnd(zeros(Mdl.NumSeries,1),eye(Mdl.NumSeries),numobs);

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

Y = filter(EstMdl,Z);

Y является матрицей 245 на 2 симулированные отклики. Первый и второй столбцы содержат моделируемые темпы роста ИПЦ и уровень безработицы, соответственно.

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

figure;
plot(Data.Time,Y(:,1));
hold on;
plot(Data.Time,Data.rcpi)
ylabel('Growth rate')
xlabel('Date')
title('CPI Growth Rate');
legend('Simulation','True')

Figure contains an axes. The axes with title CPI Growth Rate contains 2 objects of type line. These objects represent Simulation, True.

figure;
plot(Data.Time,Y(:,2));
hold on;
plot(Data.Time,Data.unrate)
ylabel('Percent');
xlabel('Date')
title('Unemployment Rate');
legend('Simulation','True')

Figure contains an axes. The axes with title Unemployment Rate contains 2 objects of type line. These objects represent Simulation, True.

Оценка модели VAR (4) индекса потребительских цен (ИПЦ), уровня безработицы и валового внутреннего продукта (ВВП). Включить линейный регрессионный компонент, содержащий текущий квартал и последние четыре квартала государственных расходов и инвестиций (GCE). Передайте несколько многомерных Гауссовых путей нарушения порядка через предполагаемую модель.

Загрузите Data_USEconModel набор данных. Вычислите реальный ВВП.

load Data_USEconModel
DataTable.RGDP = DataTable.GDP./DataTable.GDPDEF*100;

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

figure;
subplot(2,2,1)
plot(DataTable.Time,DataTable.CPIAUCSL);
ylabel('Index');
title('Consumer Price Index');
subplot(2,2,2)
plot(DataTable.Time,DataTable.UNRATE);
ylabel('Percent');
title('Unemployment Rate');
subplot(2,2,3)
plot(DataTable.Time,DataTable.RGDP);
ylabel('Output');
title('Real Gross Domestic Product');
subplot(2,2,4)
plot(DataTable.Time,DataTable.GCE);
ylabel('Billions of $');
title('Government Expenditures');

Figure contains 4 axes. Axes 1 with title Consumer Price Index contains an object of type line. Axes 2 with title Unemployment Rate contains an object of type line. Axes 3 with title Real Gross Domestic Product contains an object of type line. Axes 4 with title Government Expenditures contains an object of type line.

Стабилизируйте ИПЦ, ВВП и GCE путем преобразования каждого из них в ряд темпов роста. Синхронизируйте ряд показателей безработицы с другими, удалив его первое наблюдение.

inputVariables = {'CPIAUCSL' 'RGDP' 'GCE'};
Data = varfun(@price2ret,DataTable,'InputVariables',inputVariables);
Data.Properties.VariableNames = inputVariables;
Data.UNRATE = DataTable.UNRATE(2:end);

Разверните ряд скоростей GCE к матрице, которая включает в себя его текущее значение и вверх до четырех отстающих значений. Удалите GCE переменная от Data.

rgcelag4 = lagmatrix(Data.GCE,0:4);
Data.GCE = [];

Создайте модель VAR (4) по умолчанию с помощью синтаксиса shorthand.

Mdl = varm(3,4);
Mdl.SeriesNames = {'rcpi' 'unrate' 'rgdpg'};

Оцените модель, используя целую выборку. Задайте матрицу GCE как данные для регрессионного компонента.

EstMdl = estimate(Mdl,Data.Variables,'X',rgcelag4);

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

numpaths = 1000;
numseries = Mdl.NumSeries;
idx = all(~ismissing([Data array2table(rgcelag4)]),2);
numobs = sum(idx);
rng(1);
Z = mvnrnd(zeros(Mdl.NumSeries,1),eye(Mdl.NumSeries),numobs*numpaths);
Z = reshape(Z,[numobs,3,numpaths]);

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

[Y,E] = filter(EstMdl,Z,'X',rgcelag4);

Y и E представляют собой 244 на 3 на 1000 матриц фильтрованных откликов и масштабированных нарушений порядка, соответственно. Столбцы соответствуют темпам роста ИПЦ, безработице и темпам роста ВВП, соответственно. filter применяет одни и те же данные предиктора ко всем путям.

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

MeanFilt = mean(Y,3);

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

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

Data = Data(idx,:);

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

hl = legend([h1 h2],'Data','Mean');
hl.Location = 'none';
hl.Position = [0.6 0.25 hl.Position(3:4)];

Figure contains 3 axes. Axes 1 with title rcpi contains 1002 objects of type line. Axes 2 with title unrate contains 1002 objects of type line. Axes 3 with title rgdpg contains 1002 objects of type line. These objects represent Data, Mean.

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

свернуть все

Модель VAR, заданная как varm объект модели, созданный varm или 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^+δ^t+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.

Введенный в R2017a