# Приложение 4. Построение ROC-кривой и вычисление AUC вручную

# создаем вектор фактических значений (классов) зависимой переменной
cls = c('P', 'P', 'P', 'N', 'P', 'P', 'N', 'P', 'P', 'N', 'N',
        'N', 'N', 'N', 'P', 'N', 'N', 'N', 'N', 'N')

# создаем вектор спрогнозированных вероятностей положительного класса
score = c(0.92, 0.9, 0.88, 0.85, 0.82, 0.79, 0.75, 0.73, 0.72, 0.7, 0.6,
          0.59, 0.58, 0.53, 0.52, 0.4, 0.33, 0.32, 0.24, 0.18)

# записываем положительные и отрицательные примеры
pos = score[cls == 'P']
neg = score[cls == 'N']

# случайным образом отбираем положительные примеры и отрицательные примеры
# и фиксируем, был ли положительный пример проранжирован выше отрицательного
# (TRUE) или нет (FALSE), и вычисляем AUC - долю случаев, когда положительный
# пример был проранжирован выше отрицательного

set.seed(14)
p = replicate(50000, sample(pos, size=1) > sample(neg, size=1))
mean(p)

# загружаем пакет pROC, автоматически вычисляем AUC и строим ROC-кривую
library(pROC)
roc <- roc(cls, score, ci=TRUE)
roc
plot(roc)