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

问题描述 投票:0回答:1

我想使用插入符号包构建逻辑回归模型。

这是我的代码。

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 logistic-regression r-caret
1个回答
0
投票

不幸的是,当像df[,1]这样的一个列进行子集化以将结果更改为vector时,R有一个讨厌的行为,因为你只有一个预测器,你遇到了这个功能。您可以将结果保存为data.frame

trainSet[,predictors, drop = FALSE]

要么

trainSet[predictors]

BTW。代码还有两个问题:

  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

© www.soinside.com 2019 - 2024. All rights reserved.