Как рассчитать AUC по графику ROC без базовых данных? - PullRequest
1 голос
/ 11 апреля 2019

Я делаю мета-анализ эффективности некоторых инструментов оценки риска. Моя цель - объединить оценки AUC нескольких исследований достоверности для конкретного инструмента. Однако я натолкнулся на несколько исследований, которые не дают самой оценки AUC, а представляют только кривую ROC. В таких случаях я использовал https://apps.automeris.io/wpd/, чтобы получить значения, соответствующие каждой точке данных. Однако проблема в том, что, хотя у меня есть значения для чувствительности и 1-специфичности и я могу использовать R для построения кривой ROC самостоятельно, я не знаю, какую функцию использовать для вычисления площади под кривой (AUC). Это связано с тем, что все пакеты / функции R, которые позволяют мне вычислять AUC, используют исходные данные в качестве входных данных. То есть предиктор и ответ, а не значения для чувствительности и 1-специфичности.

Я прочитал документацию для пакета 'pROC' в R, но не нашел ничего полезного. Я думаю, я мог бы просто интегрировать область под кривой графика, используя integrate () ? Однако проблема в том, что я не получил бы доверительные интервалы для AUC (что мне нужно в моем мета-анализе).

Вот данные, которые я сгенерировал по одной из ROC-кривых (используя https://apps.automeris.io/wpd/):

# data table:
AUC_data_1 <- tibble("1-specificity" = c(-0.0031751800795011,
0.05421559172249585, 0.12174003874893036,0.20579144833428253,
0.3012443157265138, 0.502266554865223, 0.6205366469297053,
0.8417661384716209, 
sensitivity = c(0.002260831241825745, 0.16879823941344285,
0.45899739288954267, 0.5804040305755962, 0.7849062327396981,
0.8634686874873007, 0.9710785309748188, 0.9977448923815709))

# roc curve generated from data:
plot(AUC_data_1)

Я хотел бы рассчитать AUC по этой ROC-кривой. Однако, поскольку у меня нет базовых данных (т. Е. Ответа и предиктора), я не могу использовать пакет pROC в R.

1 Ответ

0 голосов
/ 11 апреля 2019

Первое, что вам нужно сделать, это очистить ваши данные. Кривая ROC начинается в (0, 0) и заканчивается в (1, 1). Если эти точки отсутствуют в вашей кривой, AUC будет недооценен. Вот попытка исправить:

AUC_data_1 <- tibble("one.minus.specificity" = c(0,
0.05421559172249585, 0.12174003874893036,0.20579144833428253,
0.3012443157265138, 0.502266554865223, 0.6205366469297053,
0.8417661384716209, 1),
sensitivity = c(0, 0.16879823941344285,
0.45899739288954267, 0.5804040305755962, 0.7849062327396981,
0.8634686874873007, 0.9710785309748188, 0.9977448923815709, 1))

Убедитесь, что вы понимаете качество и надежность данных, которые вы получаете от этой услуги.

Тогда, как вы уже догадались, это всего лишь интеграционная игра. Мне нравится функция trapz от Pracma, которая использует правило трапеции:

library(pracma)
trapz(AUC_data_1$one.minus.specificity, AUC_data_1$sensitivity)
[1] 0.6268943

Что касается неопределенностей, вы должны взглянуть на работу Обуховского (1), которая выражает дисперсию кривой ROC как функцию AUC, размера выборки и параметров бинормального соответствия, которое вы можете получить с помощью чувствительности и только специфичность:

 model <- lm(1-one.minus.specificity~sensitivity, AUC_data_1)

Вы найдете код непосредственно в источнике pROC . Хотя он является частным, и вы должны использовать его на свой страх и риск (функции не экспортируются и могут исчезнуть в любое время). Примерно так:

A <- coefficients(model)[1]
B <- coefficients(model)[2]
kappa <- n.controls / n.cases # number of case and control observations
# use internal function at your own risk
pROC:::var.params.obuchowski(A, B, kappa) / n.cases
[1] 0.1125403

Они также предлагают подход, который не требует бинормальных коэффициентов:

A <- qnorm(theta) * 1.414
(0.0099 * exp(-A^2/2)) * ((5 * A^2 + 8) + (A^2 + 8)/kappa) / n.cases
[1] 0.7846169

Где тета - это AUC кривой, которую вы вычислили выше.

  1. Нэнси А. Обуховски, Донна К. МакКлиш (1997). «Определение размера выборки для диагностически точных исследований с использованием бинормальных индексов ROC-кривых». Статистика в медицине, 16 (13), 1529--1542. DOI: (SICI) 1097-0258 (19970715) 16:13 <1529 :: AID-SIM565> 3,0.CO; 2-H .
  2. Нэнси А. Обуховски, Михарл Л. Либер и Фрэнк Х. Уайанс младший (2004) «Кривые ROC в клинической химии: использование, неправильное использование и возможные решения». Clinical Chemistry, 50, 1118–1125. DOI: 10.1373 / clinchem.2004.031823 .
...