【问题标题】:R Markov chain output iterationR马尔可夫链输出迭代
【发布时间】:2015-11-10 04:53:34
【问题描述】:

我目前正在使用 markovchain 包进行分析。

我有 (a,b,c,d) 状态,

我需要输出一个数据集,其中包含每次迭代时 a、b、c、d 的比例。我的代码是:

1.定义状态和转换概率

library(markovchain)
state<-c("a", "b","c","d");
tp<-matrix(data=c(0.721, 0.202,0.067,0.010,0,0.581,0.407,0.012,0,0,0.75,0.25,0,0,0,1),byrow=T, nrow=4, dimnames=list(state,state));

2.定义初始状态和马尔可夫链

s0<-c(1,0,0,0)
mcHIV<-new("markovchain", states=state,byrow=T,transitionMatrix=tp,name="HIV")

3. 做 20 次迭代我有问题!!

sq1<-seq(1,20)
s<-NULL

for (n in 1:20){s[n]<-mcHIV^sq1[n]};

s[n]

我该如何处理?

【问题讨论】:

    标签: r


    【解决方案1】:
    for (n in 1:20){s<-c(s,mcHIV^sq1[n])};
    

    您可以创建一个矩阵列表来存储所需的结果。

    【讨论】:

      【解决方案2】:

      由于输出是一个矩阵,你需要创建一个列表:

      s <- list()
      for (n in 1:20){s[[n]] <- mcHIV^sq1[n]};
      

      列表中的每个元素,s[[1]],s[[2]],...,s[[k]] 将引用迭代后转移矩阵的状态k

      以编程方式执行此操作的更好方法是使用lapply,它返回一个对象列表,在本例中为转换矩阵:

      iter <- 20
      s <- lapply(seq(iter), function(k) mcHIV^k)
      

      s[[1]]、s[[2]]、...、s[[k]] 仍可访问

      【讨论】:

      • 非常感谢!我还有一个问题:当我这样做时,例如s10
      • @SunSynergus s0 是一个向量,或者是一个维度为 1 x 4 的矩阵,所以当你乘以 mcHIV^10(一个 4 x 4 矩阵)时,结果是一个 (1 x 4) x (4 x 4) = (1 x 4) 矩阵,或者换句话说,一个向量。
      猜你喜欢
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多