Algorithmes couramment utilisés pour la modélisation mathématique : prédiction de Markov

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

Analyse de cas


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

Je suppose que tu aimes

Origine blog.csdn.net/zzzzzzzxxaaa/article/details/126226976
conseillé
Classement