-1

假设我们有一个十状态系统,其中观察可以以相等的概率进入系统以十个状态中的任何一个状态,并以相同的概率从给定状态移动到新状态(观察的新状态不以它之前的状态为条件)状态和观察可以保持在其当前状态)。此外,一个人可以在任何给定的十个状态中的任何一个状态下“死亡”,包括其当前状态。这究竟是如何在 R 中设置的,或者这在 R 中甚至是不可能的?

4

1 回答 1

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)
于 2018-03-07T10:55:13.537 回答