Як R, як обчислити р-значення для площі під ROC


12

Я намагаюся знайти спосіб обчислити р-значення для області під характеристикою оператора приймача (ROC). У мене є безперервна змінна та діагностичний результат тесту. Хочу дізнатися, чи AUROC є статистично значущим.

Я знайшов багато пакетів, що стосуються кривих ROC: pROC, ROCR, caTools, верифікація, Epi. Але навіть після багатьох годин, проведених за читанням документації та тестуванням, я не міг знайти, як. Я думаю, що це я просто пропустив.


1
Що це може означати, що площа під кривою буде «значною»?
gung - Відновіть Моніку

Я хотів сказати тестування, чи значення AUC статистично відрізняється від 0,5
user32530

З чого виникла ваша крива ROC? Імовірно, ви хочете перевірити це (наприклад, є р-значення для логістичної регресійної моделі, прийнятої в цілому).
gung - Відновіть Моніку

Ну, мої дані виглядають так: у мене є стандартний тест, який робить групування з / без захворювання, і я хочу знайти межу значення для біологічного визначення з зразка крові. Крім того, мені потрібна площа під кривою. Так ні, у мене немає регресійної моделі
user32530

Отже, у вас є якийсь тест, який виконується на пробі крові, взятої у пацієнта, яка дає вам номер; & ви хочете використовувати це число для класифікації, якщо у пацієнта є захворювання. В даний час у вас є набір номерів цього тесту для набору пацієнтів, де ви знаєте їх справжній стан хвороби. Чи все це правильно?
gung - Відновіть Моніку

Відповіді:


12

У вашій ситуації було б добре побудувати криву ROC та обчислити площу під цією кривою, але це слід вважати доповненням до вашого основного аналізу, а не самим первинним аналізом. Натомість ви хочете підходити до моделі логістичної регресії .

Модель логістичної регресії буде стандартною з випробуванням моделі в цілому. (Насправді, оскільки у вас є лише одна змінна, це p-значення буде таким самим, як і p-значення для вашої змінної результатів тесту.) Це p-значення, яке ви шукаєте. Ця модель дозволить розрахувати передбачувану ймовірність хвороби. Характеристика, що працює на приймачі, говорить про те, як чутливість та специфічність будуть змінюватися, якщо ви використовуєте різні пороги для перетворення прогнозованої ймовірності в прогнозовану класифікацію. Оскільки передбачувана ймовірність буде функцією вашої змінної результатів тесту, вона також говорить вам, як вони торгуються, якщо ви використовуєте різні значення результатів тесту в якості порогового значення.


Якщо ви не дуже знайомі з логістичною регресією, в Інтернеті є деякі ресурси (крім сторінки Вікіпедії, зв'язаної вище):


Це було дуже просвітливо. Дякую! Отже, я підходить до логістичної моделі glm binomial (logit). Потім я порівнюю її з нульовою моделлю, і цей тест дає мені значення р, яке я шукаю?
user32530

Так, це повинно зробити це за вас. LR також зробить багато інших можливих речей, але це може бути все, що вам потрібно.
gung - Відновіть Моніку

Отже, код буде таким: GLM.1 <- glm (група ~ безперервний вар, сімейство = двочлен (logit), дані = діагностичні дані) резюме (GLM.1) GLM.2 <- glm (група ~ 1, сімейство = двочлен (logit), дані = діагностичні дані) anova (GLM.2, GLM.1, test = "Chisq")
користувач32530

summary(GLM.1)повинен дати вам те, що вам потрібно, і, я думаю anova(GLM.1), перевіримо його проти нульової моделі без вашої фактичної необхідності. Але ваш шлях обов’язково спрацює, так.
gung - Відновити Моніку

9

В основному ви хочете перевірити H0 = "AUC дорівнює 0,5".

Це насправді еквівалент, як говорити H0 = "Розподіл рангів у двох групах рівний".

Останнє є нульовою гіпотезою тесту Манна-Вітні (Вілкоксона) (див., Наприклад, Gold, 1999 ).

Іншими словами, ви можете сміливо використовувати тест Манна-Вітні-Вілкоксона, щоб відповісти на ваше запитання (див., Наприклад, Mason & Graham, 2002 ). Саме це робить пакет підтвердження, згаданий Франком Дернонкуром.


Чому було б цікаво показати, що прогнози не випадкові? Це не оцінює корисність.
Френк Харрелл

1
@FrankHarrell Оскільки у багатьох випадках ваші прогнози можуть бути не кращими від випадкових - у цьому випадку корисність, про яку ви повідомляєте, насправді дорівнює нулю. Звичайно, звітування про довірчий інтервал про корисні заходи (чутливість та специфічність) було б кориснішим. Але тестування різниці між двома групами є звичайним явищем у клінічній літературі принаймні (і насправді там групи часто не відрізняються), і я побачив рецензентів, які про це конкретно запитують.
Калімо

Це мало сенсу IMHO. Хочеться знати, наскільки щось корисне, а не краще, ніж просто гортати монету.
Френк Харрелл

Якщо це не краще, ніж гортати монету, то навіщо ви проходили всю цю роботу? Просто переверніть монету.
Скотт

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. У мене є стандартний тест, який робить групування з / без захворювання, і я хочу знайти межу для біологічного визначення з зразка крові. Крім того, мені потрібна площа під кривою. Так ні, у мене немає регресу. У мене найпотаємніша бінарна змінна та безперервна біологічна величина
user32530

Ой гаразд, я думав, що ти мав d, як я припускав, що ти вже кривий ROC
Франк Дернонкурт

3
Зазвичай помилково шукати довільне відсічення, коли справжня залежність від ймовірності захворювання рівна. Також тестування нульової гіпотези про те, що площа ROC дорівнює 0,5, є досить нудною гіпотезою. Для більшості прогнозів ви дбаєте про те, наскільки хороший прогноз, а не випадковий він.
Френк Харрелл

Без проблем, і дякую вам, Френк Демонкур, можливо, є спосіб отримати д.
користувач32530

У галузі медицини іноді їм потрібні ці точки відсічення, щоб створити діагностичні тести. З тими, кого вони хочуть знайти, чи є хворий хворий чи ні, чи не щось передбачити. Іноді їм потрібно скоротити витрати з дешевшим визначенням для виявлення стану хвороби.
користувач32530

0

Дві криві ROC можна порівняти у використанні pROC roc.test(). Це також дає p-значення. Крім того, використання roc(..., auc=TRUE, ci=TRUE)дасть вам нижчі та більші довірчі інтервали разом із AUC у виході під час створення об’єкта ROC, що може бути корисно.

Далі наведено робочий приклад коду, який перевіряє, чи милі на галон чи вага автомобіля є кращим предиктором виду трансмісії, з якою він оснащений (автоматичною чи ручною):

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, наша загальна політика тут полягає в тому, що ми являємо собою статистику (машинне навчання тощо) на сайті Q&A. Таким чином, Q повинен мати статистичний вміст, і настійно бажано, щоб As не було передбачено лише в конкретних програмних умовах. Зважаючи на це, чи можете ви сказати більше про те, що таке тест та як він працює, крім того, щоб просто зазначити, що він існує в R & показує код R для нього?
gung - Відновіть Моніку

Гаразд, я
оновлю
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.