Aujourd'hui, Digital Modeler vous apprendra la prédiction de Markov, un algorithme de prédiction en modélisation mathématique.
Table des matières
La signification du modèle
La méthode de prédiction de Markov est une méthode de prédiction probabiliste de l’occurrence d’événements. Il s'agit d'une méthode de prédiction qui prédit les changements dans les moments (ou périodes) futurs en fonction de l'état actuel d'un événement. La méthode de prédiction Markov est l’une des méthodes de prédiction importantes dans la recherche en prévision géographique.
1. Statut
Il fait référence à un certain résultat de quelque chose qui se produit à un certain moment (ou période).
2. Processus de transfert d'État
Le développement des événements et la transformation d'un état à un autre est appelé transition d'état.
3. Processus de Markov
Dans le processus de développement des événements, si chaque transition d'état est uniquement liée à l'état du moment précédent et n'a rien à voir avec l'état passé, ou si le processus de transition d'état n'a pas de séquelles, alors un tel processus de transition d'état est appelé un Processus de Markov.
4. Probabilité de transition d'état
Il est utilisé pour décrire la possibilité de passer d'un certain état à d'autres états au moment suivant au cours du développement et du changement des événements.
Afin de trouver chacun d'eux, l'idée de probabilité d'approximation de fréquence est généralement utilisée pour le calcul.
5. Matrice de probabilité de transition d'état
Supposons que le processus de développement d'un certain événement ait n états possibles, à savoir E1, E2,..., En. Décrit comme la probabilité de transition d’état de l’état Ei à l’état Ej
Puis matrice
Analyse de cas
Question 1 : Considérons trois états de changements de récolte agricole dans une certaine zone, à savoir « récolte exceptionnelle », « récolte plate » et « mauvaise récolte ». Enregistrez E1 comme état de « bonne récolte », E2 comme état de « récolte plate » et E3 comme état de « mauvaise récolte ». Le tableau montre l'évolution de l'état des récoltes agricoles dans la région de 1975 à 2014. Essayez de calculer la matrice de probabilité de transition d'état des changements de récolte agricole dans la région.
Enregistrez l'état de la récolte agricole en 2014 dans l'exemple 1 sous la forme =[0,1,0] (car 2014 était dans un état de « récolte plate »), remplacez la matrice de probabilité de transition d'état dans la formule récursive et trouvez les conséquences possibles à partir de 2015. jusqu'en 2025. probabilités de divers états.
> 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)
Résultats finaux:
E1 E2 E3
[1,] 0.3655151 0.3528686 0.2816163