Создайте и измените объекты модели цепи Маркова

Матрица Грина P характеризует дискретное время, гомогенную временем Цепь Маркова. Для получения дополнительной информации на поддерживаемых формах P, см. Обзор Среды Объекта Дискретной цепи Маркова. Если вы имеете теоретическую или эмпирическую матрицу Грина, создаете объект модели Цепи Маркова при помощи dtmc. В противном случае можно создать Цепь Маркова из случайным образом сгенерированной матрицы перехода заданной структуры, такой как количество неосуществимых переходов, при помощи mcmix.

Создайте цепь Маркова из стохастической матрицы перехода

Этот пример показывает, как создать объект Цепи Маркова смоделировать гипотетический экономический цикл с помощью стохастической матрицы перехода.

Предположим, что динамическое поведение действительного валового внутреннего продукта (ВВП) США переключается между четырьмя моделями:

  • Режим 1: авторегрессивная модель с низкой средней и низкой волатильностью

  • Режим 2: авторегрессивная модель с низкой средней и высокой волатильностью

  • Режим 3: авторегрессивная модель с высокой средней и низкой волатильностью

  • Режим 4: авторегрессивная модель с высокой средней и высокой волатильностью

Рассмотрите эту правильно-стохастическую матрицу перехода, содержащую вероятности изменений состояния между временными шагами t и t + 1 для всего t.

P=[0.50.5000.500.5000010010]

Например, P23=0.5 означает вероятность, что действительные переходы GDP от Режима 2 к Режиму 3 в следующем временном шаге 0.5.

Установите матрицу перехода на переменную.

P = [0.5 0.5 0.0 0.0;
     0.5 0.0 0.5 0.0;
     0.0 0.0 0.0 1.0;
     0.0 0.0 1.0 0.0];

Создайте объект Цепи Маркова, охарактеризованный матрицей P перехода.

mc = dtmc(P)
mc = 
  dtmc with properties:

             P: [4x4 double]
    StateNames: ["1"    "2"    "3"    "4"]
     NumStates: 4

mc является объектом dtmc. MATLAB® отображает свойства и соответствующие значения mc в командной строке.

Ассоциация имен к состояниям улучшает отображения функционального вывода и графики цепочки. Когда вы создаете объект Цепи Маркова, можно сопоставить имена к состояниям при помощи аргумента пары "имя-значение" 'StateNames'. После того, как вы создадите объект, можно сопоставить имена к состояниям путем установки свойства StateNames с помощью записи через точку.

Партнер называет к состояниям в mc при помощи записи через точку. Элементы вектора строки, содержащего имена, соответствуют строкам и столбцам P.

stateNames = ["Regime 1" "Regime 2" "Regime 3" "Regime 4"];
mc.StateNames = stateNames;

Постройте диграф Цепи Маркова.

figure;
graphplot(mc);

После создания и графического вывода Цепи Маркова, можно определить характеристики цепочки, такие как ее стационарное распределение при помощи asymptotics или ее эволюция распределенности при помощи redistribution.

Создайте цепь Маркова из наблюдаемых изменений состояния

Этот пример показывает, как создать объект Цепи Маркова из матрицы, содержащей наблюдаемые переходы, а не стохастическую матрицу перехода.

Рассмотрите простую, эконометрическую модель с двумя состояниями, описывающую состояние экономики от 1 857 до 2011. Состояния являются рецессией и разработкой. Для получения дополнительной информации смотрите Циклические экономические подъемы США и Сокращения.

Загрузите набор данных рецессий.

load Data_Recessions

Recessions(j,1) содержит дату (четверть как порядковый номер), который запускает рецессию j, и Recessions(j,2) содержит соответствующую дату окончания.

Преобразуйте массив порядковых номеров даты к массиву datetime.

dtrec = datetime(Recessions,'ConvertFrom','datenum');

Примите, что выборка начинается на 15Jun1857 и заканчивается на 15Dec2011. Задайте переменные datetime для запуска и конца периода выборки.

st = datetime(1857,6,15);  % Start of a recession
ed = datetime(2011,12,15); % Midst of development

Считайте количество переходов в период выборки.

numTrans = calquarters(between(st,ed,'quarters'));

Во время 1 857 - 2011, количество количество переходов от a:

  • Состояние разработки к рецессии

  • Рецессия к состоянию разработки

  • Рецессия к себе

  • Состояние разработки к себе

dev2rec = size(dtrec,1) - 1; % Assume no knowledge about the state before st
rec2dev = size(dtrec,1);
rec2rec = sum(calquarters(between(dtrec(:,1),dtrec(:,2),'quarters')));
dev2dev = numTrans - dev2rec - rec2dev - rec2rec;

Создайте матрицу перехода, содержащую наблюдаемые количества.

EmpP = [rec2rec rec2dev;
        dev2rec dev2dev];

Создайте объект Цепи Маркова, охарактеризованный матрицей перехода. Задайте имена состояния, сопоставленные со строками и столбцами EmpP.

mc = dtmc(EmpP,'StateNames',["Recession","Development"])
mc = 
  dtmc with properties:

             P: [2x2 double]
    StateNames: ["Recession"    "Development"]
     NumStates: 2

MATLAB® нормирует матрицу перехода так, чтобы все строки суммировали к 1. That is, MATLAB® вычисляет правильную стохастическую матрицу из матрицы наблюдаемых переходов. Отобразите стохастическую матрицу перехода Цепи Маркова при помощи записи через точку. Проверьте, что каждая строка матрицы перехода суммирует к 1.

mc.P
ans = 2×2

    0.8443    0.1557
    0.0788    0.9212

sum(mc.P,2)
ans = 2×1

     1
     1

Постройте диграф Цепи Маркова. Укажите на вероятности перехода при помощи цветов обводки.

figure;
graphplot(mc,'ColorEdges',true);

Экономика, более вероятно, сохранится в ее текущем состоянии, чем переход к другому состоянию.

Создайте цепь Маркова из случайной матрицы перехода

Этот пример показывает, как создать объект Цепи Маркова из правильно-стохастической матрицы перехода, которая случайным образом сгенерирована. Такая Цепь Маркова удобна для исследования и тестирования.

Создайте случайный объект Цепи Маркова, содержащий пять произвольных состояний.

rng(1); % For reproducibility
numStates = 5;
mc = mcmix(numStates)
mc = 
  dtmc with properties:

             P: [5x5 double]
    StateNames: ["1"    "2"    "3"    "4"    "5"]
     NumStates: 5

mc является объектом dtmc.

Отобразите матрицу перехода и проверьте, что сумма каждой строки равняется 1.

mc.P
ans = 5×5

    0.3259    0.0358    0.1149    0.3602    0.1632
    0.0298    0.1478    0.2409    0.2626    0.3189
    0.0162    0.3982    0.3469    0.1166    0.1221
    0.0944    0.2965    0.0102    0.4389    0.1600
    0.3439    0.2710    0.2938    0.0404    0.0509

sum(mc.P,2)
ans = 5×1

    1.0000
    1.0000
    1.0000
    1.0000
    1.0000

Постройте диграф Цепи Маркова. Укажите на вероятности перехода при помощи цветов обводки.

figure;
graphplot(mc,'ColorEdges',true);

Задайте структуру для случайной цепи Маркова

Этот пример показывает, как задать определенные неосуществимые переходы и случайным образом распределить других в матрице перехода для Цепи Маркова.

Создайте Цепь Маркова с шестью состояниями из случайной матрицы перехода. Постройте его диграф и укажите на вероятности перехода при помощи цветов обводки.

rng(1); % For reproducibility
numStates = 6;
mc1 = mcmix(numStates);

figure;
graphplot(mc1,'ColorEdges',true)

mcmix производит Цепь Маркова, таким образом, что все состояния являются персистентными, и все состояния достижимы от любого другого состояния.

Создайте другую Цепь Маркова с шестью состояниями, но без любых постоянных состояний и с 12 другими неосуществимыми переходами в случайных местоположениях в матрице перехода.

Fix = ones(numStates) - eye(numStates);
Fix(Fix == 1) = NaN;
zeros = 12;
mc2 = mcmix(numStates,'Zeros',zeros,'Fix',Fix);

Отобразите матрицу перехода mc2. Постройте диграф mc2 и укажите на вероятности перехода при помощи цветов обводки.

mc2.P
ans = 6×6

         0    0.4845         0    0.0344         0    0.4811
    0.5107         0    0.0791         0         0    0.4102
    0.1397    0.2701         0    0.2954    0.2948         0
    0.4767    0.5233         0         0         0         0
    0.3710         0    0.5550         0         0    0.0740
    0.0179    0.1947    0.7874         0         0         0

figure;
graphplot(mc2,'ColorEdges',true)

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

Объекты

Функции

Похожие темы