Работа с переходами состояний

В этом примере показано, как работать с данными перехода из эмпирического массива отсчётов состояний и создать дискретную цепь Маркова (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, содержащей количество:

  • Переходы от рецессии к расширению

  • Переходы от расширения к рецессии

  • Самопереходы спада

  • Самопереходы расширений

Ряд j и столбец j матрицы соответствуют одному и тому же экономическому состоянию, и элементу (j,k) содержит количество переходов от состояния j указывать k.

Сначала присвойте индексы представителям пространства состояний.

[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) количество переходов от рецессии к экспансии и так далее. Поэтому для эффективного подсчета типов переходов в данных для каждого перехода t кому t+1, подсчитать наблюдаемый переход путем индексации в матрицу переходов с использованием индексов состояний в разы t (строка) и t+1 (столбец).

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 означает, что эмпирическая вероятность перехода к расширению в то время t + 1, учитывая, что экономика США в то время находится в рецессии t, составляет 0,1618.

Постройте ориентированный график марковской цепи.

graphplot(mc,'LabelEdges',true)

Figure contains an axes. The axes contains an object of type graphplot.

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

См. также

Объекты

Функции

Похожие темы