我试图使用RORR包绘制基于结果(ED)和预测类(p)的ROC曲线。我收到了以下错误,我对此一无所知。
seq.default中的错误(min.alpha,max.alpha,length = length(colors)):'from'不能是NA,NaN或无限。
library(arules)
library(Matrix)
library(ROCR)
library(arulesViz)
pred <- prediction(p, ED)
perf <- performance(pred, measure="tpr", x.measure="fpr")
plot(perf, main="ROC Curve", colorize=T)
我需要为零R,OneR,决策树,逻辑回归和线性判别分析绘制ROC。在一些方法中,预测值将是概率(例如逻辑回归),并且在其中一些(零R)中,预测值将是0/1。
如果有人能帮助我,我感激不尽。
谢谢, Mahsa
答案 0 :(得分:0)
我认为问题是你的模型总是预测同一个类,因此ROC曲线与45度线重合,导致alpha.values
中perf
的单个非无限值宾语。当plot
设置为colorize
时,这会导致TRUE
抛出错误。我将在下面使用内置数据框ROCR.simple
更详细地解释这一点,我可以使用它来重现您的问题。
# Load ROCR.simple data frame
data(ROCR.simple)
首先,我们将预测更改为始终预测label = 0,方法是将ROCR.simple$predictions
设置为小于0.5。这只是为了让它看起来像你的结果。
ROCR.simple$predictions = rep(0.1, length(ROCR.simple$predictions))
现在我们将运行与您类似的代码:
pred = prediction(ROCR.simple$predictions, ROCR.simple$labels)
perf = performance(pred, measure="tpr", x.measure="fpr")
现在让我们看一下perf
:
perf
An object of class "performance"
Slot "x.name":
[1] "False positive rate"
Slot "y.name":
[1] "True positive rate"
Slot "alpha.name":
[1] "Cutoff"
Slot "x.values":
[[1]]
[1] 0 1
Slot "y.values":
[[1]]
[1] 0 1
Slot "alpha.values":
[[1]]
[1] Inf 0.1
最后,让我们尝试绘制它:
# This fails
plot(perf, colorize=TRUE)
Error in seq.default(min.alpha, max.alpha, length = length(colors)) :
'from' cannot be NA, NaN or infinite
# This works
plot(perf)
根据这些结果,我认为发生的事情是当您设置colorize=TRUE
时,plot
会尝试从alpha.values
的最低值到最高值创建一系列颜色(请参阅上面的perf@alpha.values
),但是当alpha.values
中只有一个非无限值时,这个(或者可能是稍后创建颜色图例的函数)会失败,并显示错误消息。
而且,正如我在开始时所指出的那样,这个错误最终会发生,因为你的模型总是预测同一个类(也就是说,它没有预测能力)。