马尔可夫链在R

时间:2018-03-07 09:54:25

标签: r markov-chains markov stochastic stochastic-process

假设我们有一个十状态系统,其中观察可以以相同的概率进入十个状态中的任何一个状态的系统,并且也以相同的概率从给定状态移动到新状态(观察的新状态不是有条件的在其先前的状态和观察可以保持在其当前状态)。另外,个人可以在任何时间在任何给定的十个状态内“死亡”,包括其当前状态。究竟是如何在R中设置的,还是在R中甚至不可能?

1 个答案:

答案 0 :(得分:1)

这听起来像是一个分区建模问题。您可以使用SimInf包解决此问题:

library(SimInf)

定义10个隔间的名称:

compartments <- letters[1:10]

定义进入和退出的比率。在这种情况下,正如您所建议的那样,所有输入事件对所有隔间具有相同的速率:k1输入和k2退出。

enterexit <- unlist(lapply(compartments, function(x){
    c(paste0("@ -> k1 -> ", x), paste0(x, "-> k2*", x, " -> @"))
}))

定义隔间之间的过渡。所有都得到相同的速率k3。因此,个人可以以相同的概率在所有10个隔间内反弹:

transitions <- unlist(lapply(1:10, function(x){
    unlist(lapply(compartments[-x], function(y){
        paste0(compartments[x], "-> k3*", compartments[x], "->", y)
    }))
}))

现在定义隔间的初始状态。我要在所有十个隔间里放0;如果你愿意,你也可以添加一些人来开始:

u0 <-  data.frame(a = 0,
                  b = 0,
                  c = 0,
                  d = 0,
                  e = 0,
                  f = 0,
                  g = 0,
                  h = 0,
                  i = 0,
                  j = 0)

定义模型运行的时间步数:

tspan = 1:100

初始化模型:

model <- mparse(transitions = c(enterexit, transitions),
                compartments = compartments,
                k1 = 0.5,
                k2 = 0.5,
                k3 = 0.5)
model <- init(model, u0, tspan)

运行模型

ob <- run(model)

绘制

plot(ob, N = TRUE)

获取每个时间段中每个隔间中单位数量的数据框

df <- trajectory(ob)