如何使用 Markov Chain模型生成转换矩阵和预测下一个Events
?
我的数据格式如下dt
v1<-c(1,1,1,1,1,2,2,2,3,3,3,3,3,3,3)
v2<-c("Jan","Jan","Jan","Feb","Feb","Jan","Jan","Feb","Jan","Jan","Feb","Feb","Feb","Feb","Feb")
v3<-c("A1","E1","F1","B1","A1","E1","B1","C1","B1","D1","E1","A1","B1","C1","F1")
dt <- data.table(emp_id=v1,month=v2,work=v3)
temp1 <- dt[,.(list(work)),.(emp_id,month)]
head(temp1)
temp2 <- temp1[,.(list(V1)),.(emp_id)]
head(temp2)
temp2[,V1 := lapply(V1, unlist, use.names = F)]
dt <- setnames(temp2,"V1","Events")
答案 0 :(得分:2)
这个document中描述了一个名为markovchain
的R包,它具有将马尔可夫链拟合到给定序列(称为markovchainFit
的函数)的函数,以及一个用于计算预测的函数。经过训练的马尔可夫链(称为predict
)。
编辑:关于另一个我觉得不准确的答案我在这里添加了一些元素给我的初步答案。
通常,马尔可夫链估计或学习是通过最大似然(ML),最大后验(MAP)方法或其他技术(例如自举)完成的。这些方法可以例如处理这样的情况,其中可用序列未达到马尔可夫链的一些现有状态,而在转移矩阵中没有给出它们0概率。这些是任何马尔可夫模型的经典方法(马尔可夫链,隐马尔可夫模型,......)
答案 1 :(得分:0)
对于转换矩阵,您所要做的就是创建状态的方阵,遍历所有观察到的序列,计算转换次数并将每行除以行和。对于单个序列sequence
,例如
# Quadratic matrix of states
states <- unique(sequence)
mat <- matrix(data = 0,
nrow = length(states),
ncol = length(states),
dimnames = list(states, states))
# Calculate transition probabilities
for(i in 2:length(sequence)) {
mat[sequence[i - 1], sequence[i]] <- mat[sequence[i - 1], sequence[i]] + 1
}
mat <- mat /rowSums(mat)
最有可能的下一个状态显然是你上一个状态的转换矩阵行中值最高的状态。