【发布时间】:2019-04-10 16:42:39
【问题描述】:
其他问题
有another question询问如何建立二阶转移矩阵,但答案似乎没有产生二阶转移矩阵。
二阶转移矩阵和序列评分
让我们使用这个数据集:
set.seed(1)
dat<-data.frame(replicate(20,sample(c("A", "B", "C","D"), size = 100, replace=TRUE)))
构建二阶转换矩阵的最佳方法是什么,这样我就可以轻松地对遇到的新序列进行评分,如 here 所讨论的那样。例如,这样我就可以计算观察到AAABCAD 的概率。
对朱利叶斯·维诺拉的反应
set.seed(1)
mat <-data.frame(replicate(100,sample(c("AAA", "BBB", "CCC","DDD", "ABC", 'ABD'), size = 5, replace=TRUE)))
aux <- apply(mat, 2, function(col) rbind(paste0(head(col, -2), head(col[-1], -1)), col[-1:-2]))
aux <- data.frame(t(matrix(aux, nrow = 2)))
names(aux) <- c("From", "To")
head(aux, 3)
TM <- table(aux)
TM <- TM / rowSums(TM)
x <- as.character(unlist(mat[1,]))
transitions <- cbind(paste0(head(x, -2), head(x[-1], -1)), x[-1:-2])
prAA <- 1 / (4 * 4)
prAA * prod(TM[transitions])
当我运行此代码时,它给了我0 的概率,但是我计算概率的序列也用于构建转换矩阵(即 df 的第一行,此处为mat)。我想这不应该发生,因为序列是用来构建转换矩阵的,所以没有一个转换可以是零,对吧?
此外,当我将垫子创建更改为这一行时:
mat <-data.frame(replicate(10,sample(c("AAA", "BBB", "CCC","DDD", "ABC", 'ABD'), size = 5, replace=TRUE)))
会报错Error in [.default (TM, transitions) : subscript out of bounds
【问题讨论】:
-
另一个问题到底有什么问题?二阶转移矩阵应该是什么样的(即你怎么知道什么时候答案是正确的)?
-
@MrFlick 查看 whuber 对第一个答案的评论,并查看第二个答案以获取二阶转换矩阵的示例:stats.stackexchange.com/questions/147164/…
标签: r markov-chains