confusionMatrix用于R中的逻辑回归

时间:2017-09-03 22:31:51

标签: r validation logistic-regression confusion-matrix

我想使用我的训练数据和我的测试数据为我的逻辑回归计算两个混淆矩阵:

logitMod <- glm(LoanStatus_B ~ ., data=train, family=binomial(link="logit"))

我将预测概率的阈值设置为0.5:

confusionMatrix(table(predict(logitMod, type="response") >= 0.5,
                      train$LoanStatus_B == 1))

以下代码适用于我的训练集。 但是,当我使用测试集时:

confusionMatrix(table(predict(logitMod, type="response") >= 0.5,
                      test$LoanStatus_B == 1))

它给了我一个错误

Error in table(predict(logitMod, type = "response") >= 0.5, test$LoanStatus_B == : all arguments must have the same length

这是为什么?我怎样才能解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:4)

我认为使用预测存在问题,因为您忘记提供新数据。此外,您可以使用confusionMatrix包中的函数caret来计算和显示混淆矩阵,但您无需在调用之前对结果进行表格处理。

在这里,我创建了一个包含代表性二元目标变量的玩具数据集,然后我训练了一个类似于你所做的模型。

train <- data.frame(LoanStatus_B = as.numeric(rnorm(100)>0.5), b= rnorm(100), c = rnorm(100), d = rnorm(100))
logitMod <- glm(LoanStatus_B ~ ., data=train, family=binomial(link="logit"))

现在,您可以预测数据(例如,您的训练集),然后使用带有两个参数的confusionMatrix()

  • 您的预测
  • 观察到的类

library(caret)
# Use your model to make predictions, in this example newdata = training set, but replace with your test set    
pdata <- predict(logitMod, newdata = train, type = "response")

# use caret and compute a confusion matrix
confusionMatrix(data = as.numeric(pdata>0.5), reference = train$LoanStatus_B)

以下是结果

Confusion Matrix and Statistics

          Reference
Prediction  0  1
         0 66 33
         1  0  1

               Accuracy : 0.67            
                 95% CI : (0.5688, 0.7608)
    No Information Rate : 0.66            
    P-Value [Acc > NIR] : 0.4625