2011-11-06 9 views
12

Mi piacerebbe fare una semplice catena markov del primo ordine in R. So che ci sono pacchetti come MCMC, ma non è stato possibile trovarne uno per visualizzarlo graficamente. È possibile? Sarebbe bello se con una matrice di transizione e uno stato iniziale, si possa vedere visivamente il percorso attraverso la catena del markov (forse devo farlo a mano ...).Simple Markov Chain in R (visualizzazione)

Grazie.

+0

Non ho dimestichezza con i pacchetti in questo settore, ma se non riesci a trovare un comando in scatola tramando ti piace, si può sempre estrarre le matrici da soli e tracciare loro: http://stackoverflow.com/questions/5453336/r-plot-correlation-matrix-in-a-graph –

+0

grazie. questa sarebbe un'altra idea nel caso in cui non esistesse nulla del genere :). – user1028531

+0

un po 'più di chiarezza o un esempio grezzo di ciò che vuoi sarebbe utile: le risposte qui sotto sono tutte sulla mappa perché le persone sono interpretate in modo diverso. –

risposta

10

Questo mostra come applicare una matrice di transizione casuale per un particolare vettore di partenza: c (1,0,0,0):

set.seed(123) 
tmat <- matrix(rnorm(16)^2,ncol=4) 
    # need entries to be positive, could have used abs() 
tmat <- tmat/rowSums(tmat) # need the rows to sum to 1 
tmat 
      [,1]  [,2]  [,3]  [,4] 
[1,] 0.326123580 0.01735335 0.48977444 0.166748625 
[2,] 0.016529424 0.91768404 0.06196453 0.003822008 
[3,] 0.546050789 0.04774713 0.33676288 0.069439199 
[4,] 0.001008839 0.32476060 0.02627217 0.647958394 
require(expm) # for the %^% function 
matplot(t(  # need to transpose to get arguments to matplot correctly 
     sapply(1:20, function(x) matrix(c(1,0,0,0), ncol=4) %*% (tmat %^% x)))) 

Si può vedere che si avvicina equilibrio: enter image description here

+0

Ricevo 'Errore: imprevisto '[' in" [" Esecuzione arrestata ' –

+0

Mi dispiace. Il codice funziona ancora esattamente con quell'output in R 3.1.2 –

+0

Hmm ... sembra funzionare in Rstudio (anche se stampa 'Errore: imprevisto' ['in "[" '), ma non quando eseguo come Rscript via bash. Hai qualche idea del perché? –

2

È possibile utilizzare il pacchetto markovchain R, che modella le catene di Markov di tempo discreto e contiene una funzione di tracciatura basata sul pacchetto di igraph.

library(markovchain) #loading the package 
myMatr<-matrix(c(0,.2,.8,.1,.8,.1,.3,0,.7),byrow=TRUE,nrow = 3) #defining a transition matrix 
rownames(myMatr)<-colnames(myMatr)<-c("a","b","c") 
myMc<-as(myMatr, "markovchain") 
plot(myMc)