2

CVlm私のデータセットのパッケージを適用して機能するように関数を取得しようとしていDAAGます: fit (6 つの変数を持つ 27 のエントリ (行) があります。R で次の式を使用します。

CrossVal<-CVlm(df=fit,m=3,
form.lm=formula(fit$X1~fit$X2 + fit$X3 + fit$X4 + fit$X5 + fit$X6))

m=1for m を 1 とは異なるもの (例: 上記の 3) で使用すると、エラー メッセージが表示されます。

Error in `[<-.data.frame`(`*tmp*`, rows.out, "cvpred", value = c(228.541323416399,  : 
  replacement has 27 rows, data has 9
In addition: Advarselsbesked:
'newdata' had 9 rows but variable(s) found have 27 rows 

履歴書を適切に機能させるための助けをいただければ幸いです よろしくお願いします

4

1 に答える 1

4

再現可能な例がなければ言いにくいですが、正しい式を書いていないと思います。これはあなたのために働くはずです

 CrossVal<-CVlm(df=fit,m=3,
                form.lm= formula(X1 ~ X2 + X3 + X4 + X5 + X6))

たとえば、次のhouspricesデータを使用しDAAGてエラーを再現できます。

 CVlm(df = houseprices, form.lm =
        formula(houseprices$sale.price ~ houseprices$area), m=2)
Error in `[<-.data.frame`(`*tmp*`, rows.out, "cvpred", value = c(201.067581902091,  : 
  replacement has 15 rows, data has 7

しかし、これはうまくいきます:

CVlm(df = houseprices, form.lm = formula(sale.price ~ area), m=2)
Analysis of Variance Table

Response: sale.price
          Df Sum Sq Mean Sq F value Pr(>F)  
area       1  18566   18566       8  0.014 *

m =1 が機能し、m が 1 と異なる理由を編集します。

CVlmエラーが発生したコードの一部を次に示します。

subs.lm <- lm(form, data = df[rows.in, ])
df[rows.out, "cvpred"] <- predict(subs.lm, newdata = df[rows.out, 

27 行で 9 行の df を設定しようとするため、エラーが発生します。]))

Error in `[<-.data.frame`(`*tmp*`, rows.out, "cvpred", value = c(228.541323416399,  : 
  replacement has 27 rows, data has 9

実際predictに効果側で動作します。newdataオブジェクトを使用しませんが、元の data.frame を使用します。$これは、式を使用して与えるためであり、これが警告に出力されるものです。

In addition: Advarselsbesked:
'newdata' had 9 rows but variable(s) found have 27 rows 

m=1 の場合、newdata には元のデータ セットと同じ数の行があるため、機能します。もちろん、元のサブセットの順列である newdata サブセットを使用しないため、結果は正しくありません。

于 2013-03-24T13:45:08.240 に答える