2016-08-19 10 views
0

Markov Chainを使用してモデルを改善しようとしています。欠損値が表示されます。私のコードが間違っている理由を誰かが知っている?多くのありがとうMarkov-ChainでTRUE/FALSEが必要な値がありません

私はすべての変数を最初に0と定義しました。 mresidualsは私のモデルの残差です。 lenはベクトルの長さ(残差)です。

エラーメッセージは:IF(mresiduals [ELE + 1] < lim5)で エラー{式中、Rは、その実行中NAを見つけ、比較するとき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 
    } 
    } 
} 
+0

こんにちは、デバッグメッセージは、それが5行目であることを示していますが、この部分をチェックしました。 if、else if、elseがあります。どの部分が欠落しているかわからない。質問にメッセージを追加しました。 –

+0

あなたは、mresiduals、ele + 1の最後の要素へのeleループが機能しないと言っていますか? –

+0

if(ele + 1> len){break} elseを追加してみました。どうもありがとう!!!! –

答えて

0

を必要 欠損値他の要素があるとこのエラーが発生します。現在のケースでは、mresidualsは、長さがlenであるので、行5でmresiduals[ele + 1]eleループがlenに達したとき。 ele+1はとなり、境界外のmresidualsとなり、エラーとなる。

関連する問題