В этом примере показано, как работать с данными о переходе из эмпирического массива количеств состояния и создать дискретную цепь Маркова (dtmc
) модель, характеризующая изменения состояния. Для каждой четверти в 1857–2019, пример категоризирует состояние экономики США как испытание рецессии или расширения при помощи исторических периодов рецессии, заданных Национальным бюро экономических исследований (NBER). Затем пример формирует эмпирическую матрицу перехода путем подсчета переходов от четверти к четверти экономического состояния.
Загрузите исторические, NBER-заданные даты начала и конца рецессии.
load Data_Recessions
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)
Цепь Маркова предполагает, что текущее экономическое состояние имеет тенденцию сохраняться от четверти до четверти.