如何在R中使用markovchainFit获得马尔可夫链后识别状态转移概率?

时间:2014-01-22 02:41:37

标签: r markov-chains

我有一系列事件:

library(markovchain)
sequence<-c("LHR - BA","BOS - BA","BOS - ZE","IAD - ZE","BOS - BA","LHR - BA",
            "LGW - BA","TPA - BA","TPA - BA","LGW - BA","LHR - BA","BOS - BA",
            "BOS - ZE","BOS - ZE","BOS - BA","LHR - BA","LHR - BA","BOS - BA",
            "BOS - ZE","BOS - ZE","BOS - DL","ATL - DL","LHR - BA","BRU - BA")

使用此序列,我使用以下函数获得马尔可夫链:

sequenceMatr <- createSequenceMatrix(sequence, sanitize=FALSE)
mcFit        <- markovchainFit(data=sequence, method="mle")

考虑下一个状态是"LHR - BA";那么我如何以下列格式确定各州的概率分布:

           "LHR - BA", "BOS - ZE", "IAD - ZE", "BOS - BA", "LHR - BA", "LGW - BA", "TPA - BA"
"LHR - BA"     0.1   ,     0.2   ,    0.2    ,     0.3   ,     0.1   ,     0.1   ,     0.1

1 个答案:

答案 0 :(得分:1)

我发现你的问题有点难以理解,但这是我的解释。

  

考虑下一个状态是"LHR - BA";那么如何识别各州的概率分布

所以我读这个的方式,你知道在某个时间 t +1你的系统处于状态"LHR - BA"并且你想知道时间的分布概率 t 的。换句话说,您需要条件概率

P(S(t)=x | S(t+1)="LHR - BA")

根据Bayes' law,这个概率等于

P(S(t)=x) * P(S(t+1)="LHR - BA" | S(t)=x) / P(S(t+1)="LHR - BA")

为此,您需要对无条件分布进行一些估算。对于大的 t 和一个合理的(在这里不知道正确的术语)马尔可夫链你可以简单地采取(希望是唯一的)稳态在这里。通过这种解释,您可以直接将上述公式转换为R:

mcEst <- mcFit$estimate
mcSteady <- steadyStates(mcEst)
sapply(states(mcEst), function(x) transitionProbability(mcEst, x, "LHR - BA")*mcSteady[1,x]/mcSteady[1,"LHR - BA"])

但也许你想以更好的方式写这个,并为每个可能的S(t+1)而不仅仅是"LHR - BA"设置行。为此,您必须更直接地处理转换矩阵,而不是调用transitionProbability,因为该方法不适用于矢量化参数。

tm <- mcEst@transitionMatrix
if (mcEst@byrow) tm <- t(tm)
res <- tm * t(outer(mcSteady[1,], mcSteady[1,], "/"))

前两行获取转换矩阵,并确保行(第一个索引)是目标状态,列(第二个索引)是源状态。有关执行此类操作的已发布函数,请参阅getMethods("transitionProbability")。那么那时你已经

tm[i,j] = P(S(t+1)=i | S(t)=j)

然后你采取稳定状态,并做所有可能的组合。你得到了

outer(mcSteady[1,], mcSteady[1,], "/")[i,j] = mcSteady[1,i]/mcSteady[1,j]

这是错误的方式。所以你转置它并获得

t(outer(mcSteady[1,], mcSteady[1,], "/"))[i,j] = mcSteady[1,j]/mcSteady[1,i]

您乘以tm以获得最终结果:

res[i,j] = P(S(t+1)=i | S(t)=j) * P(S(t)=j) / P(S(t+1)=i)

该结果表的每一行将是给定后继状态的一个分布。包括你要求的那个:

> res["LHR - BA",]
  ATL - DL   BOS - BA   BOS - DL   BOS - ZE   BRU - BA   IAD - ZE   LGW - BA 
0.23379630 0.37037037 0.00000000 0.00000000 0.02083333 0.00000000 0.20833333 
  LHR - BA   TPA - BA 
0.16666667 0.00000000