马尔可夫链:可重复使用的R函数,以n步为单位显示状态值?

时间:2016-03-06 15:24:08

标签: r function arguments parameter-passing markov-chains

我有这个简单的马尔可夫链:

library(markovchain)
mcSIR <- new("markovchain", states=c("S","I","R"),
    transitionMatrix=matrix(data=c(0.9,0.1,0,0,0.8,0.2,0,0,1),
    byrow=TRUE, nrow=3), name="SIR")
is <- c(99,1,0) # initial States  

如何定义可重复使用的功能&#34; fvals &#34;,
返回(对于任何马尔可夫链),
一个数据帧,其状态值是n个时间步长?

电话会是这样的:

   fvals(mcSIR,is,5) # show state values for 5 timesteps

&#34; fvals&#34;的数据框输出 看起来像这样:
note :时间步长是左起第二个col,从零开始)。

1    timestep            S            I            R
2           0           99            1            0
3           1         89.1         10.7          0.2
4           2        80.19        17.47         2.34
5           3        72.17           22         5.83
6           4        64.95        24.81        10.23
7           5        58.46        26.35         15.2

原因:此功能可用于测试不同的MC,
每次都不重复每个R代码......

1 个答案:

答案 0 :(得分:1)

这个功能可以帮到你:

fvals<-function(mchain,initialstate,n) {
  names(initialstate)<-names(mchain)
  for (i in 0:n)
  {
    out<-initialstate*mchain^(i)
    cat(i," ",out,"\n")
  }
}
fvals(mcSIR,is,5)