Работа с изменениями состояния

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

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

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

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

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

Строка 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.

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

Смотрите также

Объекты

Функции

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте