Ошибка: пожалуйста, используйте имена столбцов для `x` при использовании caret () для логистической регрессии - PullRequest
0 голосов
/ 03 марта 2019

Я хотел бы построить модель логистической регрессии с использованием пакета каретки.

Это мой код.

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.

1 Ответ

0 голосов
/ 03 марта 2019

К сожалению, R имеет неприятное поведение, когда поднаставляет только один столбец, такой как df[,1], чтобы изменить результат на vector, и, поскольку у вас есть только один предиктор, вы столкнулись с этой функцией.Вы можете сохранить результаты как data.frame либо

trainSet[,predictors, drop = FALSE]

, либо

trainSet[predictors]

Кстати.Есть две дополнительные проблемы с кодом:

  1. Первый аргумент должен быть предиктором, а не ответом
  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

...