R中的马尔可夫链
Markov chain in R
假设我们有一个十状态系统,其中一个观察值可以以相同的概率从十个状态中的任何一个进入系统,并以相同的概率从给定状态移动到一个新状态(观察值的新状态是' t 以其先前的状态为条件,观察可以保持在当前状态)。此外,个人可以随时 "die" 在给定的十个州中的任何一个州内,包括其当前状态。这究竟是如何在 R 中设置的,或者这在 R 中是不可能的?
这听起来像是一个分区建模问题。你可以用 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)
假设我们有一个十状态系统,其中一个观察值可以以相同的概率从十个状态中的任何一个进入系统,并以相同的概率从给定状态移动到一个新状态(观察值的新状态是' t 以其先前的状态为条件,观察可以保持在当前状态)。此外,个人可以随时 "die" 在给定的十个州中的任何一个州内,包括其当前状态。这究竟是如何在 R 中设置的,或者这在 R 中是不可能的?
这听起来像是一个分区建模问题。你可以用 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)