马尔可夫链中需要 TRUE/FALSE 的缺失值

missing value where TRUE/FALSE needed in Markov-Chain

我一直在尝试使用马尔可夫链来改进我的模型,但在计算转移矩阵时遇到了麻烦。它似乎缺少值。有人知道为什么我的代码是错误的吗?非常感谢

我一开始就定义了所有的变量为0。 mresiduals 是我的模型的残差。 len 是向量(残差)的长度。

错误信息是: if (mresiduals[ele + 1] < lim5) { 错误: TRUE/FALSE 需要

的缺失值
for (ele in 1:len) {
  if (mresiduals[ele] < lim5)
  {
    p1 = p1 + 1
    if (mresiduals[ele + 1] < lim5)
    {
      p1I = p1I + 1
    } else if (mresiduals[ele + 1] > lim5 & mresiduals[ele + 1] < lim4)
    {
      p1II = p1II + 1
    } else if (mresiduals[ele + 1] > lim4 & mresiduals[ele + 1] < lim3)
    {
      p1III = p1III + 1
    } else if (mresiduals[ele + 1] > lim3 & mresiduals[ele + 1] < lim2)
    {
      p1IV = p1IV + 1
    } else{
      p1V = p1V + 1
    }
  } else if (ele > lim5 & ele < lim4)
  {
    p2 = p2 + 1
    if (mresiduals[ele + 1] < lim5)
    {
      p2I = p2I + 1
    } else if (mresiduals[ele + 1] > lim5 & mresiduals[ele + 1] < lim4)
    {
      p2II = p2II + 1
    } else if (mresiduals[ele + 1] > lim4 & mresiduals[ele + 1] < lim3)
    {
      p2III = p2III + 1
    } else if (mresiduals[ele + 1] > lim3 & mresiduals[ele + 1] < lim2)
    {
      p2IV = p2IV + 1
    } else {
      p2V = p2V + 1
    }
  } else if (ele > lim4 & ele < lim3)
  {
    p3 = p3 + 1
    if (mresiduals[ele + 1] < lim5)
    {
      p3I = p3I + 1
    } else if (mresiduals[ele + 1] > lim5 & mresiduals[ele + 1] < lim4)
    {
      p3II = p3II + 1
    } else if (mresiduals[ele + 1] > lim4 & mresiduals[ele + 1] < lim3)
    {
      p3III = p3III + 1
    } else if (mresiduals[ele + 1] > lim3 & mresiduals[ele + 1] < lim2)
    {
      p3IV = p3IV + 1
    } else{
      p3V = p3V + 1
    }
  } else if (ele > lim4 & ele < lim3)
  {
    p4 = p4 + 1
    if (mresiduals[ele + 1] < lim5)
    {
      p4I = p4I + 1
    } else if (mresiduals[ele + 1] > lim5 & mresiduals[ele + 1] < lim4)
    {
      p4II = p4II + 1
    } else if (mresiduals[ele + 1] > lim4 & mresiduals[ele + 1] < lim3)
    {
      p4III = p4III + 1
    } else if (mresiduals[ele + 1] > lim3 & mresiduals[ele + 1] < lim2)
    {
      p4IV = p4IV + 1
    } else{
      p4V = p4V + 1
    }
  } else{
    p5 = p5 + 1
    if (mresiduals[ele + 1] < lim5)
    {
      p5I = p5I + 1
    } else if (mresiduals[ele + 1] > lim5 & mresiduals[ele + 1] < lim4)
    {
      p5II = p5II + 1
    } else if (mresiduals[ele + 1] > lim4 & mresiduals[ele + 1] < lim3)
    {
      p5III = p5III + 1
    } else if (mresiduals[ele + 1] > lim3 & mresiduals[ele + 1] < lim2)
    {
      p5IV = p5IV + 1
    } else{
      p5V = p5V + 1
    }
  }
}

当 R 在其执行过程中发现 NA 并尝试将其与其他元素进行比较时会导致此错误。在当前情况下 mresiduals 的长度为 len 因此在第 5 行 mresiduals[ele + 1]ele 循环到达 len 时; ele+1 变为 len+1mresiduals 的边界之外,因此出现错误。