\documentclass{beamer}
\mode<presentation> {
  \usetheme{Warsaw}
  \setbeamercovered{transparent}
}
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usefonttheme{default} % serif
\title[CORvas]{CORvas}
\subtitle{Curvas R.O.C.}
\author[Carleos, Corral]{Carlos Carleos\and Norberto Corral}
\institute[U. Oviedo]{Departamento de Estadística\\
  e Investigación Operativa\\
  y de Didáctica de la Matemática\\
  Universidad de Oviedo}
\date[MANADINE]{Máster de Análisis de Datos\\
  para Inteligencia de Negocios}
\subject{Curvas C.O.R.}
\definecolor{verde}{RGB}{0,125,0}

\begin{document}

\begin{frame}
  \titlepage
\end{frame}

\begin{frame}{Partes}
  \tableofcontents
\end{frame}

\section{Teoría}
\subsection{Motivación, conceptos previos y definición}
\begin{frame}
  \frametitle{Origen}
  \begin{itemize}
  \item Gráfico estadístico
  \item Ayuda a definir un umbral de clasificación entre dos grupos
    \begin{itemize}
    \item Positivos (los que verifican cierta condición)
    \item Negativos (los que no la cumplen)
    \end{itemize}
  \item C.O.R. = característica operativa del receptor
  \item Proviene de la teoría de detección de señales\\
    (discernir entre señal y ruido)
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Ejemplo}
  \begin{itemize}
  \item Señal en radar: ¿ruido o \alert{aviones}?
  \begin{center}
    \includegraphics[width=0.7\textwidth]{bildoj/misiles.png}
    % generada con: a=rchisq(50,2);barplot(a,axes=FALSE,col=1+(sapply(a,function(x)rbinom(1,1,(x/max(a))^5))));abline(h=5,col=3,lwd=3);abline(h=4,col=4,lwd=3);
  \end{center}
  \item umbral de detección (decidir entre ``ruido'' o ``\alert{avión}'')
    \begin{itemize}
    \item \textcolor{verde}{umbral alto}\\ no se detectan objetos reales
      (Falsos Negativos)
    \item \textcolor{blue}{umbral bajo}\\ muchos avisos falsos
      (Falsos Positivos)
    \end{itemize}
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Objetivo}
  \begin{itemize}
  \item umbral de detección
    \begin{itemize}
    \item \textcolor{verde}{umbral alto}\\ no se detectan objetos reales
      (Falsos Negativos)
    \item \textcolor{blue}{umbral bajo}\\ muchos avisos falsos
      (Falsos Positivos)
    \end{itemize}
  \item Es conveniente buscar un valor que equilibre ambas opciones.
  \item La curva ROC ayuda a buscar un umbral que haga poco frecuentes
    ambos tipos de clasificaciones erróneas.
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Estado}
  \begin{itemize}
  \item Grupo al que realmente pertenece cada individuo
  \item Variable aleatoria $D$ que toma los valores
    \[ D = \left\{
        \begin{array}{rl}
          0 & \mbox{si no verifica la condición (Negativo)}\\
          1 & \mbox{si sí verifica la condición (Positivo)}
        \end{array}
      \right. \]
  \item \(D \leadsto \mbox{Bernoulli}(p)\)
    \begin{eqnarray*}
    p &=& \Pr\,(D=1) = \Pr\,(\mbox{Positivo}) = \mbox{prevalencia}\\
    1-p &=& \Pr\,(D=0) = \Pr\,(\mbox{Negativo})
    \end{eqnarray*}
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Variable medida}
  \begin{itemize}
  \item Variable que se usa para establecer el criterio de clasificación
    \begin{itemize}
    \item En los Positivos \(X = X_P = (X\mid D=1)\)
    \item En los Negativos \(X = X_N = (X\mid D=0)\)
    \end{itemize}
  \item Sus correspondientes funciones de distribución son
    \begin{itemize}
    \item \(F_P(x) = \Pr\,(X_P\leq x)\)
    \item \(F_N(x) = \Pr\,(X_N\leq x)\)
    \end{itemize}
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Variable criterio}
  \begin{itemize}
  \item Toma dos valores posibles en función del valor de $X$
    \[ \mbox{Criterio} Y = \left\{
        \begin{array}{ll}
          1 \mbox{ (Positivo)} & \mbox{si } X\geq c \\
          0 \mbox{ (Negativo)} & \mbox{si } X< c \\
        \end{array}
      \right. \]
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Estimador de la prevalencia}
  \begin{itemize}
  \item Proporción muestral
    \[ \hat p = \frac{\mbox{número de individuos Positivos de la muestra}}
      {\mbox{número de individuos de la muestra}} \]
  \item Depende del tipo de muestreo
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Términos habituales}
  \begin{center}
  \begin{tabular}{ccc}
    VP & verdadero positivo & \(D=1,Y=1\)\\
    FP & falso positivo & \(D=0,Y=1\)\\
    FN & falso negativo & \(D=1,Y=0\)\\
    VN & verdadero negativo & \(D=0,Y=0\)\\
  \end{tabular}
\end{center}
  \begin{center}
    \begin{tabular}{c|cc}
      & Y=1 & Y=0\\\hline
      D=1&VP&FN\\
      D=0&FP&VN
    \end{tabular}
  \end{center}
\end{frame}
\begin{frame}
  \frametitle{Sensibilidad}
  \begin{itemize}
  \item Probabilidad de acertar en la clasificación de un individuo positivo
    \[ S = \Pr\,(Y=1\mid D=1) = \frac {\Pr\,(Y=1\cap D=1)}{\Pr\,(D=1)} \]
    \[ \hat S = \frac{VP}{VP+FN} = \mbox{fracción de verdaderos positivos} = FVP \]
    \[ 1-\hat S = \frac{FN}{VP+FN} = \mbox{fracción de falsos negativos} = FFN \]
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Especificidad}
  \begin{itemize}
  \item Probabilidad de acertar en la clasificación de un individuo negativo
    \[ E = \Pr\,(Y=0\mid D=0) = \frac {\Pr\,(Y=0\cap D=0)}{\Pr\,(D=0)} \]
    \[ \hat E = \frac{VN}{VN+FP} = \mbox{fracción de verdaderos negativos} = FVN \]
    \[ 1-\hat E = \frac{FP}{VN+FP} = \mbox{fracción de falsos positivos} = FFP \]
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Fracciones (tabla resumen)}
  \begin{center}
    \begin{tabular}{c|cc|c}
      & Y=1 & Y=0 & suma\\\hline
      D=1&FVP&FFN & 1\\
      D=0&FFP&FVN & 1
    \end{tabular}
  \end{center}
\end{frame}
\begin{frame}
  \frametitle{Valores predictivos}
  \begin{itemize}
  \item Valor predictivo positivo
    \begin{itemize}
    \item \(\Pr\,(D=1\mid Y=1)\)
    \item Se estima mediante \(VPP=\dfrac{VP}{VP+FP}\)
    \end{itemize}
  \item Valor predictivo negativo
    \begin{itemize}
    \item \(\Pr\,(D=0\mid Y=0)\)
    \item Se estima mediante \(VPN=\dfrac{VN}{VN+FN}\)
    \end{itemize}
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Definición de curva ROC}
  \begin{itemize}
  \item Curva ROC \textbf{poblacional}
  \item Gráfica que representa, para cada posible valor del umbral $c$,
    la Sensibilidad frente a $1-\mbox{Especificidad}$, es decir,
    \begin{itemize}
    \item Abscisas =  $1-\mbox{Especificidad}$
    \item Ordenadas = Sensibilidad
    \end{itemize}
  \item Suponiendo que $X$ toma, en general, valores mayores para los positivos,
    \[ ROC\,(t)=1-F_P\left(F_N^{-1}(1-t)\right)\qquad 0\leq t \leq 1\]
    donde
    \begin{itemize}
    \item \(t=1-E(x)=\Pr\,(Y(x)=1\mid D=0)=1-F_N(x)=
      \Pr\,(\mbox{Error}\mid \mbox{Negativo } D=0)\)
    \item \(ROC(t)=S(x)=1-F_P(x)=
      \Pr\,(\mbox{Acierto}\mid \mbox{Positivo } D=1)\)
    \end{itemize}
  \end{itemize}
\end{frame}
\subsection{Inferencia}
\begin{frame}
  \frametitle{Método no paramétrico
    para estimar la curva ROC}
  \begin{itemize}
  \item Usa la función de distribución empírica asociada a la muestra:
    \begin{eqnarray*}
      \hat F_P(x) &=& \frac {\text{nº}(x_i\leq x\mid Positivos)}{n_P}\\
      \hat F_N(x) &=& \frac {\text{nº}(x_i\leq x\mid Negativos)}{n_N}
    \end{eqnarray*}
  \item Se define la curva ROC empírica como
    \[ \widehat{ROC} (t) = 1-\hat F_P \left(1-\hat F_N(x)\right) \]
  \item Este procedimiento da lugar a una curva ROC escalonada
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Método no paramétrico
    para estimar la curva ROC}
  \begin{center}
    \includegraphics[height=.9\textheight]{bildoj/corva1.png}
  \end{center}
\end{frame}
\begin{frame}
  \frametitle{Método paramétrico para estimar la curva ROC}
  \begin{itemize}
  \item Modelo binormal
    \begin{itemize}
    \item \(X_P \leadsto N(\mu_P,\sigma_P)\) Positivos
    \item \(X_N \leadsto N(\mu_N,\sigma_N)\) Negativos
    \end{itemize}
  \item La curva ROC en el modelo binormal es
    \[ ROC(t)=1-\Phi\left(\alpha+\beta\cdot\Phi^{-1}(1-t)\right)\qquad
      0\leq t\leq1\]
    donde \(\alpha=\dfrac{\mu_N-\mu_P}{\sigma_P}\),
    \(\beta=\frac{\sigma_N}{\sigma_P}\),\\
    \(\Phi\) = función de distribución de la gausiana típica
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Método paramétrico para estimar la curva ROC}
  \begin{itemize}
  \item La curva ROC estimada es
    \[ \widehat{ROC}(t) =
      1-\Phi\left( \hat\alpha+\hat\beta \cdot\Phi^{-1}(1-t)\right)
      \qquad 0\leq t\leq1 \]
    donde
    \[\hat\alpha=\frac{\hat\mu_N-\hat\mu_P}{\hat\sigma_P}
      \qquad\hat\beta=\frac{\hat\sigma_N}{\hat\sigma_P} \]
  \item Tiene un aspecto liso
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Método no paramétrico
    para estimar la curva ROC}
  \begin{center}
    \includegraphics[height=.9\textheight]{bildoj/corva2.png}
  \end{center}
\end{frame}
\begin{frame}
  \frametitle{Contrastes de hipótesis}
  \begin{itemize}
  \item En el caso concreto del modelo binormal
    \[ H_0:\quad \alpha_1=\alpha_2 \quad\cap\quad \beta_1=\beta_2 \]
    \[ H_1:\quad \alpha_1\not=\alpha_2 \quad\cup\quad \beta_1\not=\beta_2 \]
  \item El estadístico del contraste:
    \[\chi^2 = \frac{\hat \alpha_{12}\cdot\hat V(\hat \beta_{12}) +
        \hat \beta_{12}\cdot\hat V(\hat \alpha_{12})-2\cdot\hat \alpha_{12}
        \cdot\hat \beta_{12}
        \cdot\widehat{\mbox{cov}}(\hat \alpha_{12},\hat \beta_{12})}
      {\hat V(\hat \alpha_{12})\cdot\hat V(\hat \beta_{12})-\widehat{\mbox{cov}}
        (\hat \alpha_{12},\hat \beta_{12})} \]
    donde \(\hat \alpha_{12}=\hat \alpha_1-\hat \alpha_2\)
    y  \(\hat \beta_{12}=\hat \beta_1-\hat \beta_2\)
  \item Asintóticamente bajo $H_0$,
    \( \chi^2 \leadsto \chi^2_2 \)
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Precisión o exactitud de un clasificador}
  \begin{eqnarray*}
    \Pr\,(\mbox{acertar}) &=& \Pr\,(Y=1\mid D=1)\cdot\Pr\,(D=1)\\
                          &+& \Pr\,(Y=0\mid D=0)\cdot\Pr\,(D=0)\\
                          &=& S\cdot\Pr\,(D=1)+E\cdot\Pr\,(D=0)
  \end{eqnarray*}
  \begin{itemize}
  \item Estimador \( \widehat \Pr(acertar) = \dfrac{VP+VN}n =
    \dfrac{\mbox{resultados acertados}}{\mbox{total de la muestra}}\)
  \item Proporción de aciertos en la clasificación sin distinguir
    positivos de negativos
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Índice de Youden}
  \begin{itemize}
  \item Es la diferencia entre las probabilidades de la respuesta positiva
    correcta y de la respuesta positiva incorrecta
    \begin{eqnarray*}
      J &=& \Pr\,(Y=1\mid D=1)-\Pr\,(Y=1\mid D=0)\\
      &=& \mbox{Especificidad}+\mbox{Sensibilidad}-1
    \end{eqnarray*}
  \item \(0\leq J\leq1\)
  \item \(J\approx 0 \Longleftrightarrow\) discrimina poco entre positivos y
    negativos
  \item \(J\approx 1 \Longleftrightarrow\) discrimina mucho entre positivos y
    negativos
  \item Su estimador se define como \(\hat J = FVP - FFP \)
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Índice de Youden}
  \begin{center}
    \includegraphics[height=0.9\textheight]{bildoj/youden.png}
  \end{center}
\end{frame}
\begin{frame}
  \frametitle{Área bajo la curva}
  \begin{itemize}
  \item AUC (\textit{area under curve}) se define así:
    \[AUC = \int_0^1\,ROC(t)\,\mathrm{d}t\]
    \item \(0.5\leq AUC \leq 1\)
    \item \(AUC \approx0.5 \Longleftrightarrow\) poca capacidad de
      discriminación
    \item \(AUC \approx1 \Longleftrightarrow\) separación casi total
    \item Se usa con mucha frecuencia para medir la capacidad de una
      variable para separar dos poblaciones
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Métodos para calcular el AUC}
  \begin{itemize}
  \item Método no paramétrico (regla trapezoidal)
    \[ \widehat{AUC}=\sum_{t=1}^T\,\frac12\,(FFP_t-FFP_{t-1})\cdot
      (FVP_t-FVP_{t-1}) \]
  \item Método paramétrico (caso binormal)
    \begin{eqnarray*}
      \widehat{AUC}&=&\int_0^1\widehat{ROC}(t)\,\mathrm{d}t=
                       \int_0^1\biggl(1-\Phi\bigl[\hat\alpha+\hat\beta
                       \cdot\Phi^{-1}(1-t)\bigr]\biggr)\mathrm{d}t\\
                   &=&\Phi\left(\frac{\hat\alpha}{\sqrt{1+\hat\beta^2}}\right) =
                       \Phi \left(\frac{\hat\mu_N-\hat\mu_P}
                       {\sqrt{\hat\sigma_N^2+\hat\sigma_P^2}}\right)
    \end{eqnarray*}
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Comparación de pruebas}
  \begin{itemize}
  \item Contraste
    \[ H_0:\quad AUC_1=AUC_2 \]
    \[ H_1:\quad AUC_1\not=AUC_2\]
  \item Estadístico
    \[z=\frac{\widehat{AUC}_1-\widehat{AUC}_2}
      {ET(\widehat{AUC}_1-\widehat{AUC}_2)}\]
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Aleatoriedad de la prueba}
  \begin{itemize}
  \item Contraste
    \[ H_0:\quad AUC=0.5 \]
    \[ H_1:\quad AUC\not=0.5\]
  \item Estadístico
    \[z=\frac{\widehat{AUC}-0.5}
      {ET(\widehat{AUC})}\]
  \end{itemize}
\end{frame}

\subsection{Elección del umbral}
\begin{frame}
  \frametitle{Punto de corte: método 1}
  \begin{itemize}
  \item Usar el umbral correspondiente al índice de Youden
  \begin{center}
    \includegraphics[height=0.7\textheight]{bildoj/youden.png}
  \end{center}
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Punto de corte: método 2}
  \begin{itemize}
  \item Buscar el punto (1-E;S) sobre la curva ROC más
    cercano al punto (0;1)
  \item La pendiente sobre ese punto vale
    \[m=\frac{p\cdot\Pr\,(\mbox{falsos positivos})}{(1-p)\cdot
        \Pr\,(\mbox{falsos negativos})}\]
    siendo $p$ la prevalencia del evento en la población
  \end{itemize}
\end{frame}
\begin{frame}
  \frametitle{Punto de corte: método 3}
  \begin{itemize}
  \item En este caso se tienen en cuenta los costes de los dos tipos de error
  \item Buscar el punto (1-E;S) sobre la curva ROC más
    cercano al que minimiza dichos costes
  \item La pendiente sobre ese punto vale
    \[m=\frac{\mbox{costes falsos positivos}\cdot(1-p)}
      {\mbox{costes falsos negativos}\cdot p}\]
    siendo $p$ la prevalencia del evento en la población
  \end{itemize}
\end{frame}
\section{Práctica en R}
\begin{frame}[fragile]
  \frametitle{Implementación ingenua}
\begin{verbatim}
nN <- nP <- 50                       # tamaños
N <- rnorm (nN, 0, 1)                # negativos
P <- rnorm (nP, 1, 1)                # positivos
t <- sort (union (N, P))             # todos
U <- c (-Inf, t[-1]-diff(t)/2, Inf)  # umbrales
s <- sapply (U,                      # sensibilidad
             function (Ui) 
               sum (P > Ui) / nP)
e  <- 1 - sapply (U,                 # 1 - especificidad
                  function (Ui) 
                    sum (N <= Ui) / nN)
o <- order (e, s)                    # `s' rompe empates
plot (e[o], s[o], type="s")          # "s" para peldaños
\end{verbatim}
\end{frame}
\begin{frame}[fragile]
  \frametitle{Implementación mediante «ecdf»}
\begin{verbatim}
nN <- nP <- 50                                 # tamaños
N <- rnorm (nN, 0, 1)                          # negativos
P <- rnorm (nP, 1, 1)                          # positivos
C <- 1 - ecdf (P) (sort (N, decreasing=TRUE))  # CORva
plot (seq (0, 1, length.out=nN), C, type="s")
\end{verbatim}
\end{frame}
\begin{frame}[fragile]
  \frametitle{Biblioteca «pROC»}
\begin{verbatim}
nN <- nP <- 50                                 # tamaños
N <- rnorm (nN, 0, 1)                          # negativos
P <- rnorm (nP, 1, 1)                          # positivos
install.packages ("pROC")
library (pROC)
C <- roc (controls = N, cases = P)             # CORva
plot (C)
auc (C)             # área bajo la curva
ci (C)              # intervalo de confianza
roc.test (C1, C2)   # para comparar dos CORvas
\end{verbatim}
\end{frame}
\begin{frame}[fragile]
  \frametitle{Biblioteca «pROC»: mejor umbral}
\begin{verbatim}
plot (C)

## mejor umbral según método 1 (Youden)
uY <- coords (C, "best")    
uY <- coords (C, "best", best.method = "youden") # ídem    
abline (v = uY["specificity"], col = 2)          # rojo

## mejor umbral según método 2 (cercano a la esquina)
uC <- coords (C, "best", best.method="closest.topleft")
abline (v = uC["specificity"], col = 3)          # verde

## para método 3, la opción «best.weights»
## permite dar los dos coeficientes de costes
\end{verbatim}
\end{frame}
\begin{frame}[fragile]
  \frametitle{Biblioteca «nsROC»}
\begin{verbatim}
nN <- nP <- 50                     # tamaños
N <- rnorm (nN, 0, 1)              # negativos (controles)
P <- rnorm (nP, 1, 1)              # positivos (casos)

install.packages ("nSROC")         # © Sonia Pérez
library (nsROC)                    # Dptº Estadística, UO

X <- c (N, P)                      # marcador
D <- c (rep (0, nN), rep(1, nP))   # 0=control  1=caso

gROC (X, D, plot.roc = TRUE, plot.density = TRUE)
\end{verbatim}
\end{frame}

\end{document}
