Матрица переходов состояний P характеризует дискретное время, однородное по времени марковскую цепь. Для получения дополнительной информации о поддерживаемых формах P смотрите Дискретную цепь Маркова Object Framework Overview. Если у вас есть теоретическая или эмпирическая матрица переходов, создайте объект модели марковской цепи с помощью dtmc
. В противном случае можно создать марковскую цепь из случайным образом сгенерированной матрицы перехода заданной структуры, такой как количество недопустимых переходов, при помощи mcmix
.
Этот пример показывает, как создать объект марковской цепи для моделирования гипотетического экономического цикла с помощью стохастической матрицы перехода.
Предположим, что динамическое поведение реального валового внутреннего продукта (ВВП) США переключается между четырьмя моделями:
Режим 1: Авторегрессивная модель с низкой средней и низкой волатильностью
Режим 2: Авторегрессивная модель с низкой средней и высокой волатильностью
Режим 3: Авторегрессивная модель с высокой средней и низкой волатильностью
Режим 4: Авторегрессивная модель с высокой средней и высокой волатильностью
Рассмотрим эту правую стохастическую матрицу перехода, содержащую вероятности переходов состояний между временными шагами t и t + 1, для всех t.
Для примера, означает вероятность перехода реального ВВП от режима 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
.
Этот пример показывает, как создать объект марковской цепи из правой-стохастической матрицы перехода, которая генерируется случайным образом. Такая марковская цепь удобна для исследования и проверки.
Создайте случайный объект цепи Маркова, содержащий пять произвольных состояний.
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)