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