2017-07-27 122 views
0

我正在查看具有一个连续独立变量(Quant)和一个二进制因变量(二进制)的数据集。我用一个多项式模型来预测连续自变量的二进制值。我希望能制作ROC曲线。这是下面的代码:R中的ROCR预测函数返回错误消息

mymodel <- multinom(Quant~., data = dataset) 
pred <- predict(mymodel,dataset) 
roc_pred <- prediction(pred,dataset$Binary) 
roc <- performance(roc_pred,"tpr","fpr") 

现在,如果我运行此代码,我收到以下错误信息:“预测的格式是无效的。”我不确定为什么我的预测对象不能满足预测函数的要求?这将工作的唯一方法是,如果我把以下代码行,而不是: pred <- predict(mymodel,dataset,type="prob")

但是,这是让我在pred矩阵一些奇怪的值。由于我的因变量是二进制的,我期望在pred变量中得到0或1的值(这是我用原始代码行得到的),但是当我添加type =“prob”时,它给出对于自变量(Quant)等于0的所有观测值,我是0.3的值。什么是type =“prob”的改变,为什么我不能使用原始代码行来获得我的ROC曲线? 谢谢。

+0

如果您提供样本输入数据的[可重现示例](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example),则更容易提供帮助,所以我们可以运行并测试你的代码。 – MrFlick

+0

想通了!原因是由于Excel导入的某些错误,我的因变量未被归类为数值变量。问题不是预测函数......它实际上是回到多项式模型 – Byakko

回答

0

prob给你的概率。您需要使用阈值将概率转换为二元结果。这可以通过

pred <- predict(mymodel,dataset,type="prob") 

# intialize as zero 
pred_binary <- integer(length(pred)) 

# if the probability exceed 0.5, treat that as 1 
pred_binary[pred > 0.5] <- 1 

然后pred_binary是你想要的二元结果。这里,阈值是0.5。你可以根据你的情况改变它。大多数人通常从0.5开始,然后在必要时改变阈值,通常在数据集不平衡的情况下。