2011-11-06 46 views
12

我想在R中做一個簡單的一階馬爾可夫鏈。我知道有像MCMC這樣的軟件包,但找不到能以圖形方式顯示的軟件包。這甚至有可能嗎?如果給定一個轉換矩陣和一個初始狀態,可以很好地看到馬爾可夫鏈中的路徑(也許我必須手動完成這個操作)。R中的簡單馬爾可夫鏈(可視化)

謝謝。

+0

我不熟悉這方面的包,但如果你不能找到你喜歡的罐頭繪圖命令,你總是可以自己提取矩陣和繪製出來:http://stackoverflow.com/questions/5453336/r-plot-correlation-matrix-into-a-graph –

+0

謝謝。這是另一個想法,如果沒有這樣的東西存在:)。 – user1028531

+0

稍微澄清一點或者你想要的東西的一個粗略例子會有幫助:下面的答案都在地圖上,因爲人們以不同的方式解釋你的問題。 –

回答

10

這顯示瞭如何將隨機轉換矩陣應用到特定的起始載體: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)))) 

你可以看到它達到平衡: enter image description here

+0

我得到'錯誤:意外'['in'[「 執行停止 ' –

+0

我很抱歉聽到這個消息。代碼仍然運行正確的輸出在R 3.1.2 –

+0

嗯......似乎在Rstudio中工作(雖然它也打印'錯誤:意外'['在'[「'),但不是當我執行它作爲Rscript通過bash。你有什麼想法,爲什麼? –

2

您可以使用markovchain R軟件包,模擬離散時間馬爾可夫鏈,幷包含基於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)