2016-03-06 1 views
1

J'ai ce simple chaîne de Markov:Chaîne de Markov: fonction R réutilisable pour afficher les valeurs d'état en n timesteps?

library(markovchain) 
mcSIR <- new("markovchain", states=c("S","I","R"), 
    transitionMatrix=matrix(data=c(0.9,0.1,0,0,0.8,0.2,0,0,1), 
    byrow=TRUE, nrow=3), name="SIR") 
is <- c(99,1,0) # initial States 

Comment définir un réutilisable fonction "fvals",
qui retourne (pour une chaîne de Markov),
une des données Cadre avec les valeurs d'état pour n timesteps?

L'appel serait comme ceci:

fvals(mcSIR,is,5) # show state values for 5 timesteps 

La sortie de trame de données de "fvals" ressemblerait à ceci:
(Note: pas de temps sont les 2e col de gauche et commencez à zéro).

1 timestep   S   I   R 
2   0   99   1   0 
3   1   89.1   10.7   0.2 
4   2  80.19  17.47   2.34 
5   3  72.17   22   5.83 
6   4  64.95  24.81  10.23 
7   5  58.46  26.35   15.2 

Raison: Cette fonction serait utile de tester différents MCs,
sans répéter le code R pour chacun, à chaque fois ...

Répondre

1

cette fonction pourrait vous aider:

fvals<-function(mchain,initialstate,n) { 
    names(initialstate)<-names(mchain) 
    for (i in 0:n) 
    { 
    out<-initialstate*mchain^(i) 
    cat(i," ",out,"\n") 
    } 
} 
fvals(mcSIR,is,5) 
+0

Merci pour la réponse simple et efficace, Giorgio! Ça marche. Q1) Comment convertir la sortie de fvals() en une trame de données "régulière"? Q2) Peut-être cette fonction utile et fréquemment utilisée (fvals) pourrait-elle être incorporée dans le paquetage "markovchain"? – user39150

+1

Salut, cela pourrait aider: https://qualityandinnovation.com/2015/12/08/a-discrete-time-markov-chain-dtmc-sir-model-in-r/ –