r - 在 R 中为马尔可夫模型创建转换矩阵

标签 r markov-chains

我需要有关马尔可夫链和数据预处理的主题的帮助。
假设我有以下矩阵随着时间的推移将个人与状态联系起来:

     ID Time1 Time2
1 14021     A     A
2 15031     B     A
3 16452     A     C

对于这个矩阵,我想获得状态转移矩阵:
因此,需要的是
  A  B  C
A 1  0  1
B 1  0  0
C 0  0  0

同样的事情,但现在由该状态的转换总数加权,即,
  A    B   C
A 0.5  0  0.5
B 1    0   0
C 0    0   0

(因为有两个从状态 A 离开的转换)。我知道 markovchain 包有一个功能
如果有一个序列,比如 AAABBAAABBCC,则这样做,但如果数据像我一样设置,则不会这样做。
理想情况下,直接程序会很棒,但如果有某种方法可以将数据转换为一组同样有效的序列。

有任何想法吗?

提前致谢

最佳答案

这是另一个 base R解决方案。

df <- data.frame(Time1 = c("A","B","A"), Time2 = c("A","A","C"), stringsAsFactors = FALSE)

myStates <- sort(unique(c(df$Time1, df$Time2)))
lenSt <- length(myStates)

currState <- match(df$Time1, myStates)
nextState <- match(df$Time2, myStates)
transMat <- matrix(0L, lenSt, lenSt)

transMat[cbind(currState, nextState)] <- 1L
transMat <- transMat/rowSums(transMat)
transMat[is.na(transMat)] <- 0

transMat
     [,1] [,2] [,3]
[1,]  0.5    0  0.5
[2,]  1.0    0  0.0
[3,]  0.0    0  0.0

关于r - 在 R 中为马尔可夫模型创建转换矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47837607/

相关文章:

r - 如何创建一个包含 20 多个条目的 Rcpp NumericVector?

r - 在 R 中组合两个列表

r - 如何使用 stringr 和 regex 转换字符串(更改、保留、提取),但有一些异常(exception)?

markov-chains - 使用马尔可夫链进行程序音乐生成

Java - 马尔可夫链文本生成器 - 解析文本文件

sha - 以可逆方式从大整数生成伪自然短语

python - 使用具有多个返回值和有序字典的多处理

r - 找到两个不同长度的向量之间的所有组合

r - 在 r 中进行非线性最小二乘拟合

markov-chains - "e"出现在概率后缀树序列中的哪个位置?