Algoritmos comúnmente utilizados para modelado matemático: predicción de Markov

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.

Analisis de CASO


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

Supongo que te gusta

Origin blog.csdn.net/zzzzzzzxxaaa/article/details/126226976
Recomendado
Clasificación