2011-11-06 18 views
12

Chciałbym zrobić prosty łańcuch Markowa pierwszego rzędu w R. Wiem, że istnieją pakiety, takie jak MCMC, ale nie można znaleźć, aby wyświetlić go graficznie. Czy to możliwe? Byłoby miło, gdybyśmy otrzymali matrycę przejściową i stan początkowy, można wizualnie zobaczyć ścieżkę przez łańcuch Markowa (być może muszę to zrobić ręcznie ...).Prosty łańcuch Markowa w R (wizualizacja)

Dzięki.

+0

nie jestem zaznajomiony z pakietów w tej dziedzinie, ale jeśli nie można znaleźć w puszkach kreślenia polecenia chcesz, zawsze można wyodrębnić matryc siebie i wykreślić je: http://stackoverflow.com/questions/5453336/r-plot-correlation-matrix-into-a-graph –

+0

dzięki. to byłby kolejny pomysł na wypadek, gdyby coś takiego nie istniało :). – user1028531

+0

trochę więcej wyjaśnień lub prosty przykład tego, co chcesz byłoby pomocne: poniższe odpowiedzi znajdują się na całej mapie, ponieważ ludzie są interpretowani na różne sposoby. –

Odpowiedz

10

To pokazuje, jak zastosować losowy macierzy przejścia do konkretnego wektora początkowego: 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)))) 

widać to zbliża się równowaga: enter image description here

+0

Otrzymuję komunikat "Błąd: nieoczekiwany" ["w" [" Wykonanie wstrzymane ' –

+0

Przykro mi to słyszeć. Kod nadal działa z dokładnie tym wyjściem w R 3.1.2 –

+0

Hmm ... wydaje się działać w Rstudio (chociaż wypisuje również "Błąd: nieoczekiwany" ["w" ["'), ale nie kiedy wykonuję go jako Rscript przez bash. Czy masz jakiś pomysł, dlaczego? –

2

Można użyć pakietu markovchain R, który modeluje dyskretne łańcuchy Markowa czasu i zawiera narzędzie do kreślenia oparte na pakiecie 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)