绘图ROC曲线:seq.default中的错误(min.alpha,max.alpha,length = length(colors)):'from'不能是NA,NaN或无限

时间:2015-04-06 15:39:51

标签: r

我试图使用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

1 个答案:

答案 0 :(得分:0)

我认为问题是你的模型总是预测同一个类,因此ROC曲线与45度线重合,导致alpha.valuesperf的单个非无限值宾语。当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中只有一个非无限值时,这个(或者可能是稍后创建颜色图例的函数)会失败,并显示错误消息。

而且,正如我在开始时所指出的那样,这个错误最终会发生,因为你的模型总是预测同一个类(也就是说,它没有预测能力)。