2017-07-27 49 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開始,然後在必要時改變閾值,通常在數據集不平衡的情況下。