В этом примере показано, как визуализировать структуру и эволюцию модели Марковской цепи с помощью dtmc
Функции построения графика. Рассмотрим четырехгосударственную марковскую цепь, которая моделирует динамику реального валового внутреннего продукта (ВВП) в Create Markov Chain из Stochastic Transition Matrix.
Создайте модель марковской цепи для реального ВВП. Задайте имена состояний.
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]; stateNames = ["Regime 1" "Regime 2" "Regime 3" "Regime 4"]; mc = dtmc(P,'StateNames',stateNames);
Один из способов визуализации марковской цепи - построить тепловую карту переходной матрицы.
figure; imagesc(P); colormap(jet); colorbar; axis square h = gca; h.XTick = 1:4; h.YTick = 1:4; title 'Transition Matrix Heatmap';
Ориентированный граф, или диграф, показывает состояния в цепи как узлы и показывает допустимые переходы между состояниями как ориентированные ребра. Допустимый переход является переходом, вероятность возникновения которого больше нуля.
Постройте график по умолчанию для марковской цепи.
figure; graphplot(mc);
Сравните вероятности перехода путем определения цветов ребра на основе вероятности перехода.
figure;
graphplot(mc,'ColorEdges',true);
Идентифицируйте повторяющиеся и переходные состояния путем определения цветов и маркеров узлов на основе типа состояния. Верните указатель на график.
figure; h = graphplot(mc,'ColorEdges',true,'ColorNodes',true);
Низкие средние состояния являются переходными и в конечном счете переходят к периодическим высоким средним состояниям.
Размер шрифта по умолчанию для меток узлов составляет 8 точек. Уменьшите размер шрифта до 7 точек.
h.NodeFontSize = 7;
The asymptotics
функция возвращает время смешения марковской цепи. Однако, но hitprob
и hittime
функции позволяют вам визуализировать микширование путем построения графиков вероятностей столкновения и ожидаемого времени первого удара в диграф.
hitprob
вычисляет вероятность столкновения с заданным подмножеством целевых состояний, начиная с каждого состояния в марковской цепи. Функция опционально отображает диграф марковской цепи с цветами узлов, представляющими вероятности столкновения.
Постройте график марковской цепи с цветами узлов, представляющими вероятности режима столкновения 1.
hitprob(mc,"Regime 1",'Graph',true);
Вероятность попадания режима 1 из режима 3 или 4 равна 0, потому что режимы 3 и 4 образуют поглощающий подкласс.
hittime
вычисляет ожидаемое первое время столкновения для заданного подмножества целевых состояний, начиная с каждого состояния в марковской цепи. Функция опционально отображает диграф марковской цепи с цветами узлов, представляющими время столкновения.
Постройте график марковской цепи с цветами узлов, представляющими ожидаемое первое время столкновения для целевого подкласса, который содержит режимы 3 и 4.
target = ["Regime 3" "Regime 4"]; hittime(mc,target,'Graph',true);
Начиная с режима 1, ожидаемое время первого столкновения для подкласса составляет 6 временных шагов.
На собственном графике показаны собственные значения на комплексной плоскости. eigplot
возвращает собственное значение определяет:
Perron-Frobenius eigenvalue, что гарантировано для неотрицательных матриц, с помощью жирной звездочки.
Спектральная погрешность, которая является площадью между радиусом с длиной, равной второй по величине собственное значение (SLEM), и радиусом с длиной 1. Спектральная погрешность определяет время смешения марковской цепи. Большие погрешности указывают на более быстрое смешивание, в то время как тонкие погрешности указывают на более медленное смешивание.
Постройте и верните собственные значения переходной матрицы на комплексной плоскости.
figure; eVals = eigplot(mc)
eVals = 4×1
0.8090
-0.3090
1.0000
-1.0000
Два собственных значений имеют модуль 1, что указывает на то, что марковская цепь имеет период 2.
График перераспределения графизирует перераспределения состояний от начального распределения. В частности, . distplot
графики перераспределения с использованием данных, сгенерированных redistribute
и объект марковской цепи. Можно построить график перераспределений как статическую тепловую карту или как анимированные гистограммы или диграфы.
Сгенерируйте 10-шаговое перераспределение из начального распределения .
numSteps = 10;
x0 = [0.5 0.5 0 0];
X = redistribute(mc,numSteps,'X0',x0);
Постройте график перераспределений как тепловой карты.
figure; distplot(mc,X);
Поскольку состояния 1 и 2 являются переходными, цепь Маркова в конечном счете концентрирует вероятность в состояниях 3 и 4. Кроме того, как предполагает собственное значение, состояния 3 и 4, по-видимому, имеют период 2.
Постройте график анимированной гистограммы. Установите частоту систем координат на одну секунду.
figure; distplot(mc,X,'Type','histogram','FrameRate',1);
График симуляции графиков случайных ходов по марковской цепи, начиная с конкретных начальных состояний. simplot
строит графики симуляции с использованием данных, сгенерированных simulate
и объект марковской цепи. Можно построить симуляцию как статическую тепловую карту, отображающую долю состояний, достигнутых на каждом шаге, тепловую карту реализованной переходной матрицы или анимированный диграф, показывающий реализованные переходы.
Сгенерируйте 100 десятиэтапных случайных ходов, где каждое состояние инициализирует ходьбу 25 раз.
x0 = [25 25 25 25];
X = simulate(mc,numSteps,'X0',x0);
Постройте график симуляции как тепловой карты, показывающей долю состояний, достигнутых на каждом шаге.
figure; simplot(mc,X);
Постройте тепловую карту реализованной матрицы перехода.
figure; simplot(mc,X,'Type','transition');
Реализованная матрица переходов выглядит подобной теоретической матрице переходов.