我无法使ROC函数正常工作,出现错误“预测变量必须为数字或有序”。
我浏览了其他帖子,但是没有什么可以解决我的问题。我们非常感谢您的帮助。
"Get data"
flying=dget("https://www.math.ntnu.no/emner/TMA4268/2019v/data/flying.dd")
ctrain=flying$ctrain
ctest=flying$ctest
library(MASS)
fly_qda=qda(diabetes~., data=ctrain)
#Test error is given below:
predict_qda=predict(fly_qda, newdata=ctest, probability=TRUE)
table_qda<-table(ctest$diabetes, predict_qda$class)
error_qda<-1-sum(diag(table_qda))/sum(table_qda)
error_qda
"ROC curve and AUC"
predict_qdatrain<-predict(fly_qda, newdata=ctrain)
roc_qda=roc(response=ctrain$diabetes, predictor= predict_qdatrain$class, plot=TRUE)
plot(roc_qda, col="red", lwd=3, main="ROC curve QDA")
auc_qda<-auc(roc_qda)
我想要绘制的ROC曲线和AUC
答案 0 :(得分:2)
正如Ollie Perkins在回答中所解释的那样,您所收到的错误表明您正在传递的东西不是可分类的,因此不能用于ROC分析。
对于predict.qda
,class
项是一个因素,其中1
和0
s指示类别。
与其将类转换为有序的预测变量,不如使用后验概率代替。让我们使用属于类1
的概率:
roc_qda <- roc(response = ctrain$diabetes, predictor = predict_qdatrain$posterior[,"1"])
plot(roc_qda, col="red", lwd=3, main="ROC curve QDA")
auc(roc_qda)
这将为您提供更平滑的曲线和更多的分类阈值供您选择。
答案 1 :(得分:1)
因此,假设您使用的是pROC软件包,我已在下面对其进行了修复。错误消息表示预测变量必须是数字类型(浮点整数)或有序因子(级别顺序重要的分类变量)。因此,为了从您的预测对象计算ROC曲线,我在下面进行了动态转换。
其次,在您的原始代码中,您正在预测原始训练集。我已将其更改为下面的测试数据。
"Get data"
flying=dget("https://www.math.ntnu.no/emner/TMA4268/2019v/data/flying.dd")
ctrain=flying$ctrain
ctest=flying$ctest
library(MASS)
library(pROC)
fly_qda=qda(diabetes~., data=ctrain)
#Test error is given below:
predict_qda=predict(fly_qda, newdata=ctest, probability=TRUE)
table_qda<-table(ctest$diabetes, predict_qda$class)
error_qda<-1-sum(diag(table_qda))/sum(table_qda)
error_qda
"ROC curve and AUC"
predict_qdatrain<-predict(fly_qda, newdata=ctrain)
roc_qda=roc(response=ctrain$diabetes, predictor= factor(predict_qdatrain$class,
ordered = TRUE), plot=TRUE)
plot(roc_qda, col="red", lwd=3, main="ROC curve QDA")
auc_qda<-auc(roc_qda)