1. ホーム
  2. r

[解決済み] エラーです。ロジスティック回帰でcaret()を使用する場合、`x`の列名を使用してください。

2022-02-16 03:53:06

質問

caretパッケージを使ってロジスティック回帰モデルを構築したい。

これは私のコードです。

library(caret)
df <- data.frame(response = sample(0:1, 200, replace=TRUE),  predictor = rnorm(200,10,45)) 

outcomeName <-"response"
predictors <- names(df)[!(names(df) %in% outcomeName)]
index <- createDataPartition(df$response, p=0.75, list=FALSE)
trainSet <- df[ index,]
testSet <- df[-index,]

model_glm <- train(trainSet[,outcomeName], trainSet[,predictors], method='glm', family="binomial", data = trainSet)

エラーが表示される Error: Please use column names for x .

を置き換えると、同じエラーが発生します。 trainSet[,predictors] をカラム名 predictors .

解決方法は?

残念ながらRは、以下のように1つの列だけをサブセットする場合、厄介な動作をします。 df[,1] に変更することができます。 vector 予測変数は1つだけなので、この機能に遭遇しました。 結果を data.frame のどちらかによって

trainSet[,predictors, drop = FALSE]

または

trainSet[predictors]

ところで、このコードには、さらに2つの問題があります。

  1. 第一引数は、response ではなく predictors であるべきです。
  2. によるロジスティック回帰の場合 caret の場合、応答は factor

完全なコードであること。

library(caret)
df <- data.frame(response = sample(0:1, 200, replace=TRUE),  
                 predictor = rnorm(200,10,45)) 

df$response <- as.factor(df$response)

outcomeName <-"response"
predictors <- names(df)[!(names(df) %in% outcomeName)]
index <- createDataPartition(df$response, p=0.75, list=FALSE)
trainSet <- df[ index,]
testSet <- df[-index,]

model_glm <- train(trainSet[predictors], trainSet[[outcomeName]], method='glm', family="binomial", data = trainSet)

*変更 trainSet[,outcomeName] から trainSet[[outcomeName]] への変換をより明示的に行うことができます。 vector