再現可能な例がなければ言いにくいですが、正しい式を書いていないと思います。これはあなたのために働くはずです
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 サブセットを使用しないため、結果は正しくありません。