0
私は20のプラスの列を持つデータフレームを持っています。これらの各列に対して、私は同じテストセットで評価する。データフレームをループして、同じテストセットで評価される各列のモデルを作成します
# Train-test splitting
smp_size <- floor(0.70 * nrow(x))
index <- sample(seq_len(nrow(x)),size = smp_size)
train <- x[index, ]
test <- x[-index, ]
for (i in 1:22) {
names(train)[names(train) == names(train[i])] <- 'variab'
names(test)[names(test) == names(test[i])] <- 'variab'
mod <- glm(Y ~ variab, family = binomial, data = train)
assign(paste0("val", sep = "_", letters[i]), as.numeric(performance(
prediction(predict(mod, newdata = test, type = "response"),test$Y),
measure = "auc")@y.values[[1]]))
}
これは機能しませんが、各列に「variab」という名前が割り当てられ、各列に同じモデルが実行されます。このループをデータフレームの各列に反復させるにはどうすればよいですか?
ありがとうございました! "警告メッセージ: 1:eval(ファミリ$初期化):非整数#二項式glmで成功しました! 2: 'newdata'は45を持っていました。行が見つかった変数には105行があります。 –
これはコマンド 'predict(object = mod、newdata = test、type =" response ")'から来ます。実際には何らかの理由で予測がテストを使用するのではなく、それ以外の明示的な議論にもかかわらずnewdata引数を訓練するように見えます。私はそれ以前に遭遇したことはありませんでしたが、私はそれを解決して投稿を編集します。 – Nate
更新された回答が問題を修正し、正しく動作します。ループのassign文は、元の 'performance()'や 'prediction()'関数を使用していないため、より良い結果が得られるように変更されています。データがおそらく実際にはバイナリデータなので、あなたの例では「成功していない成功」という警告を表示しないでください(貧弱なサンプルデータを選択しました)。 – Nate