[英]R library for discrete Markov chain simulation
I am looking for something like the 'msm' package, but for discrete Markov chains.我正在寻找类似 'msm' 包的东西,但用于离散马尔可夫链。 For example, if I had a transition matrix defined as such例如,如果我有一个这样定义的转换矩阵
Pi <- matrix(c(1/3,1/3,1/3,
0,2/3,1/6,
2/3,0,1/2))
for states A,B,C.对于状态 A、B、C。 How can I simulate a Markov chain according to that transition matrix?如何根据该转移矩阵模拟马尔可夫链?
A while back I wrote a set of functions for simulation and estimation of Discrete Markov Chain probability matrices: http://www.feferraz.net/files/lista/DTMC.R .不久前,我编写了一组用于模拟和估计离散马尔可夫链概率矩阵的函数: http : //www.feferraz.net/files/lista/DTMC.R 。
Relevant code for what you're asking:您所问的相关代码:
simula <- function(trans,N) {
transita <- function(char,trans) {
sample(colnames(trans),1,prob=trans[char,])
}
sim <- character(N)
sim[1] <- sample(colnames(trans),1)
for (i in 2:N) {
sim[i] <- transita(sim[i-1],trans)
}
sim
}
#example
#Obs: works for N >= 2 only. For higher order matrices just define an
#appropriate mattrans
mattrans <- matrix(c(0.97,0.03,0.01,0.99),ncol=2,byrow=TRUE)
colnames(mattrans) <- c('0','1')
row.names(mattrans) <- c('0','1')
instancia <- simula(mattrans,255) # simulates 255 steps in the process
Argh , you found the solution whilst I was writing it up for you.啊,你在我为你写的时候找到了解决方案。 Here's a simple example that I came up with:这是我想出的一个简单示例:
run = function()
{
# The probability transition matrix
trans = matrix(c(1/3,1/3,1/3,
0,2/3,1/3,
2/3,0,1/3), ncol=3, byrow=TRUE);
# The state that we're starting in
state = ceiling(3 * runif(1, 0, 1));
cat("Starting state:", state, "\n");
# Make twenty steps through the markov chain
for (i in 1:20)
{
p = 0;
u = runif(1, 0, 1);
cat("> Dist:", paste(round(c(trans[state,]), 2)), "\n");
cat("> Prob:", u, "\n");
newState = state;
for (j in 1:ncol(trans))
{
p = p + trans[state, j];
if (p >= u)
{
newState = j;
break;
}
}
cat("*", state, "->", newState, "\n");
state = newState;
}
}
run();
Note that your probability transition matrix doesn't sum to 1 in each row, which it should do.请注意,您的概率转换矩阵在每行中的总和不会为 1,这是应该的。 My example has a slightly altered probability transition matrix which adheres to this rule.我的例子有一个稍微改变的概率转移矩阵,它符合这个规则。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.