0

I have been trying to use Markov Chain to improve my model and get trouble when computing transition matrix. It appears missing values. Someone know why my code is wrong? Many thanks

I already defined all the variables to be 0 at first. mresiduals is residuals of my model. len is the length of vector(residuals).

Error message is: Error in if (mresiduals[ele + 1] < lim5) { : missing value where TRUE/FALSE needed

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
    }
  }
}
June Choo
  • 13
  • 3
  • Hi,debug message shows it is on line 5, but I checked this part. There is if, else if, and else. Not sure which part is missing or where I got NA. I have add the message on the question. – June Choo Aug 20 '16 at 07:05
  • Are you saying when ele loop to the last element in mresiduals, ele+1 will not work? – June Choo Aug 20 '16 at 09:36
  • I tried adding if (ele+1>len){break } else and it works. thanks a lot!!!! – June Choo Aug 20 '16 at 09:40

1 Answers1

0

When R finds NA during its execution and try to compare that with some other element results in this error. In current case mresiduals is of length len so in line 5 mresiduals[ele + 1] when ele loop reaches len; ele+1 becomes len+1 outside the boundary of mresiduals and hence the error.

abhiieor
  • 3,132
  • 4
  • 30
  • 47