В этом примере показано, как работать с данными перехода из эмпирического массива отсчётов состояний и создать дискретную цепь Маркова (dtmc
) модель, характеризующая переходы состояний. Для каждого квартала 1857-2019 годов пример классифицирует состояние экономики США как испытывающее спад или расширение с помощью исторических периодов рецессии, определенных Национальным бюро экономических исследований (NBER). Затем пример формирует эмпирическую матрицу перехода путем подсчета переходов от четверти к четверти экономического состояния.
Загрузите исторические, определяемые NBER даты начала и конца рецессии.
load Data_Recessions
The Recessions
переменная в рабочей области является матрицей серийных номеров дат 33 на 2. Строки Recessions
соответствуют последующим периодам спада, а столбцы 1 и 2 содержат начало и конец даты, соответственно. Для получения дополнительной информации введите Description
в командной строке.
Потому что MATLAB ® datetime
массивы позволяют вам эффективно работать с данными дат, преобразовывать Recessions
в datetime
массив. Укажите формат даты yyyy-MM-dd
. Визуально сравните типы данных первых нескольких периодов и последних нескольких периодов.
NBERRec = datetime(Recessions,'ConvertFrom',"datenum",... "Format","yyyy-MM-dd"); disptbl = table(Recessions,NBERRec); head(disptbl,3)
ans=3×2 table
Recessions NBERRec
________________________ ______________________
6.7842e+05 6.7897e+05 1857-06-15 1858-12-15
6.7964e+05 6.7988e+05 1860-10-15 1861-06-15
6.8128e+05 6.8226e+05 1865-04-15 1867-12-15
tail(disptbl,3)
ans=3×2 table
Recessions NBERRec
________________________ ______________________
7.2703e+05 7.2727e+05 1990-07-15 1991-03-15
7.3092e+05 7.3117e+05 2001-03-15 2001-11-15
7.3339e+05 7.3394e+05 2007-12-15 2009-06-15
Предположим, что период дискретизации начинается с NBERRec(1,1)
= 1857-06-15
и заканчивается на 2019-05-03
. Создайте массив datetime из всех последовательных кварталов в интервале 1857-06-15
через 2019-05-03
.
timeline = NBERRec(1,1):calquarters(1):datetime("2019-05-03"); T = numel(timeline); % Sample size
Идентифицируйте, какие кварталы происходят во время рецессии.
isrecession = @(x)any(isbetween(x,NBERRec(:,1),NBERRec(:,2))); idxrecession = arrayfun(isrecession,timeline);
Создайте расписание MATLAB ®, содержащее переменную, которая определяет экономическое состояние каждого квартала в периоде выборки. Отобразите первые несколько наблюдений и последние несколько наблюдений в расписании.
EconState = repmat("Expansion",T,1); % Preallocation EconState(idxrecession) = "Recession"; Tbl = timetable(EconState,'RowTimes',timeline); head(Tbl,3)
ans=3×1 timetable
Time EconState
__________ ___________
1857-06-15 "Recession"
1857-09-15 "Recession"
1857-12-15 "Recession"
tail(Tbl,3)
ans=3×1 timetable
Time EconState
__________ ___________
2018-09-15 "Expansion"
2018-12-15 "Expansion"
2019-03-15 "Expansion"
Tbl
- набор данных наблюдаемых, ежеквартальных экономических состояний, из которых можно отсчитывать переходы.
Рассмотрите создание матрицы 2 на 2, содержащей количество:
Переходы от рецессии к расширению
Переходы от расширения к рецессии
Самопереходы спада
Самопереходы расширений
Ряд и столбец матрицы соответствуют одному и тому же экономическому состоянию, и элементу содержит количество переходов от состояния указывать .
Сначала присвойте индексы представителям пространства состояний.
[idxstate,states] = grp2idx(Tbl.EconState); states
states = 2x1 cell
{'Recession'}
{'Expansion'}
numstates = numel(states);
P = zeros(numstates); % Preallocate transition matrix
Индексы состояния idxstate
соответствуют состояниям (строки и столбцы) матрицы перехода и states
определяет индексы. P(1,1)
количество самопереходов спадов, P(1,2)
количество переходов от рецессии к экспансии и так далее. Поэтому для эффективного подсчета типов переходов в данных для каждого перехода кому , подсчитать наблюдаемый переход путем индексации в матрицу переходов с использованием индексов состояний в разы (строка) и (столбец).
for t = 1:(T - 1) P(idxstate(t),idxstate(t+1)) = P(idxstate(t),idxstate(t+1)) + 1; end array2table(P,'VariableNames',states,'RowNames',states)
ans=2×2 table
Recession Expansion
_________ _________
Recession 171 33
Expansion 32 411
P
- матрица наблюдаемых переходов. P(1,2)
= 33
означает, что экономика США перешла от рецессии к экспансии 33
время между 15-Jun-1857
и 03-May-2019
.
Создайте модель дискретной цепи Маркова, характеризующуюся матрицей перехода P
.
mc = dtmc(P,'StateNames',states); array2table(mc.P,'VariableNames',states,'RowNames',states)
ans=2×2 table
Recession Expansion
_________ _________
Recession 0.83824 0.16176
Expansion 0.072235 0.92777
mc
является dtmc
объект. dtmc
нормализует P
для создания правой стохастической матрицы перехода mc.P
(каждая строка равна 1). Элемент mc.P(1,2)
= 0.1618
означает, что эмпирическая вероятность перехода к расширению в то время + 1, учитывая, что экономика США в то время находится в рецессии , составляет 0,1618.
Постройте ориентированный график марковской цепи.
graphplot(mc,'LabelEdges',true)
Марковская цепь предполагает, что текущее экономическое состояние имеет тенденцию сохраняться, от квартала к кварталу.