R Markov链输出迭代

时间:2015-08-17 13:57:43

标签: r

我目前正在使用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.define初始状态和马尔可夫链

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]&lt; - mcHIV ^ sq1 [n]中的错误:   向量分配中的无效类型/长度(S4 / 0)**

我怎么处理这个?

2 个答案:

答案 0 :(得分:1)

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

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]]

仍可访问

答案 1 :(得分:0)

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

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