计算 R 中的转移矩阵(马尔可夫)

机器算法验证 r 马尔科夫过程
2022-02-09 20:19:25

R(内置函数)中是否有一种方法可以根据一组观察结果计算马尔可夫链的转移矩阵?

例如,取如下数据集并计算一阶转移矩阵?

dat<-data.frame(replicate(20,sample(c("A", "B", "C","D"), size = 100, replace=TRUE)))
2个回答

我刚刚上传了一个markovchain基于 S4 编程风格的新 R 包。除了处理 S4 马尔可夫链对象的各种方法外,它还包含一个函数来适应来自状态序列的马尔可夫链。看一下:

library(markovchain) 
sequence <- c("a", "b", "a", "a", "a", "a", "b", "a", "b", "a", 
              "b", "a", "a", "b", "b", "b", "a")
mcFit <- markovchainFit(data=sequence)

它可以提供帮助。

我没有立即意识到“内置”函数(例如,inbase或类似函数),但我们可以在几行代码中非常轻松有效地做到这一点。

这是一个将矩阵(不是数据帧)作为输入的函数,并生成转换计数 ( prob=FALSE) 或默认情况下( prob=TRUE) 估计的转换概率。

# Function to calculate first-order Markov transition matrix.
# Each *row* corresponds to a single run of the Markov chain
trans.matrix <- function(X, prob=T)
{
    tt <- table( c(X[,-ncol(X)]), c(X[,-1]) )
    if(prob) tt <- tt / rowSums(tt)
    tt
}

如果您需要在数据框上调用它,您总是可以这样做

trans.matrix(as.matrix(dat))

如果您正在寻找一些第三方包,那么RseekR 搜索站点可能会提供额外的资源。