2011-11-06 22 views
12

me gustaría hacer una cadena de markov de primer orden simple en R. Sé que hay paquetes como MCMC, pero no pude encontrar uno para mostrarlo gráficamente. ¿Esto es posible? Sería bueno si se le diera una matriz de transición y un estado inicial, uno puede ver visualmente el camino a través de la cadena de markov (tal vez tengo que hacer esto a mano ...).Cadena de Markov simple en R (visualización)

Gracias.

+0

No estoy familiarizado con los paquetes en esta área, pero si usted no puede encontrar un comando de trazado en lata te gusta, siempre se puede extraer de las matrices de sí mismo y trazarlos: http://stackoverflow.com/questions/5453336/r-plot-correlation-matrix-into-a-graph –

+0

gracias. esa sería otra idea en caso de que no exista algo así :) – user1028531

+0

un poco más de aclaración o un ejemplo crudo de lo que quiere sería útil: las respuestas a continuación están en todo el mapa porque las personas interpretan su pregunta de diferentes maneras. –

Respuesta

10

Esto muestra cómo aplicar una matriz de transición al azar a un vector de partida en particular: 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)))) 

se puede ver que se acerca equilibrio: enter image description here

+0

Me sale 'Error: inesperado '[' en" [" Ejecución detenida ' –

+0

Lamento escuchar eso. El código todavía se ejecuta con exactamente esa salida en R 3.1.2 –

+0

Hmm ... parece funcionar en Rstudio (aunque también imprime 'Error: inesperado '[' en" ["'), pero no cuando lo ejecuto como Rscript a través de bash. ¿Tienes alguna idea de por qué? –

2

Puede usar el paquete markovchain R, que modela las Cadenas de Markov de Tiempo Discreto y contiene un recurso de trazado basado en el paquete 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)