在R中的简单马尔可夫链(可视化)

12
我想在R中进行简单的一阶马尔可夫链。我知道有类似MCMC的软件包,但找不到一个可以以图形方式显示的软件包。这是否可能?如果给定一个转移矩阵和一个初始状态,能否通过可视化看到马尔可夫链中的路径(也许我得手动做...)。

谢谢。


我不熟悉这个领域的软件包,但是如果你找不到一个合适的绘图命令,你总可以提取矩阵并自己绘制它们:https://dev59.com/gW035IYBdhLWcg3wYe8F - Ari B. Friedman
谢谢。如果不存在类似的东西,那将是另一个想法 :)。 - user1028531
更多的澄清或一个简单的例子会很有帮助:下面的答案都是千差万别的,因为人们对你的问题有不同的解释。 - Ben Bolker
4个回答

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) ) ) )

您可以看到它正在趋于平衡状态: 在此输入图片描述

我收到了 `Error: unexpected '[' in " [" 的错误信息 程序已停止执行 - Martin Thoma
很抱歉听到这个消息。在R 3.1.2中,代码仍然以完全相同的输出运行。 - IRTFM
嗯...在RStudio上似乎可以工作(尽管它也会打印出“Error: unexpected '[' in "["”),但是通过bash执行R脚本时则不行。你有任何想法吗? - Martin Thoma
完全没有。看起来你有一个很好的问题可以在RStudio Q&A网页上提问。 - IRTFM

4

3
您可以使用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)

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接