2013-12-11 3 views
2

R에서 3 종 ROC 분석의 문제를 만났고 매우 성가신 결과를 얻었습니다 (here 참조). 이제 다른 방법으로 해결하려고합니다. 데이터는 iris이고 분류 기호는 nnet 패키지에있는 다항 로지스틱 회귀 분석입니다. 코드는 다음과 같습니다 :R (pROC 패키지)의 3 종 AUC 계산

# iris data (3-class ROC) 
library(nnet) 
library(pROC) # should be installed first: install.packages('pROC') 
data(iris) 
# 3-class logistic regression 
model = multinom(Species~., data = iris, trace = F) 
# confusion matrix (z1) & accuracy (E1) 
z1 = table(iris[, 5], predict(model, data = iris)) 
E1 = sum(diag(z1))/sum(z1) 
z1;E1 
#    setosa versicolor virginica 
# setosa   50   0   0 
# versicolor  0   49   1 
# virginica  0   1  49 
#[1] 0.9866667 

# prediction model (still training data set) 
pre = predict(model, data = iris, type='probs') 
# AUC measure 
modelroc = mean(
    c(as.numeric(multiclass.roc(iris$Species, pre[,1])$auc), 
     as.numeric(multiclass.roc(iris$Species, pre[,2])$auc), 
     as.numeric(multiclass.roc(iris$Species, pre[,3])$auc) 
    ) 
) 
modelroc 
## RESULT ## 
# [1] 0.9803556 

내 질문은 :
이이 pROC 패키지를 사용하는 올바른 방법인가?
감사합니다.

일부 관련 참조 :
pROC 패키지 : http://www.inside-r.org/packages/cran/pROC/docs/multiclass.roc
Hand & Till(2001) 원래 용지 : http://link.springer.com/article/10.1023%2FA%3A1010920819831

답변

1

당신은 스스로 세 ROC 곡선의 AUC의 평균 세 개의 멀티 클래스 AUC의 평균을하고있다. 그래서 이것은 평균 9 AUC입니다. 이것은 실제 질문에 따라 문제의 정답 일 수도 아닐 수도 있습니다. 그러나 질문하지 않았으므로 대답하기가 어렵습니다. 내가 말할 수있는 것은, 여러분이 언급 한 핸드 & Till (2001) 종이에 설명 된 것이 아니라는 것입니다.

1

나는이 질문이 상대적으로 오래된 이해하지만 해결책이 : 나는 PROC 패키지를 사용하고 있지 않다 때문에

# Starting validation code 
library(HandTill2001) 

auc(multcap(
    response = iris$Species, 
    predicted = as.matrix(pre) 
)) 

이, 불행하게도, 내가 제공 0.9990667의 AUC를, 플로팅 정말 지원되지 않습니다. 하지만 패키지 pROC를 어떻게 사용해야하는지 잘 모르겠습니다.