2017-01-19 4 views
1

が生じキャレットパッケージにトレーニングモデル内のポリ(機能を使用すると、ここで私が実行しているコードです:データフレームエラー

library(caret) 
library(ISLR) 
data('Auto') 
cverror <- c() 
for(i in 1:5){ 
    train_control <- trainControl(method='LOOCV') 
    models <- train(mpg~poly(horsepower,i), data = Auto, trControl=train_control, method='glm') 
    cverror[i] <- (models$results$RMSE)^2 
} 

cverror 

私は何を達成しようとしていることのために)平均二乗誤差(MSEを計算することです私は線でコード行する必要はありませんので、私はエラーメッセージがあるループを使用して、異なる多項式のレベルは:?

Error in `[.data.frame`(data, , all.vars(Terms), drop = FALSE) : 
    undefined columns selected 

は、なぜ私はこのエラーが発生します私の研究仲間は、このコードは、その上に微細に実行されることを言いましたマシンは動作しますが、私のパーソナルコンピュータや作業用コンピュータでは動作しません。最新のRStudioを最新バージョンのすべてのパッケージがインストールされています。

次のコード行が正常に動作します:

train(mpg~poly(horsepower,2), data = Auto, trControl=train_control, method='glm') 

これは、(私は時に拡大しています)ISLRテキストのページ193分の192で見つかったチュートリアルとの関係です。

答えて

1

i <- 2の場合、その値は式に代入されません。式は、文字どおりmpg ~ poly(horsepower, i)です。

はこれを試してみてください:

library(caret) 
library(ISLR) 
data('Auto') 
cverror <- numeric(5) 
for(i in 1:5){ 
    train_control <- trainControl(method='LOOCV') 
    f <- bquote(mpg ~ poly(horsepower, .(i))) 
    models <- train(as.formula(f), data = Auto, trControl=train_control, method='glm') 
    cverror[i] <- (models$results$RMSE)^2 
} 

cverror 
#[1] 24.23151 19.24821 19.33498 19.42443 19.03321 

PS:より高度多項式オーバーフィッティングかなりの保証を。私は、2よりも高い、多分3の多項式をお勧めしません。通常、そのような場合に利用できるより良いモデルがあります。高次の多項式は「自然な」プロセスではまれです。

+0

「bquote」の機能は何ですか?私はこれまでにこの関数を使ったことがありません。ヘルプ文書(?bquote)はそれほど役に立ちませんでした。 –

+0

これは式を作成しますが、 '。()'で与えられた変数を囲む環境から取り出し、その値を式に置き換えます。 – Roland

+0

好きな場合は、代わりに 'sprintf'や' paste 'を使うこともできます。 – Roland