curva.ROC.fnc

Objetivos

Lleva a cabo la estimación de la curva ROC a partir de la variable de grupo definida por el usuario. Esta variable generalmente es un factor sobre el que se desea ver el pontencial discriminante de otra variable predictora cuantitativa. La función genera una gráfica donde se proyecta los valores de sensibilidad y especificidad para cada valor de la variable predictora al ser utilizada como criterio para asignar a los participantes a los grupos.

curva.ROC. fnc

Utilizaremos la base de datos iris para llevar a cabo la estimación de sensibilidad y especificidad de las variables cuantitativas de esa base de datos al ser utilizadas para asignar los registros de iris a las distintas especies de la variable de grupo Species.

head(iris)

Sepal.Length Sepal.Width Petal.Length Petal.Width Species

1 5.1 3.5 1.4 0.2 setosa

2 4.9 3.0 1.4 0.2 setosa

3 4.7 3.2 1.3 0.2 setosa

4 4.6 3.1 1.5 0.2 setosa

5 5.0 3.6 1.4 0.2 setosa

6 5.4 3.9 1.7 0.4 setosa

curva.ROC.fnc(iris, grupo='Species', variable=1)

curva.ROC.fnc(iris, grupo='Species', variable='Sepal.Length')

En la curva de la izquierda podemos ver la curva ROC con los valores de sensibilidad (casos correctamente asignados al grupo 1 (caso) y especificidad (casos correctamente asignados al grupo 2 (control). Asimismo la gráfica nos indica el mejor valor de corte para la variable utilizada (Sepal.Length) que resulta de un compromiso entre la máxima sensibilidad con el menor número de falsos positivos (1-especificidad). Este valor es de 5.45, el cual aporta una especificad del 90% para una sensibilidad del 88%. La gráfica además nos da el valor de área bajo la curva (AUC) 93.26 indicativo de un gran potencial discrimantivo de dicha variable (su valor supera claramente la diagonal -50%- correspondiente a la asignación por azar).

La figura de la derecha se obtiene al incluir el argumento suavizado=T. De esta forma obtenemos una curva mas limpia que nos permita apresar mejor la inflexión buscada de sensibilidad vs especificidad.

El usuario puede incluir el argumento color=F si desea la curva ROC sin colores a efectos de publicación.

curva.ROC.fnc(iris, grupo='Species', variable=1, color=F)

Podemos pedir la curva ROC para múltiples variables y solicitar también el contraste de hipótesis de igualdad de áreas bajo la curva entre las p variables predictoras incluidas.

curva.ROC.fnc(iris, grupo='Species', variable=2:4)

curva.ROC.fnc(iris, grupo='Species', variable=2:4,

suavizado=T)

Si incluimos el argumento contraste=T, obtendremos los contrastes par a par de igualdad de áreas bajo la curva de todas las p variables incluidas.

curva.ROC.fnc(iris, grupo='Species', variable=2:4, contraste=T)

$Contrastes

AUC.roc1 AUC.r2 Z p.val p.hochberg

Sepal.Width.Petal.Length 92.48 100 -2.818096 0.004830932 0.009661865

Sepal.Width.Petal.Width 92.48 100 -2.916949 0.003534734 0.009661865

Petal.Length.Petal.Width 100.00 100 0.000000 1.000000000 1.000000000

Cuando el factor incluido en el argumento grupo tiene mas de dos niveles, la función te lo hará saber.

#------------------------------------------------------------------

# CURVA ROC

#------------------------------------------------------------------

*** WARNING. El factor incluido en el argumento grupo tiene mas de

*** dos niveles. Se utilizaran el primer y segundo nivel para calcular

*** la curva ROC.

*** Si deseas otros niveles, utiliza la funcion reordena.factor.fnc

*** para cambiar los dos niveles a utilizar.

*** datos=reordena.factor.fnc(datos, que.factor='grupo',

*** niveles=c('g3','g2','g1'))

Es importante entender que la curva ROC asume la existencia de los niveles caso vs control. Es decir tomará el primer nivel de la variable como grupo a asignar y el segundo nivel como control. Si además la variable tuviese mas de dos niveles (como en el ejemplo utilizado) es muy importante entender que las curvas, valores y contrastes estimados lo son obviando al tercer nivel de la variable Species.