Сглаживавший вывод действующих скрытых состояний в переключающих Маркова данных о динамической регрессии
возвращает сглаживавшие вероятности состояния SS
= smooth(Mdl
,Y
)SS
из действующих скрытых состояний в переключающих режим данных Y
. Переключающая Маркова модель Mdl
динамической регрессии моделирует данные.
smooth
выполняет прямое использование рекурсии filter
, и затем выполняет противоположную рекурсию Кима [5].
дополнительные опции использования заданы одними или несколькими аргументами name-value. Например, SS
= smooth(Mdl
,Y
,Name,Value
)'Y0',Y0
инициализирует динамический компонент каждой подмодели при помощи преддемонстрационных данных об ответе Y0
.
Вычислите сглаживавшие вероятности состояния из переключающей Маркова модели динамической регрессии с двумя состояниями для 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
smooth
требует, чтобы ответы вычислили сглаживавшие вероятности состояния. Сгенерируйте один случайный ответ и утвердите путь, обе из длины 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
в командной строке.
Преобразуйте данные к ряду годового показателя:
Преобразование данных к ежеквартальному уровню в период оценки
Пересчитывание на год ежеквартальных уровней
qrate = diff(Data(2:230))./Data(2:229); % Quarterly rate arate = 100*((1 + qrate).^4 - 1); % Annualized rate
Преобразование пропускает первое наблюдение.
Вычислите сглаживавшие вероятности состояния
Вычислите сглаживавшие вероятности состояния для данных и модели. Отобразите сглаживавшую распределенность для 1972:Q2.
SS = smooth(Mdl,arate); SS(end,:)
ans = 1×2
0.9396 0.0604
SS
228 2 матрица сглаживавших вероятностей состояния. Строки соответствуют периодам в данных arate
, и столбцы соответствуют режимам.
Постройте сглаживавшие вероятности рецессии, как в [1], рисунок 6.
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, учитывая данные о симулированном отклике.
SS = smooth(Mdl,Y,'X',X);
SS
30 2 матрица сглаживавших вероятностей состояния в течение каждого периода в горизонте симуляции.
Постройте симулированный путь состояния и сглаживавшие вероятности состояния на подграфиках на том же рисунке.
figure subplot(2,1,1) plot(SP,'m') yticks([1 2 3]) legend({'Simulated states'}) subplot(2,1,2) 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
объект.
Вычислите сглаживавшие вероятности состояния
Вычислите сглаживавшие вероятности состояния из предполагаемой модели и данных в период оценки. Задайте преддемонстрационное наблюдение. Постройте предполагаемые вероятности рецессии.
SS = smooth(EstMdl,arateEst,'Y0',arate0); figure; 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);
Вычислите сглаживавшие вероятности состояния и логарифмическую правдоподобность для данных и модели.
[SS,logL] = smooth(Mdl,arate); logL
logL = -640.3016
Y
— Наблюдаемые данные об ответеНаблюдаемые данные об ответе в виде 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
— Преддемонстрационные данные об ответеПреддемонстрационные данные об ответе в виде разделенной запятой пары, состоящей из 'Y0'
и numPreSampleObs
- numSeries
числовая матрица.
Количество преддемонстрационных наблюдений numPreSampleObs
должно быть достаточным, чтобы инициализировать термины AR всех подмоделей. Если numPreSampleObs
превышает порядок AR любого состояния, smooth
использует последние наблюдения. По умолчанию, Y0
начальный сегмент Y
, который уменьшает эффективный объем выборки.
Типы данных: double
S0
— Вероятности начального состоянияВероятности начального состояния в виде разделенной запятой пары, состоящей из 'S0'
и неотрицательный числовой вектор из длины numStates
.
smooth
нормирует 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
то smooth
использует последние наблюдения.
Чтобы использовать различные предикторы в каждом состоянии, задайте вектор ячейки из таких матриц с длиной numStates
.
По умолчанию, smooth
игнорирует компоненты регрессии в Mdl
.
Типы данных: double
SS
— Сглаживавшие вероятности состоянияСглаживавшие вероятности состояния, возвращенные как numObs
- numStates
неотрицательная числовая матрица.
logL
— Предполагаемая логарифмическая правдоподобностьПредполагаемая логарифмическая правдоподобность данных об ответе Y
, возвращенный в виде числа.
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] Гамильтон, анализ временных рядов Джеймса Д. Принстон, NJ: Издательство Принстонского университета, 1994.
[5] Ким, C.-J. "Динамические Линейные Модели с Марковым, Переключающимся". Журнал Эконометрики. Издание 60, 1994, стр 1–22.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.