filter

Фильтрованный вывод действующих скрытых состояний в переключающих Маркова данных о динамической регрессии

Описание

пример

FS = filter(Mdl,Y) возвращает отфильтрованные вероятности состояния FS от проведения оптимального условного вывода вероятностей действующих скрытых состояний в переключающих режим данных Y. Переключающая Маркова модель Mdl динамической регрессии моделирует данные. filter использует рекурсивное приложение правила Бейеса, как в Гамильтоне [3].

пример

FS = filter(Mdl,Y,Name,Value) дополнительные опции использования заданы одним или несколькими аргументами пары "имя-значение". Например, 'Y0',Y0 инициализирует динамический компонент каждой подмодели при помощи преддемонстрационных данных об ответе Y0.

пример

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

Примеры

свернуть все

Вычислите отфильтрованные вероятности состояния из переключающей Маркова модели динамической регрессии с двумя состояниями для 1D процесса ответа. Этот пример использует произвольные значения параметров для генерирующего данные процесса (DGP).

Создайте полностью заданную модель для DGP

Создайте модель дискретной цепи Маркова с двумя состояниями для переключающегося механизма.

P = [0.9 0.1; 0.2 0.8];
mc = dtmc(P);

mc полностью заданный dtmc объект.

Для каждого состояния создайте AR (0) (постоянный только) модель для процесса ответа. Сохраните модели в векторе.

mdl1 = arima('Constant',2,'Variance',3);
mdl2 = arima('Constant',-2,'Variance',1);
mdl = [mdl1; mdl2];

mdl1 и mdl2 полностью заданный arima объекты.

Создайте переключающую Маркова модель динамической регрессии из переключающегося механизма mc и вектор из подмоделей mdl.

Mdl = msVAR(mc,mdl);

Mdl полностью заданный msVAR объект.

Симулируйте данные из DGP

filter требует, чтобы ответы вычислили отфильтрованные вероятности состояния. Сгенерируйте один случайный ответ и утвердите путь, обе из длины 30, от DGP.

rng(1000); % For reproducibility
[y,~,sp] = simulate(Mdl,30);

Вычислите вероятности состояния

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

fs = filter(Mdl,y);
ss = smooth(Mdl,y);

fs и ss 30 2 матрицы отфильтрованных и сглаживавших вероятностей состояния, соответственно, в течение каждого периода в горизонте симуляции. Несмотря на то, что отфильтрованные вероятности состояния во время t (fs(t,:)) основаны на данных об ответе в течение времени t (y(1:t)), сглаживавшие вероятности состояния во время t (ss(t,:)) основаны на всех наблюдениях.

Постройте симулированный путь состояния и отфильтрованные и сглаживавшие вероятности состояния на том же графике.

figure
plot(sp,'m')
hold on
plot(fs(:,2),'r')
plot(ss(:,2),'g')
yticks([0 1 2])
xlabel("Time")
title("Observed States with Estimated State Probabilities")
legend({'Simulated states','Filtered probability: state 2',...
    'Smoothed probability: state 2'})
hold off

Считайте переключающую Маркова модель динамической регрессии с двумя состояниями послевоенных США действительным темпом роста GDP. Модели представили оценки параметра в [1].

Создайте переключающую Маркова модель динамической регрессии

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

P = [0.92 0.08; 0.26 0.74];
mc = dtmc(P,'StateNames',["Expansion" "Recession"]);

Создайте отдельные, полностью заданные модели AR (0) для этих двух режимов.

sigma = 3.34; % Homoscedastic models across states
mdl1 = arima('Constant',4.62,'Variance',sigma^2);
mdl2 = arima('Constant',-0.48,'Variance',sigma^2);
mdl = [mdl1 mdl2];

Создайте переключающую Маркова модель динамической регрессии из переключающегося механизма mc и подмодели состояния специфичные mdl.

Mdl = msVAR(mc,mdl);

Mdl полностью заданный msVAR объект.

Загрузите и предварительно обработайте данные

Загрузите набор данных GDP США.

load Data_GDP

Data содержит ежеквартальные измерения США действительный GDP в период 1947:Q1–2005:Q2. Период интереса в [1] является 1947:Q2–2004:Q2. Для получения дополнительной информации о наборе данных введите Description в командной строке.

Преобразуйте данные к ряду годового показателя:

  1. Преобразование данных к ежеквартальному уровню в период оценки

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

qrate = diff(Data(2:230))./Data(2:229); % Quarterly rate
arate = 100*((1 + qrate).^4 - 1);       % Annualized rate

Преобразование пропускает первое наблюдение.

Вычислите фильтрованные вероятности состояния

Вычислите отфильтрованные вероятности состояния для данных и модели.

FS = filter(Mdl,arate);
FS(end,:)
ans = 1×2

    0.9396    0.0604

FS 228 2 матрица отфильтрованных вероятностей состояния. Строки соответствуют периодам в данных arate, и столбцы соответствуют режимам.

Постройте отфильтрованные вероятности рецессии, как в [1], рисунок 6.

figure;
plot(dates(3:230),FS(:,2),'r')
datetick('x')
title('Current Filter Probabilities and NBER Recessions')
recessionplot

Вычислите сглаживавшие вероятности состояния

Вычислите сглаживавшие вероятности состояния, и затем постройте сглаживавшие вероятности рецессии как в [1], рисунок 6.

SS = smooth(Mdl,arate);

figure
plot(dates(3:230),SS(:,2),'r')
datetick('x')
recessionplot
title('Full-Sample Smoothed Probabilities and NBER Recessions')

Вычислите отфильтрованные вероятности состояния из переключающей Маркова модели динамической регрессии с тремя состояниями для 2D процесса ответа VARX. Этот пример использует произвольные значения параметров для DGP.

Создайте полностью заданную модель для DGP

Создайте модель дискретной цепи Маркова с тремя состояниями для переключающегося механизма.

P = [5 1 1; 1 5 1; 1 1 5];
mc = dtmc(P);

mc полностью заданный dtmc объект. dtmc нормирует строки P так, чтобы они суммировали к 1.

Для каждого состояния создайте полностью заданную модель VARX(0) (постоянный и только матрица коэффициента регрессии) для процесса ответа. Задайте различные постоянные векторы через модели. Задайте тот же коэффициент регрессии для этих двух регрессоров и задайте ту же ковариационную матрицу. Сохраните модели VARX в векторе.

% Constants
C1 = [1;-1];
C2 = [3;-3];
C3 = [5;-5];

% Regression coefficient
Beta = [0.2 0.1;0 -0.3];

% Covariance matrix
Sigma = [1.8 -0.4; -0.4 1.8];

% VARX submodels
mdl1 = varm('Constant',C1,'Beta',Beta,...
    'Covariance',Sigma);
mdl2 = varm('Constant',C2,'Beta',Beta,...
    'Covariance',Sigma);
mdl3 = varm('Constant',C3,'Beta',Beta,...
    'Covariance',Sigma);

mdl = [mdl1; mdl2; mdl3];

mdl содержит три, полностью задал varm объекты модели.

Для DGP создайте полностью заданную переключающую Маркова модель динамической регрессии из переключающегося механизма mc и подмодели mdl.

Mdl = msVAR(mc,mdl);

Mdl полностью заданный msVAR модель.

Симулируйте данные из DGP

Симулируйте данные для двух внешних рядов путем генерации 30 наблюдений от стандартного 2D Распределения Гаусса.

rng(1) % For reproducibility
X = randn(30,2);

Сгенерируйте один случайный ответ и утвердите путь, обе из длины 30, от DGP. Задайте симулированные внешние данные для компонентов регрессии подмодели.

[Y,~,SP] = simulate(Mdl,30,'X',X);

Y 30 2 матрица одного пути к симулированному отклику. SP 30 1 вектор из одного симулированного пути состояния.

Вычислите вероятности состояния

Вычислите отфильтрованные и сглаживавшие вероятности состояния из DGP, учитывая данные о симулированном отклике.

FS = filter(Mdl,Y,'X',X);
SS = smooth(Mdl,Y,'X',X);

FS и SS 30 2 матрицы отфильтрованных и сглаживавших вероятностей состояния, соответственно, в течение каждого периода в горизонте симуляции.

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

figure
subplot(3,1,1)
plot(SP,'m')
yticks([1 2 3])
legend({'Simulated states'})
subplot(3,1,2)
plot(FS,'--')
legend({'Filtered s1','Filtered s2','Filtered s3'})
subplot(3,1,3)
plot(SS,'-')
legend({'Smoothed s1','Smoothed s2','Smoothed s3'})

Полагайте, что данные в Вычисляют Фильтрованные Вероятности Рецессии, но принимают, что период интереса является 1960:Q1–2004:Q2. Кроме того, рассмотрите добавление авторегрессивного термина к каждой подмодели.

Создайте частично заданную модель для оценки

Создайте частично заданную переключающую Маркова модель динамической регрессии для оценки. Задайте AR (1) подмодели.

P = NaN(2);
mc = dtmc(P,'StateNames',["Expansion" "Recession"]);
mdl = arima(1,0,0);
Mdl = msVAR(mc,[mdl; mdl]);

Поскольку подмодели являются AR (1), каждый требует, чтобы одно преддемонстрационное наблюдение инициализировало свой динамический компонент для оценки.

Создайте полностью заданную модель, содержащую начальную стоимость

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

mc0 = dtmc(0.5*ones(2),'StateNames',["Expansion" "Recession"]);
submdl01 = arima('Constant',1,'Variance',1,'AR',0.001);
submdl02 = arima('Constant',-1,'Variance',1,'AR',0.001);
Mdl0 = msVAR(mc0,[submdl01; submdl02]);

Загрузите и предварительно обработайте данные

Загрузите данные. Преобразуйте целый набор к ряду годового показателя.

load Data_GDP
qrate = diff(Data)./Data(1:(end - 1)); 
arate = 100*((1 + qrate).^4 - 1);

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

dates = datetime(dates(2:end),'ConvertFrom','datenum',...
    'Format','yyyy:QQQ','Locale','en_US');
estPrd = datetime(["1960:Q2" "2004:Q2"],'InputFormat','yyyy:QQQ',...
    'Format','yyyy:QQQ','Locale','en_US');
idxEst = isbetween(dates,estPrd(1),estPrd(2));
idxPre = dates < (estPrd(1)); 

Оценочная модель

Подбирайте модель к выборочным данным оценки. Задайте преддемонстрационное наблюдение.

arate0 = arate(idxPre);
arateEst = arate(idxEst);
EstMdl = estimate(Mdl,Mdl0,arateEst,'Y0',arate0);

EstMdl полностью заданный msVAR объект.

Вычислите вероятности состояния

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

FS = filter(EstMdl,arateEst,'Y0',arate0);
SS = smooth(EstMdl,arateEst,'Y0',arate0);

figure;
subplot(2,1,1)
plot(dates(idxEst),FS(:,2),'r')
title("Current Filter Probabilities and NBER Recessions")
recessionplot
subplot(2,1,2)
plot(dates(idxEst),SS(:,2),'r')
title("Full-Sample Smoothed Probabilities and NBER Recessions")
recessionplot

Рассмотрите модель, и данные в Вычисляют Фильтрованные Вероятности Рецессии.

Создайте полностью заданную переключающую Маркова модель.

P = [0.92 0.08; 0.26 0.74];
mc = dtmc(P,'StateNames',["Expansion" "Recession"]);

sigma = 3.34;
mdl1 = arima('Constant',4.62,'Variance',sigma^2);
mdl2 = arima('Constant',-0.48,'Variance',sigma^2);
mdl = [mdl1; mdl2];

Mdl = msVAR(mc,mdl);

Загрузите и предварительно обработайте данные.

load Data_GDP

qrate = diff(Data(2:230))./Data(2:229); 
arate = 100*((1 + qrate).^4 - 1);       

Вычислите отфильтрованные вероятности состояния и логарифмическую правдоподобность для данных и модели.

[FS,logL] = filter(Mdl,arate);
logL
logL = -640.3016

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

свернуть все

Полностью заданная переключающая Маркова модель динамической регрессии в виде msVAR объект модели возвращен msVAR или estimate. Свойства полностью заданного объекта модели не содержат NaN значения.

Наблюдаемые данные об ответе в виде numObs- numSeries числовая матрица.

numObs объем выборки. numSeries количество переменных отклика (Mdl.NumSeries).

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

Y представляет продолжение преддемонстрационного ряда ответа в Y0.

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

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

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

Пример: 'Y0',Y0,'X',X инициализирует динамический компонент каждой подмодели в Mdl при помощи преддемонстрационных данных об ответе Y0, и включает компонент линейной регрессии в каждую подмодель, состоявшую из данных о предикторе в X и заданные коэффициенты регрессии.

Преддемонстрационные данные об ответе в виде разделенной запятой пары, состоящей из 'Y0' и numPreSampleObs- numSeries числовая матрица.

Количество преддемонстрационных наблюдений numPreSampleObs должно быть достаточным, чтобы инициализировать условия AR всех подмоделей. Если numPreSampleObs превышает порядок AR любого состояния, filter использует последние наблюдения. По умолчанию, Y0 начальный сегмент Y, который уменьшает эффективный объем выборки.

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

Вероятности начального состояния в виде разделенной запятой пары, состоящей из 'S0' и неотрицательный числовой вектор из длины numStates.

filter нормирует S0 произвести распределение.

По умолчанию, S0 установившееся распределение, вычисленное asymptotics.

Пример: 'S0',[0.2 0.2 0.6]

Пример: 'S0',[0 1] задает состояние 2 как начальное состояние.

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

Данные о предикторе раньше оценивали компоненты регрессии во всех подмоделях MdlВ виде разделенной запятой пары, состоящей из 'X' и числовая матрица или вектор ячейки из числовых матриц.

Чтобы использовать подмножество тех же предикторов в каждом состоянии, задайте X как матрица с numPreds столбцы и по крайней мере numObs 'Строки' . Столбцы соответствуют отличным переменным предикторам. Подмодели используют первоначальные столбцы связанной матрицы, в порядке, до количества предикторов подмодели. Количество столбцов в Beta свойство Mdl. SubModels (j) определяет количество внешних переменных в компоненте регрессии подмодели j. Если количество строк превышает numObsто filter использует последние наблюдения.

Чтобы использовать различные предикторы в каждом состоянии, задайте вектор ячейки из таких матриц с длиной numStates.

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

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

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

свернуть все

Фильтрованные вероятности состояния, возвращенные как numObs- numStates неотрицательная числовая матрица.

Предполагаемая логарифмическая правдоподобность данных об ответе Y, возвращенный в виде числа.

Алгоритмы

filter доходы итеративно от первоначальной оценки распределенности S0 к оценкам в FS при помощи прогнозов из текущей истории данных на каждом временном шаге. smooth совершенствовал текущие оценки распределенности это filter производит путем итерации назад от полной демонстрационной истории Y.

Ссылки

[1] Chauvet, M. и Дж. Д. Гамильтон. "Датируя Поворотные моменты Делового цикла". В Нелинейном Анализе Деловых циклов (Вклады в Экономический анализ, Объем 276). C. Милас, П. Ротмен, и Д. ван Дейк, редакторы). Амстердам: Emerald Group Publishing Limited, 2006.

[2] Гамильтон, J. D. "Новый Подход к Экономическому анализу Неустановившихся Временных рядов и Делового цикла". Econometrica. Издание 57, 1989, стр 357–384.

[3] Гамильтон, J. D. "Анализ Временных рядов Согласно Изменениям в Режиме". Журнал Эконометрики. Издание 45, 1990, стр 39–70.

[4] Гамильтон, Джеймс. D. Анализ Временных Рядов. Принстон, NJ: Издательство Принстонского университета, 1994.

Смотрите также

Объекты

Функции

Введенный в R2019b
Для просмотра документации необходимо авторизоваться на сайте