R에서 ROC 아래 영역의 p- 값을 계산하는 방법


12

ROC (receiver operator 특성)에 따라 영역의 p- 값을 계산하는 방법을 찾기 위해 고심하고 있습니다. 연속 변수와 진단 테스트 결과가 있습니다. AUROC가 통계적으로 유의한지 확인하고 싶습니다.

pROC, ROCR, caTools, 검증, Epi와 같은 ROC 곡선을 다루는 많은 패키지를 발견했습니다. 그러나 문서와 테스트를 읽는 데 몇 시간을 보낸 후에도 방법을 찾을 수 없었습니다. 방금 놓친 것 같아요.


1
곡선 아래 영역이 '유의'하다는 것은 무엇을 의미 할 수 있습니까?
gung-Monica Monica 복원

AUC 값이 0.5와 통계적으로 다른지 테스트하고 싶다고
말함

ROC 곡선은 무엇에서 유래 했습니까? 아마도 당신은 그것의 테스트를 원할 것입니다 (예를 들어, 로지스틱 회귀 모델에 대한 p- 값이 전체적으로 취해집니다).
gung-모니 티 복원

글쎄, 내 데이터는 다음과 같습니다. 저는 질병의 유무에 관계없이 그룹화하는 표준 테스트를 가지고 있으며 혈액 샘플에서 생물학적 결정을위한 차단 값을 찾고 싶습니다. 그 외에도 곡선 아래에 면적이 필요합니다. 그래서, 나는 회귀 모델이 없습니다
user32530

따라서 환자로부터 채취 한 혈액 샘플에 대해 몇 가지 검사를 실시합니다. & 당신은 환자가 질병이 있는지 분류하기 위해 그 숫자를 사용하고 싶을 것입니다. 현재이 테스트에서 실제 질병 상태를 알고있는 환자 세트에 대한 일련의 숫자가 있습니다. 그게 다 맞습니까?
gung-모니 티 복원

답변:


12

상황에 따라 ROC 곡선을 작성하고 해당 곡선 아래 면적을 계산하는 것이 좋을 것입니다. 그러나 이것은 1 차 분석 자체가 아니라 기본 분석 을 보완 하는 것으로 생각해야 합니다. 대신 로지스틱 회귀 모형 을 적합 시키려고 합니다.

로지스틱 회귀 모형은 모형의 검정을 전체적으로 표준으로 제공합니다. 실제로는 하나의 변수 만 있으므로 해당 p- 값은 테스트 결과 변수의 p- 값과 같습니다. 모형을 사용하면 병에 걸린 관측치의 예측 확률을 계산할 수 있습니다. 수신기 작동 특성이 어떻게 '를 알려줍니다 민감도와 특이도는 사용자가 예상 분류에 예측 가능성을 변환하는 다른 임계 값을 사용하는 경우, 트레이드 오프 (trade off)한다. 예측 확률은 테스트 결과 변수의 함수이므로 다른 테스트 결과 값을 임계 값으로 사용하는 경우 해당 변수가 어떻게 균형을 이루는 지 알려줍니다.


로지스틱 회귀 분석에 익숙하지 않은 경우 인터넷에서 사용할 수있는 리소스가 있습니다 (위의 Wikipedia 페이지 외에).


그것은 매우 깨달았습니다. 감사합니다! 그래서 나는 물류 모델 glm binomial (logit)에 적합합니다. 그런 다음 그것을 null 모델과 비교하면 그 테스트에서 내가 찾고있는 p 값을 알 수 있습니까?
user32530

네, 그렇게해야합니다. LR은 다른 많은 것들도 가능하게 할 것이지만, 그것이 당신이 필요한 전부일 수도 있습니다.
gung-모니 티 복원

코드는 다음과 같습니다. GLM.1 <-glm (그룹 ~ 연속 변수, 가족 = 이항 (logit), 데이터 = 진단 데이터) 요약 (GLM.1) GLM.2 <-glm (그룹 ~ 1, 가족 = 이항 (logit), 데이터 = 진단 데이터) anova (GLM.2, GLM.1, test = "Chisq")
user32530

summary(GLM.1)필요한 것을 제공해야 anova(GLM.1)합니다. 실제로 적합하지 않아도 null 모델에 대해 테스트 할 것이라고 생각 합니다. 그러나 당신의 방법은 확실히 작동합니다.
gung-모니 티 복원

9

기본적으로 H0 = "AUC는 0.5"입니다.

이것은 실제로 H0 = "두 그룹의 순위 분포가 동일합니다"라고 말하는 것과 같습니다.

후자는 Man-Whitney (Wilcoxon) 검정의 귀무 가설입니다 (예 : Gold, 1999 참조 ).

즉, Mann-Whitney-Wilcoxon 테스트를 안전하게 사용하여 질문에 대답 할 수 있습니다 (예 : Mason & Graham, 2002 참조 ). 이것은 Franck Dernoncourt가 언급 한 검증 패키지와 정확히 일치합니다.


예측이 무작위가 아님을 보여주는 것이 왜 흥미로울까요? 그것은 유용성을 평가하지 않습니다.
Frank Harrell

1
@FrankHarrell 많은 경우에있어 귀하의 예측은 무작위보다 좋지 않을 수 있습니다.이 경우 귀하가보고하는 유용성은 실제로 무의미합니다. 물론 유용성 측정치 (민감도 및 특이성)의 신뢰 구간을보고하는 것이 더 유용 할 것입니다. 그러나 두 그룹의 차이를 테스트하는 것은 적어도 임상 문헌에서 일반적이며 (실제로 그룹이 다르지 않음) 검토자가 구체적으로 요구하는 것을 보았습니다.
Calimo

IMHO는 거의 이해가되지 않습니다. 나는 동전을 뒤집는 것보다 낫다는 것이 아니라 무언가가 얼마나 유용한 지 알고 싶습니다.
Frank Harrell

동전을 뒤집는 것보다 낫지 않다면 왜 그 모든 일을 겪을 것입니까? 동전을 뒤집기 만하면됩니다.
Scott

4

패키지 확인 에서 roc.area () 를 사용할 수 있습니다 .

install.packages("verification")
library("verification")

# Data used from Mason and Graham (2002).
a<- c(1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990,
 1991, 1992, 1993, 1994, 1995)
d<- c(.928,.576, .008, .944, .832, .816, .136, .584, .032, .016, .28, .024, 0, .984, .952)

A<- data.frame(a,d)
names(A)<- c("year", "p2")

# For model without ties
roc.area(A$event, A$p2)

돌아올 것이다 $p.value [1] 0.0069930071


정말 고맙지 만 c와 d 값이 없습니다. 나는 질병의 유무에 관계없이 그룹화하는 표준 테스트를 가지고 있으며 혈액 샘플에서 생물학적 결정에 대한 컷오프 값을 찾고 싶습니다. 그 외에도 곡선 아래에 면적이 필요합니다. 그래서 아니, 나는 회귀가 없습니다. 나는 stdtest 이진 변수 biologicalvalue 연속 변수가
user32530

오케이, 나는 이미 ROC 곡선이 있다고 가정했기 때문에 d가 있다고 생각했습니다.
Franck Dernoncourt

3
질병 확률과의 진정한 관계가 원활 할 때 임의의 컷오프를 찾는 것은 일반적으로 실수입니다. 또한 ROC 영역이 0.5라는 귀무 가설을 테스트하는 것은 매우 지루한 가설입니다. 대부분의 예측의 경우 예측이 랜덤인지 여부가 아니라 얼마나 좋은지에 관심이 있습니다.
Frank Harrell

문제 없습니다, 고맙습니다, Frank Demoncourt, 아마도 d.를 얻는 방법이있을 것입니다.
user32530

의료 분야에서는 때때로 진단 테스트를 위해 차단 지점이 필요합니다. 그들은 대상이 아프거나 아닌지 찾기를 원하며 무언가를 예측하지 않습니다. 때로는 질병 상태를 확인하기 위해 더 저렴한 결정으로 비용을 줄여야합니다.
user32530

0

를 사용하여 pROC에서 두 개의 ROC 곡선을 비교할 수 있습니다 roc.test(). 이것은 또한 p- 값을 생성합니다. 또한, 사용하는 것이 roc(..., auc=TRUE, ci=TRUE)유용 할 수 있습니다 ROC 객체를 생성하는 동안 출력에 당신에게 AUC와 함께 낮은 및 높은 신뢰 구간을 줄 것이다.

다음은 갤런 당 마일 또는 자동차 무게가 자동 또는 수동으로 장착 된 변속기의 더 나은 예측 변수인지 테스트하는 작동 예제 코드입니다.

library(pROC)
roc_object_1 <- roc(mtcars$am, mtcars$mpg, auc=T, ci=T) #gives AUC and CI
roc_object_2 <- roc(mtcars$am, mtcars$wt, auc=T, ci=T) #gives AUC and CI

roc.test(roc_object_1, roc_object_2) #gives p-value

무게는 연료 소비보다 훨씬 더 나은 예측 변수입니다. 그러나 이것은 0.5와 같은 숫자에 대한 단일 곡선이 아닌 두 곡선을 비교하는 것입니다. 신뢰 구간에 0.5가 포함되어 있는지 여부를 확인하면 크게 다른지 여부를 알 수 있지만 p- 값을 생성하지는 않습니다.


p- 값도 제공합니까?
마이클 R. 체 르닉

질문은 R 측면에서 구체적으로 요구되지만 여기서 일반적인 정책은 통계 (머신 러닝 등) Q & A 사이트라는 것입니다. 따라서, Q는 통계적 내용을 가질 필요가 있으며, 소프트웨어 특정 용어로만 제공되는 것이 아니라는 것이 바람직하다. 그 점에 비추어 R에 존재한다고 언급하고 R 코드를 표시하는 것 외에이 테스트가 무엇이며 어떻게 작동하는지 더 자세히 말할 수 있습니까?
gung-모니 티 복원

좋아, 나는 통계적 배경을 반영하기 위해 대답을 업데이트 할 것이다
naco
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.