错误:在使用caret()进行逻辑回归时,请为x使用列名

时间:2019-03-02 22:45:11

标签: r logistic-regression r-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时,会收到相同的错误。

2 个答案:

答案 0 :(得分:0)

不幸的是,当仅对df[,1]之类的一列进行子集化以将结果更改为vector时,并且由于只有一个预测变量,因此R遇到了这种讨厌的行为。您可以通过以下任一方式将结果保存为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

答案 1 :(得分:0)

我遇到了同样的问题,

`head(iris)
xx <- iris[,-5]
yy <- iris[,5]
rf.imp <- train(x = xx, y = yy, method = "rf",  data = iris); rf.imp`