Отфильтрованный вывод оперативных скрытых состояний в данных динамической регрессии переключения Маркова
возвращает фильтрованные вероятности состояния FS
= filter(Mdl
,Y
)FS
от проведения оптимального условного вывода вероятностей оперативных скрытых состояний в данных переключения режима Y
. Модель динамической регрессии Маркова-переключения Mdl
моделирует данные. filter
использует рекурсивное применение правила Байеса, как в Hamilton [3].
использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение". Для примера, FS
= filter(Mdl
,Y
,Name,Value
)'Y0',Y0
инициализирует динамический компонент каждой подмодели с помощью предварительных данных отклика Y0
.
Вычислите вероятности фильтрованного состояния из модели динамической регрессии с двумя состояниями Маркова-переключения для процесса 1-D отклика. Этот пример использует произвольные значения параметров для процесса генерации данных (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
Рассмотрим двухгосударственную марковскую динамическую регрессионую модель послевоенного реального темпа роста ВВП США. Модель имеет оценки параметров, представленные в [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
объект.
Загрузка и предварительная обработка данных
Загрузите набор данных ВВП США.
load Data_GDP
Data
содержит ежеквартальные измерения реального ВВП США в период 1947: Q1-2005: Q2. Период интереса в [1] 1947:Q2-2004:Q2. Для получения дополнительной информации о наборе данных введите Description
в командной строке.
Преобразуйте данные в годовую последовательность скоростей путем:
Преобразование данных в квартальный тариф в течение периода оценки
Ежегодный расчет ежеквартальных ставок
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')
Вычислите вероятности фильтрованного состояния из модели динамической регрессии с тремя состояниями Маркова-переключения для 2-D процесса отклика 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 наблюдений из стандартного 2-D Гауссова распределения.
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
Mdl
- Полностью заданная модель динамической регрессии Маркова-переключенияmsVAR
объект моделиY
- Наблюдаемые данные откликаНаблюдаемые данные отклика, заданные как numObs
-by- 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'
- Предварительный образец данных откликаПредварительный пример данных отклика, заданный как разделенная разделенными запятой парами, состоящая из 'Y0'
и a numPreSampleObs
-by- numSeries
числовая матрица.
Количество предварительных наблюдений numPreSampleObs
должно быть достаточным для инициализации условий AR всех подмоделей. Если numPreSampleObs
превышает порядок AR любого состояния, filter
использует последние наблюдения. По умолчанию Y0
является начальным сегментом Y
, что уменьшает эффективный размер образца.
Типы данных: double
'S0'
- Вероятности начального состоянияВероятности начального состояния, заданные как разделенная разделенными запятой парами, состоящая из 'S0'
и неотрицательный числовой вектор длины numStates
.
filter
нормализует S0
для создания распределения.
По умолчанию S0
является установившимся распределением, вычисленным asymptotics
.
Пример: 'S0',[0.2 0.2 0.6]
Пример: 'S0',[0 1]
задает начальное состояние 2.
Типы данных: double
'X'
- Данные предиктораДанные предиктора, используемые для оценки компонентов регрессии во всех подмоделях Mdl
, заданная как разделенная разделенными запятой парами, состоящая из 'X'
и числовую матрицу или вектор камеры из числовых матриц.
Чтобы использовать подмножество тех же предикторов в каждом состоянии, задайте X
как матрица с numPreds
столбцы и не менее numObs
строки. Столбцы соответствуют отдельным переменным предиктора. Подмодели используют начальные столбцы связанной матрицы, по порядку до количества предикторов подмоделей. Количество столбцов в Beta
свойство Mdl.SubModels
определяет количество экзогенных переменных в регрессионном компоненте подмодели (j
)
. Если количество строк превышает j
numObs
, затем filter
использует последние наблюдения.
Чтобы использовать различные предикторы в каждом состоянии, задайте вектор камеры таких матриц с длиной numStates
.
По умолчанию, filter
игнорирует компоненты регрессии в Mdl
.
Типы данных: double
FS
- Вероятности отфильтрованного состоянияФильтрованные вероятности состояния, возвращенные как numObs
-by- numStates
неотрицательная числовая матрица.
logL
- Оценка логарифмической правдоподобностиОценка логарифмической правдоподобности данных отклика Y
, возвращен как числовой скаляр.
filter
итеративно вычисляется из начальной оценки распределения состояний S0
к оценкам в FS
при помощи прогнозов из текущей истории данных на каждом временном шаге. smooth
уточняет текущие оценки распределения состояний, filter
формирует путем итерации назад из полной истории выборок Y
.
[1] Шове, М. и Дж. Д. Гамильтон. «Поворотные точки делового цикла знакомств». В нелинейном анализе бизнес-циклов (вклад в экономический анализ, том 276). (C. Milas, P. Rothman, and D. van Dijk, eds.). Амстердам: Emerald Group Publishing Limited, 2006.
[2] Гамильтон, Дж. Д. Новый подход к экономическому анализу нестационарных временных рядов и бизнес-цикла. Эконометрика. Том 57, 1989, стр. 357-384.
[3] Гамильтон, Дж. Д. «Анализ временных рядов, подверженных изменениям в режиме». Журнал эконометрики. Том 45, 1990, стр. 39-70.
[4] Гамильтон, Джеймс Д. Анализ временных рядов. Princeton, NJ: Princeton University Press, 1994.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.