Hoy, Digital Modeler le enseñará sobre la predicción de Markov, un algoritmo de predicción en modelado matemático.
Tabla de contenido
El significado del modelo.
El método de predicción de Markov es un método de predicción de probabilidad sobre la ocurrencia de eventos. Es un método de predicción que predice cambios en momentos (o períodos) futuros en función del estado actual de un evento. El método de predicción de Markov es uno de los métodos de predicción importantes en la investigación de predicción geográfica.
1. Estado
Se refiere a un resultado determinado de algo que sucede en un momento (o período) determinado.
2.Proceso de transferencia estatal
El desarrollo de los acontecimientos y la transformación de un estado a otro se denomina transición de estado.
3. Proceso de Markov
En el proceso de desarrollo de eventos, si cada transición de estado solo está relacionada con el estado del momento anterior y no tiene nada que ver con el estado pasado, o el proceso de transición de estado no tiene efectos secundarios, entonces dicho proceso de transición de estado se llama Proceso de Markov.
4. Probabilidad de transición de estado
Se utiliza para describir la posibilidad de pasar de un determinado estado a otros estados en el siguiente momento durante el desarrollo y cambio de eventos.
Para encontrar cada uno, generalmente se utiliza para el cálculo la idea de probabilidad de aproximación de frecuencia.
5. Matriz de probabilidad de transición de estado
Supongamos que el proceso de desarrollo de un determinado evento tiene n estados posibles, a saber, E1, E2,..., En. Descrito como la probabilidad de transición del estado Ei al estado Ej.
Entonces matriz
Analisis de CASO
Pregunta 1: Consideremos tres estados de cambios en las cosechas agrícolas en una determinada zona, a saber, "cosecha abundante", "cosecha plana" y "cosecha pobre". Registre E1 como el estado de "buena cosecha", E2 como el estado de "cosecha plana" y E3 como el estado de "mala cosecha". La tabla muestra los cambios de estado de las cosechas agrícolas en la región de 1975 a 2014. Intente calcular la matriz de probabilidad de transición estatal de los cambios en las cosechas agrícolas en la región.
Registre el estado de la cosecha agrícola en 2014 en el Ejemplo 1 como =[0,1,0] (porque 2014 estuvo en un estado de "cosecha plana"), sustituya la matriz de probabilidad de transición de estado en la fórmula recursiva y encuentre las posibles consecuencias a partir de 2015. al 2025. probabilidades de varios estados.
> library(markovchain)
> library(readxl)
> library(tidyverse)
> library(expm)
> library(diagram)
> setwd("D:/code")
> tb456=read_xlsx('markov.xlsx') %>%
+ mutate(state1=lag(state))
> #交叉统计,变量state1转为state的个数
> tss= table(tb456[-1,]$state1,tb456[-1,]$state)
> #返回交叉表的频率,即状态转移概率矩阵
> tmA=prop.table(tss,1)
> tmA
E1 E2 E3
E1 0.2000000 0.4666667 0.3333333
E2 0.5384615 0.1538462 0.3076923
E3 0.3636364 0.4545455 0.1818182
> #可视化
> plotmat(tmA,pos = c(1,2),
+ lwd = 1, box.lwd = 2,
+ cex.txt = 0.8,
+ box.size = 0.1,
+ box.type = "circle",
+ box.prop = 0.5,
+ box.col = "light blue",
+ arr.length=.1,
+ arr.width=.1,
+ self.cex = .6,
+ self.shifty = -.01,
+ self.shiftx = .15,
+ main = "Markov Chain")
> #初始状态
> inital=matrix(c(0,1,0),nrow=1, byrow=TRUE)
> #预测下一年
> fc15=inital %*% tmA
> #预测下两年
> fc16=inital %*% tmA%*% tmA
> #预测第三年,tmA%^% 3相当于tmA%*% tmA%*%tmA
> fc17=inital %*% (tmA%^% 3)
> #要进行多年预测,因此编写一个函数
> myfunction=function(n){
+ inital %*% (tmA%^% n)
+ }
> mats=matrix(data = NA,nrow = 11,ncol = 3) %>%
+ data.frame()
> #预测2015-2025年,共11年,用一个dataframe来进行结果存储
> for (i in 1:11) {
+ mats[i,]=myfunction(i)
+ }
> mats$year=seq(2015,2025)
> colnames(mats)=c('E1','E2',"E3",'year')
> mats
E1 E2 E3 year
1 0.5384615 0.1538462 0.3076923 2015
2 0.3024207 0.4148108 0.2827685 2016
3 0.3866687 0.3334778 0.2798534 2017
4 0.3586636 0.3589558 0.2823806 2018
5 0.3677005 0.3509551 0.2813444 2019
6 0.3648230 0.3534705 0.2817065 2020
7 0.3657336 0.3526792 0.2815872 2021
8 0.3654463 0.3529282 0.2816256 2022
9 0.3655368 0.3528498 0.2816134 2023
10 0.3655083 0.3528745 0.2816172 2024
11 0.3655173 0.3528667 0.2816160 2025
> #-------利用markovchain包中的函数快速实现-------------
> #返回概率转移矩阵
> Ma=createSequenceMatrix(tb456$state,toRowProbs = T)
> #定义一个markov对象
> dtmcA <- new("markovchain",transitionMatrix=Ma,
+ states=c('E1','E2',"E3"),
+ name="MarkovChain A")
> #可视化
> plot(dtmcA)
> #定义一个dataframe存储结果,结果与mats相同
> mats1=matrix(data = NA,nrow = 11,ncol = 3) %>%
+ data.frame()
>
> for (i in 1:11) {
+ mats1[i,]=inital*(dtmcA^i)
+ }
> #终极状态概率
> steadyStates(dtmcA)
Resultados finales:
E1 E2 E3
[1,] 0.3655151 0.3528686 0.2816163