对于R中的循环错误

威廉·伯纳德

我试图通过使用不是为此而设计的代码来模拟马尔可夫链。我的for循环不正确,并且我继续收到错误消息,但是我一直跟踪括号和语法,但是我不能完全专注于该问题。马可夫链的矩阵是马可夫。我试图通过附加到向量a来绘制每个点,但是我不认为我的循环确实在执行我想要的操作。

我正在使用随机数生成器,以测试要移入和移出的状态。我知道可以使用更简单的方法来编写此代码,但是我想尝试使用此基本基础来正确编写代码。如果可以的话,请帮我弄清楚代码,找出正确嵌套循环的方法,我将不胜感激。

x是我的起点马氏链概率均匀分布

x1 <- runif(100, 1.0, 100)
markov <- matrix(c(.5,.3,.2,.4,.5,.1,.2,.4,.4),nrow=3)
m1 <- markov[1:3] 
m2 <- markov[4:6]
m3 <- markov[7:9]
y <- 2
x <- 1
a <- c(1)

while (y <= 100)
{
if(x==1) {
if(x1[y] < m1[1] * 100) {
x <- 1
} else if (x1[y] <= m1[2]*100 + m1[1] * 100 && x1[y] > m1[1] * 100) {
x <- 2
} else {
x <- 3
} 
a <- union(x,c(y))
} else if (x==2) {
if(x1[y] < m2[1] * 100) {
x <- 1
} else if (x1[y] <= m2[2]*100 + m2[1] * 100 && x1[y] > m2[1] * 100) {
x <- 2
} else {
x <- 3
} 
a <- union(x,c(y))
} else {
if(x1[y] < m3[1] * 100) {
x <- 1
} else if (x1[y] <= m3[2]*100 + m3[1] * 100 && x1[y] > m3[1] * 100) {
x <- 2
} else {
x <- 3
} 
a <- union(x,c(y))
y <- y + 1
}
}
plot(c(1:100),a)
迈克·怀斯

您的y <- y+1括号太多了。大多数时候都没有调用它。

我认为这是您想要的:

x1 <- runif(100, 1.0, 100)
markov <- matrix(c(.5,.3,.2,.4,.5,.1,.2,.4,.4),nrow=3)
m1 <- markov[1:3] 
m2 <- markov[4:6]
m3 <- markov[7:9]
y <- 2
x <- 1
a <- c(1)
aa <- c()

while (y <= 100)
{
  if(x==1) {
    if(x1[y] < m1[1] * 100) {
      x <- 1
    } else if (x1[y] <= m1[2]*100 + m1[1] * 100 && x1[y] > m1[1] * 100) {
      x <- 2
    } else {
      x <- 3
    } 
    a <- union(x,c(y))
  } else if (x==2) {
    if(x1[y] < m2[1] * 100) {
      x <- 1
    } else if (x1[y] <= m2[2]*100 + m2[1] * 100 && x1[y] > m2[1] * 100) {
      x <- 2
    } else {
      x <- 3
    } 
    a <- union(x,c(y))
  } else {
    if(x1[y] < m3[1] * 100) {
      x <- 1
    } else if (x1[y] <= m3[2]*100 + m3[1] * 100 && x1[y] > m3[1] * 100) {
      x <- 2
    } else {
      x <- 3
    } 
    a <- union(x,c(y))
  }
  aa <- c(aa,x)

  y <- y + 1
}
plot(aa)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章