Download - Ejemplo regresión logística
Regresion logıstica: ¿Cuales son los
determinantes de un infarto al corazon?
Hector Garrido Henrıquez*
Profesor: Luis Firinguetti Limone
Modelos Lineales
Magıster en Matematica Mencion Estadıstica
Universidad del Bıo-Bıo
4 de enero de 2016
Resumen
En este informe se analizan los determinantes de un infarto al corazon
1
Indice
1. Introduccion 3
1.1. El modelo de regresion logıstica . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2. Descripcion de los datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2. Estimacion e interpretacion del modelo propuesto 5
2.1. Contrastes de significancia global . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.1. Deviance o desviacion . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.2. Contraste de Wald . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2. Odds Ratios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3. Efectos marginales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.1. Efectos marginales promedio . . . . . . . . . . . . . . . . . . . . . . . 11
3. Bondad de ajuste 13
3.1. Bondad de ajuste: Enfoque parametrico . . . . . . . . . . . . . . . . . . . . . 13
3.1.1. Docima de Hosmer-Lemeshow . . . . . . . . . . . . . . . . . . . . . . 13
3.1.2. R2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2. Bondad de ajuste: Enfoque no parametrico . . . . . . . . . . . . . . . . . . . 14
3.2.1. Curva ROC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4. Diagnostico del modelo 17
4.1. Deteccion de valores atıpicos . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.2. Normalidad de los residuos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.3. Especificacion del modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5. Conclusiones 24
6. Referencias 24
7. Anexo 24
7.1. Codigo R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2
1. Introduccion
Si bien el modelo lineal general (lease OLS) es un modelo muy util en un sinfın de
disciplinas, muchos fenomenos interesantes de la vida real no pueden representarse a traves
de variables cuantitativas como dicho metodo demanda. Es comun observar variables medidas
en escalas ordinales o nominales, sobre todo en ciencias sociales y medicas.
Para salvar esta dificultad surge una amplia gama de modelos llamados modelos lineales
generalizados en que todos ellos comparten la caracterıstica de pertenecer a la denominada
famila exponencial, una familia de distribuciones con propiedades estadısticas comunes. Lo
que amplia significativamente el abanico de posibilidades para modelar.
Dentro de esta familia existen varios modelos adecuados, bajo diferentes circunstancias,
para analizar variables dependiente de tipo binario, aunque por lejos, el mas famoso de todos
es el modelo logit, aunque el modelo probit le sigue bastante de cerca.
En este trabajo se intentara modelar la probabilidad de padecer un infarto al corazon a
partir de un set de variables asociadas a historial medico, caracterısticas y habitos saludables
para una muestra de 462 individuos. Se estima un modelo de regresion logıstica para a conti-
nuacion realizar un analisis exhaustivo con respecto a su estimacion, contrastes de hipotesis
y violacion de supuestos
1.1. El modelo de regresion logıstica
Sea xi un vector fila en el que se encuentra un patron de covariables para cada unidad
muestrla i y β un vector que contiene los parametros a estimar. Un modelo logit se caracteriza
por tener una funcion de enlace de la forma1:
g(πi) = logit(πi) = log
(πi
1− πi
)= x′iβ (1.1)
Esta funcion de enlace tiene la ventaja ademas de que permite obtener una interpretacion
directa de los coeficientes del modelo siempre y cuando se aplique antilogaritmo a la expresion
anterior.
πi1− πi
= exp(xiβ) (1.2)
Ası tambien, las probabilidades de observar un exito y un fracaso pueden obtenerse facil-
1log se refiere al logaritmo natural
3
mente
πi =exp(xiβ)
1 + exp(xiβ)1− πi =
1
1 + exp(xiβ)
Para estimar los parametros β y por tanto las πi es necesario utilizar el siguiente modelo.
Sean y1, ..., yn realizaciones de una variable aleatoria Yi ∼ binomial(ni, πi), donde ni corres-
ponde al numero de unidades muestrales con un mismo patron de covariables. La funcion de
masa de probabilidad de cada variable aleatoria Yi es entonces
P (Yi = yi) =
(niyi
)πyii (1− πi)ni−yi , yi = 0, 1, ..., ni (1.3)
Si denotamos a Λ como un vector con las probabilidades de cada individuo de la muestra y
y un vector de realizaciones de las variables aleatorias Yi, ..., Yn. Podemos escribir la funcion
de verosimilitud como
L(Λ,y) = L(π1, π2, ..., πn; y1, ..., yn) =n∏i=1
(niyi
)πyii (1− πi)ni−yi (1.4)
=n∏i=1
(niyi
)(πi
1− πi
)yi(1− πi)ni (*)
Si a la expresion (*) se le aplica logaritmo natural a ambos lados tendremos
l(Λ,y) =n∑i=1
[yi log
(πi
1− πi
)+ ni log(1− πi) + log
(niyi
)](1.5)
Si nos centramos en el argumento de la suma anterior, es facil identificar a dicha funcion
como parte de la familia exponencial pues
a(y) = y b(π) = log
(π
1− π
)c(π) = ni log(1− π) d(y) = log
(n
yi
)Tiene la forma canonica de la familia exponencial si recordamos que esta es
L(θ,y) = exp {a(y)b(θ) + c(θ) + d(y)} (1.6)
Ademas, si consideramos las expresiones obtenidas al comienzo, finalmente la funcion de
4
Cuadro 1: Descripcion de variables
Variable Descripcion
inf
Es una variable dicotomica que tomael valor 1 si el individuo tieneantecedentes familiares de infarto ycero de lo contrario
tabacTabaco acumulado en los pulmonesmedido en kilogramos
tipoaEs una escala que mide la propensiondel individuo a sufrir estres, va demenor a mayor
alc Consumo corriente de alcoholedad Edad del individuo
log-verosimilitud es
l(Λ,y) =n∑i=1
[yi(x
′iβ)− log(1 + exp(x′iβ) + log
(niyi
)](1.7)
De esta manera, para estimar los parametros β se utilizan indistintamente los procedimientos
inherentes a la familia exponencial.
1.2. Descripcion de los datos
Las variables del modelo se describen a continuacion
2. Estimacion e interpretacion del modelo propuesto
Para realizar inferencias sobre la significancia individual de cada coeficiente estimado en
un modelo de regresion logıstica, es necesario recurrir al teorema central del limite a traves del
cual puede afirmarse que en la medida en que una variable aleatoria se acerca a su verdadero
valor poblacional y se escala esta diferencia por el error estandar de dicho estadıstico este
converge en distribucion a una normal estandar
βj − βjee(βj)
d−−−→n→∞
N(0, 1). (2.1)
Es necesario, ser cautos al utilizar este resultado, pues su validez es asintotica. Esto significa
que en modelos lineales generalizados, es necesario contar con muestras grandes para asegurar
5
el cumplimiento de este supuesto.
Las hipotesis en que estamos interesados son las siguientes
H0 : βj = 0 vs H1 : βj 6= 0
De esta forma, el contraste consiste en comparar el estadıstico z calculado vs el valor cuantil
de la distribucion normal estandar (valor crıtico) asociado a un nivel de significacion fijado
por el investigador2, o en otras palabas, la maxima probabilidad de cometer error de tipo I3
que se esta dispuesto a tolerar.
La regla entonces para decidir si un estadıstico βj pertenece a la region de rechazo R es
la siguiente: ∣∣∣∣∣ βj
ee(βj)
∣∣∣∣∣ > z1−α/2 (2.2)
Con base en los resultados del modelo provistos en el cuadro 2 puede afirmarse que
con un nivel de significancia de 5 %, el valor crıtico para el estadıstico z es asociado es de
aproximadamente 1.9. Por lo tanto
hist: Se rechaza la hipotesis H0 : β1 = 0 pues el estadıstico z calculado (4.271) es mayor
al valor crıtico asociado a α = 5 %. Ademas, el valor p, P (z ∈ R|H0 es cierta) = 0,00002
es una probabilidad de equivocarse al rechazar mas pequena que el nivel de significancia
tabac: Se rechaza la hipotesis H0 : β2 = 0 pues el estadıstico z calculado (3.148) es
mayor al valor crıtico asociado a α = 5 %. Ademas, el valor p, P (z ∈ R|H0 es cierta) =
0,002 es una probabilidad de equivocarse al rechazar mas pequena que el nivel de
significancia
tipoa: Se rechaza la hipotesis H0 : β3 = 0 pues el estadıstico z calculado (3.190) es
mayor al valor crıtico asociado a α = 5 %. Ademas, el valor p, P (z ∈ R|H0 es cierta) =
0,002 es una probabilidad de equivocarse al rechazar mas pequena que el nivel de
significancia
alc: No puede rechazarse la hipotesis nula H0 : β4 = 0 pues el estadıstico z cal-
culado (-0.10) es menor al valor crıtico asociado. De esta forma el valor p, P (z ∈R|H0 es cierta) = 0,919 > 0,05 = α
2usualmente 10 %, 5 % y 1 %3La probabilidad de rechazar la hipotesis nula dado que esta es verdadera
6
Cuadro 2: Resultados de la regresion
Infarto al miocardio
Infarto
Historia familiar 0.954t = 4.271(0.223)
p = 0.00002∗∗∗
Tabaco Acumulado 0.084t = 3.148(0.027)
p = 0.002∗∗∗
Comportamiento tipo A 0.038t = 3.190(0.012)
p = 0.002∗∗∗
Alcohol −0.0004t = −0.102
(0.004)p = 0.919
Edad 0.055t = 5.522(0.010)
p = 0.00000∗∗∗
Constant −5.932t = −6.714
(0.884)p = 0.000∗∗∗
Observations 462Log Likelihood −242.352Akaike Inf. Crit. 496.704
Note: ∗p<0.1; ∗∗p<0.05; ∗∗∗p<0.01Errores estandar entre parentesis
7
edad:Se rechaza la hipotesis H0 : β5 = 0 pues el estadıstico z calculado (5.522) es mayor
al valor crıtico asociado a α = 5 %. Ademas, el valor p, P (z ∈ R|H0 es cierta) = 0,00000
es una probabilidad de equivocarse al rechazar mas pequena que el nivel de significancia
2.1. Contrastes de significancia global
2.1.1. Deviance o desviacion
En este caso la log verosimilitud del modelo propuesto se compara con la log verosimilitud
de un modelo minimal, en que todos los πi son iguales, es decir
π =
∑ni=1 yi∑ni=1 ni
(2.3)
El estadıstico de contraste puede escribirse como
D = 2[l(Λ; y)]− l(Λ; y)] (2.4)
Donde D ∼ χ2(p−1)
Estadıstico gl p.value1 111.40 5.00 0.00
2.1.2. Contraste de Wald
La idea que subyace al contraste de Wald es bastante sencilla, construiremos un estadıstico
dado por
W = βlIβl (2.5)
Donde βl es un subconjunto de coeficientes estimados I es la matriz de informacion de Fisher
para dicho subconjunto. Este estadıstico sigue una distribucion χ2(l) donde l es el numero de
parametros a docimar. En este caso incluimos todos los parametros del modelo a excepcion
del intercepto, de manera que el contraste es
H0 : β1 = ... = βp = 0 vs H1 : βj 6= 0
Si podemos rechazar la hipotesis nula, esto indica evidencia estadıstica para afirmar que los
parametros utilizados son importantes para explicar el fenomeno en cuestion
8
Estadıstico gl p.value1 77.93 5.00 0.00
2.2. Odds Ratios
Los coeficientes β obtenidos al realizar la regresion no son directamente interpretables.
Sin embargo, una manera de darles significado a estos es a traves de los odds ratios4. Los
que pueden calcularse de la siguiente forma: Sea xk+1 una variable explicativa de caracter
dicotomico, de manera que
πi1− πi
= exp(x′iβ) = exp(β1 + β2x1 + ...+ βk) (2.6)
Sea la razon entre exitos y fracasos para el individuo i y sea
πi′
1− πi′= exp(x′i′β) = exp(β1 + β2x1 + ...+ βk−1xk)
la razon entre exitos y fracasos para el individuo i′. Es decir, la unica diferencia entre ambos
individuos es la ausencia de la variable xk+1 para el individuo i′. Una medida de riesgo
relativo, entre ambos individuos y sus razones de exito fracaso puede expresarse como
πi/(1− πi)πi′/(1− πi′)
=exp(β1 + β2x1 + ...+ βk)
exp(β1 + β2x1 + ...+ βk−1xk)= exp(βk) (2.7)
Esta expresion puede leerse como, en cuantas veces aumenta el riesgo relativo de un individuo
frente a la presencia o ausencia de determinada caracterıstica. Naturalmente, para variable
ordinales, el resultado puede extenderse con facilidad para expresar el paso de un estado a
otro. Ası tambien para variables continuas, cuya relacion con el log odds sea lineal, puede in-
terpretarse como un aumento del riesgo relativo frente a cambios equiespaciados, usualmente
la unidad.
OddsRatio Std. Err. z P>|z|histPresente 2.60 0.58 4.27 0.00
tabac 1.09 0.03 3.15 0.00tipoa 1.04 0.01 3.19 0.00
alc 1.00 0.00 -0.10 0.92edad 1.06 0.01 5.52 0.00
4Para la estimacion de los odds ratios se ha utilizado el paquete mfx de R, sin embargo, dicho paquetetiene un error, pues incorpora los errores estandar de la regresion en sus resultados en lugar de los erroresestandar obtenidos por el metodo delta.
9
Para el modelo en comento, podemos observar lo siguiente:
hist Si una persona presenta un historial familiar de infarto, manteniendo todo lo demas
constantes, su odds de padecer un infarto es 260 % mayor que una que no lo presenta
tabac
Si una persona presenta un kilograma de tabaco acumulado mas que otra, manteniendo
todo lo demas constante, su odds de padecer un infarto es 109 % mayor.5
tipoa
Si una persona presenta un punto mas que otra en la escala de estres, manteniendo
todo lo demas constante, su odds aumenta en 104 %.
alc Si una persona presenta un consumo de alcohol de un punto mayor que otra, mante-
niendo todo lo demas constante, su odds es 100 % mayor.
edad
Un ano de aumento en la edad implica que el odds aumenta 100 %
2.3. Efectos marginales
Sea
πi =exp(x′iβ)
1 + exp(x′iβ)(2.8)
la probabilidad de que un individuo con un patron de covariables xi tenga determinada
caracterıstica de interes (en nuestro caso un infarto al corazon), podemos estar eventualmente
interesados en determinar cuanto aumenta dicha probabilidad cuando varıa alguna de las
variables predictoras. Esto en un modelo lineal es trivial pues el cambio marginal en la
variable respuesta es exactamente βj6 Naturalmente en un modelo no lineal, esto no ocurre,
por lo que para interpretar los coeficientes estimados se necesita un poco mas de trabajo. El
efecto marginal o contribucion marginal de un cambio en la variable xj a la probabilidad de
observar la caracterıstica de interes sera entonces:
∂πi∂xij
=∂
∂xij
[exp(x′iβ)
1 + exp(x′iβ)
]= πi(1− πi)βj (2.9)
5En el documento se describio a la variable como kg acumulados, quiza hablar de kilogramos sea raro,pero preferı seguir la pauta en lugar de realizar el ejemplo en relacion a una escala de medida mas pequena,quiza gramos
6 ∂Y∂xij
= βj
10
Como se desprende de la ecuacion anterior, los efectos marginales de un modelo lineal, a
diferencia de lo que ocurre en un modelo lineal, incorporan la influencia de todas las demas
covariables sobre la variacion del fenomeno interes. Dicho efecto marginal es unico entonces
para cada individuo de acuerdo a su patron de covariables, pero utilizar estos entonces puede
ser poco informativo, un enfoque bastante aceptado en la practica es el uso de los llamados
efectos marginales promedio, que no es mas que calcular la media de los efectos marginales
individuales, es decir
AME =1
n
n∑i=1
πi(1− πi)βj. (2.10)
De manera mas general, puede resumirse la expresion anterior en terminos vectoriales. Sea
Λ(X′β) un vector con las probabilidades predichas para cada individuo, entonces, el vector
de efectos marginales sera:
∂Λ(X′β)
∂X′β= Λ(X′β)[1− Λ(X′β)]β = Λ[1− Λ]β (2.11)
Para calcular los errores estandar suele recurrirse al metodo delta, de manera que si g(β) =
Λ[1−Λ]β es una transformacion del modelo original, su matriz de covarianzas ha de obtenerse
a traves del metodo delta, de manera que para ello es primero necesario obtener el termino
Λ[1− Λ]∂β
β′+ β
∂Λ[1− Λ]
∂X′β
∂X′β
∂β= Λ[1− Λ]I +
∂Λ[1− Λ]
∂X′ββX′
∂Λ[1− Λ]
∂X′β= Λ(1− Λ)[1− 2Λ]
Con esto en mente, puede obtenerse la matrix de covarianzas de los efectos marginales como:
V ar(g(β)) = [Λ(1− Λ)]2[I + (1− 2Λ)]V[I + (1− 2Λ)Xβ] (2.12)
Donde V es la matriz de covarianzas asintotica de β, obtenida como de costumbre
2.3.1. Efectos marginales promedio
. Para nuestro caso los efectos marginales se presentan a continuacion
11
dF/dx Std. Err. z P>|z|histPresente 0.18 0.04 4.27 0.00
tabac 0.01 0.00 2.97 0.00tipoa 0.01 0.00 3.01 0.00
alc -0.00 0.00 -0.10 0.92edad 0.01 0.00 4.76 0.00
Cuadro 3: Efectos marginales promedio
Los resultados del cuadro 3 pueden interpretarse de la siguiente forma7
Historia Familiar
Si un individuo tiene antecedentes de infarto en su familia, su probabilidad de padecer
la enfermedad aumenta en 18 %, en promedio
Tabaco
Por cada kg de tabaco acumulado la probabilidad de sufrir un infarto aumenta 1 %, en
promedio
Comportamiento Tipo A
Por cada punto de aumento en la escala la probabilidad de padecer un infarto aumenta
un 1 %
Alcohol
El alcohol tiene un efecto insignificante sobre la probabilidad de padecer un infarto
Edad
Por cada ano, la probabilidad de padecer un infarto aumenta un 1 %, en promedio
7Para la estimacion de los efectos marginales (cuadro 3) se ha utilizado el paquete mfx de R, sin embargo,dicho paquete tiene un error, pues incorpora los errores estandar de la regresion en sus resultados en lugarde los errores estandar obtenidos por el metodo delta. Los efectos marginales estimados fueron programadosy se verifico que los resultados son iguales, no ası para el caso de los errores estandar. De todas maneras,dichos errores estandar no son presentados en el informe por falta de tiempo
12
3. Bondad de ajuste
3.1. Bondad de ajuste: Enfoque parametrico
3.1.1. Docima de Hosmer-Lemeshow
Si el patron de covariables entre los individuos no es lo suficientemente numeroso (Vease
seccion 4.2) como ocurre cuando hay variables continuas como predictoras. El metodo de
bondad de ajuste de Pearson no es adecuado. Para salvar este problema Hosmer & Lemeshow
desarrollaron un contraste diferente, basado en la expresion
C =
g∑k=1
(O1k − nkπk)2
nkπk(1− πk)(3.1)
Donde
πk = 1nk
∑ckk=1mjπj
o1k =∑ck
j=1 yj
La idea tras el contraste es sencilla. Se ordenan las probabilidades predichas para toda la
muestra y se dividen en g grupos (generalmente 10). Luego se enumera el numero de indivi-
duos en cada grupo nk y se calcula el promedio de sus probabilidades predichas πk. Hosmer
& Lemeshow demostraron que dicho estadıstico de prueba sigue una distribucion χ2g−2 in-
clusive en el caso extremo en que J (el numero de patrones e covariables) sea igual a n (el
numero de individuos). Una idea intuitiva para formular la hipotesis del contraste es que si
el modelo ajusta a los datos, la diferencia entre las frecuencias observadas y el producto de
las probabilidades predichas por el numero de individuos han de ser cercanas, por lo que el
estadıstico tendra un valor cercano a cero. Ası, la hipotesis nula es
H0 : El modelo ajusta bien a los datos (3.2)
Para nuestro ejemplo y dado el problema presentado frente al uso de dos variables continuas,
podemos observar de todas formas que no se puede rechazar la hipotesis nula dados los valores
en el cuadro 4
13
Cuadro 4: Contraste de bondad de ajuste de Hosmer-Lemeshow
statistic.Chi-cuadrado parameter.gl p.value
9.30003724917886 8 0.317620882360259
3.1.2. R2
Al igual que en modelos de regresion multiple puede ajustar una medida de bondad de
ajuste de espıritu similar a R2, aunque a diferencia de lo que ocurre en el caso lineal, dicha
medida se construye a partir de las verosimilitud en lugar de la suma de cuadrados. Dicho
estadıstico esta dado por la siguiente expresion
R2 =l(π)− l(π)
l(π)(3.3)
Donde l(π) es la log-verosimilitud del modelo propuesto y l((π)) es la log-verosimilitud del
modelo minimal. En este ejercicio el valor de R2 es de 0.187. Valor bastante aceptable para
un modelo no lineal como el logit, pues ha de recordarse que en general estos modelos tienen
valores bajos en relacion a los modelos lineales.
3.2. Bondad de ajuste: Enfoque no parametrico
3.2.1. Curva ROC
Un enfoque bastante popular en ciertas disciplinas es el uso de tablas de clasificacion para
determinar la eficacia discriminativa del modelo. Para la construccion de estas tablas de clasi-
ficacion sin embargo es necesario determina un punto de corte o umbral pues recordemos que
la probabilidad predicha es una variable continua. A partir de dicho umbral se considera que
el modelo pronostica un exito. Una tabla de clasificacion tıpica tiene la siguiente estructura
Cuadro 5: Tabla de clasificacion
PredichosObservados
1 0 total
1 Verdaderos positivos Falsos Positivos Positivos predichos0 Falsos positivos Verdaderos Negativos Negativos predichos
Total Positivos Total Negativos Total
14
Como puede observarse los Verdaderos positivos son el numero de observaciones que el
modelo clasifica como exitos y que efectivamente lo son, mientras que los verdaderos negativos
son el numero de observaciones que el modelo clasifica como fracasos y que efectivamente lo
son. De esta manera pueden derivarse dos metricas: La sensibilidad, la cual no es mas que el
porcentaje de verdaderos positivos sobre el total de exitos y la especificidad que no es mas
que el porcentaje de verdaderos negativos sobre el total de fracasos.
Sensibilidad =Verdaderos positivos
Total Positivos(3.4)
Especificidad =Verdaderos Negativos
Total Negativos(3.5)
Ciertamente, la eleccion del umbral no es trivial. Aunque en la literatura existen variados
criterios para escoger un umbral adecuado de clasificacion, como el ındice J de Youden el
cual busca maximizar la suma entre sensibilidad y especificidad. La eleccion del umbral mas
comun es 0.5 lo cual sirve para contrastar la eficacia discriminativa cuando se le compora
con lanzar una moneda.
A pesar de la utilidad del uso de umbrales, estos siempre tendran cierto grado de arbi-
trariedad una medida mas completa del panorama de clasificacion esta dado por la curva
ROC. La curva ROC o curva de operacion caracterıstica, es una grafica que se construye
a partir de todas las posibles combinaciones entre sensibilidad y la tasa de falsos negativos
(1-especificidad). En particular, interesa el area entre dicha curva y una recta de 45 % grados
la cual indica la capacidad de discriminacion que provee lanzar una moneda. A continuacion
se presentan las posibles lecturas de acuerdo a diferentes valores del area bajo la curva ROC
(AUC)
Cuadro 6: Area bajo la curva ROC
AUC Interpretacion
AUC = 0,5Esto sugiere no discriminacion.Identico a arrojar una moneda
0,5 < AUC < 0,7Discriminacion pobre, no mucho mejorque el caso anterior
0,7 < AUC < 0,8Se considera con capacidad aceptablede discriminacion
0,8 < AUC < 0,9 Excelente capacidad de discriminacon
15
0
5
10
15
20
25
0.00 0.25 0.50 0.75 1.00Probabilidades predichas
Fre
cuen
cia
(a) Infarto==0
0.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.7830.783
0.00
0.25
0.50
0.75
1.00
0.00 0.25 0.50 0.75 1.00Tasa Falsos Positivos (1−Especificidad)
Tasa
de
verd
ader
os p
ositi
vos
(Sen
sibi
lidad
)
(b) Curva ROC
Figura 1: Bondad de ajuste del modelo
0
5
10
15
0.00 0.25 0.50 0.75 1.00Probabilidades predichas
Fre
cuen
cia
(a) Infarto==1
0.00
0.25
0.50
0.75
1.00
0.00 0.25 0.50 0.75Probabilidades predichas
Infa
rto
al c
oraz
ón
(b) Curva ROC
Figura 2: Bondad de ajuste del modelo
16
Las figuras 1 y 2 nos muestran varios graficos que pueden ser utilizados para evaluar
la calidad del modelo ajustado. El panel a) de la figura 1 una muestra un histograma de
probabilidades predichas para un fracaso (en este caso la ausencia de un infarto). Es de
esperar que si la distribucion de la probabilidades predichas esta sesgada en alguna direccion,
dicha direccion indica si el modelo esta en mayor o en menor medida inclinado a detectar
exitos o fracasos. Como puede observarse la distribucion parece ser simetrica, una situacion
similar ocurre con el panel a) de la figura 2, lo cual indica una buena calidad de ajuste.
Por otro lado, en el panel b) de la figura 1 puede observarse la representacion grafica
de la curva ROC junto a su indicador AUC. Puede observarse que la curva es mas bien
pronuncia y que el area bajo la curva es de 0.78, esto indica una capacidad discriminativa
del modelo bastante aceptable, cercana al punto de excelencia. Por ultimo, el panel b) de la
figura 2 muestra un diagrama de dispersion entre las probabilidades predichas y la variable
respuesta. Es de esperarse que en un modelo con buena calidad de ajuste se observe una
distribucion mas o menos pareja entre ambas categorıas, lo que tambien se cumple para el
modelo en comento.
4. Diagnostico del modelo
En este apartado se utilizaran solo aquellas observaciones con patrones de covariables
unicos, xj, como sugiere Hosmer & Lemeshow (2013).
4.1. Deteccion de valores atıpicos
Para la deteccion de valores atıpicos en un modelo de regresion logıstica existen varias
aproximaciones de naturaleza similar a las utilizadas en el modelo lineal general.
Por ejemplo, para calcular el leverage o apalancamiento de determinado patron de co-
variables Pregibon (1981, citado en Hosmer & Lemeshow 2013) sugiere utilizar la siguiente
expresion
H = V1/2X(X′VX)−1X′V1/2 (4.1)
Donde
vj = mjπ(xj)[1 − π(xj)] es el estimador de la varianza del model para cada xj y a su
vez, un elemento de la diagonal de V .
De esta manera, hj muestra el apalancamiento de cada una de las observaciones, lo que
17
corresponde a cada j-esimo elemento de la matriz H.
hj = mjπ(xj)[1− π(xj)]︸ ︷︷ ︸vj
x′j(X′VX)−1xj︸ ︷︷ ︸bj
(4.2)
Como puede observarse cada elemento es el producto de la varianza multiplicada por un
factor que muestra la distancia entre xj y el centro del espacio de covariables x. Al igual que
en el caso de la regresion lineal multiple la suma∑J
j=1 hj es igual al numero de parametros
estimados en el modelo. Por analogıa al caso de la regresıon lineal, puede considerarse a un
patron de covariables como atıpico en la medida en que supere el umbral de 2p/n con p el
numero de parametros del modelo.
Otra estadıstica muy utilizada en el contexto del analisis de regresion logıstica es la llama-
da distancia de cook. Dicha estadıstica esta basada sobre la influencia que tiene determinada
observacion sobre los coeficientes estimados, puede ser calculada como
∆βj =r2jhj
(1− hj)2(4.3)
Donde hj es el apalancamiento y rj denota los residuos de pearson. De acuerdo a Pregi-
bon(1981, citado en Hosmer & Lemeshow (2013)) una observacion puede considerarse como
atıpica en la medida en que sea mayor que hhχ2(0,95,1) con hh =
∑Jj=1
hj/(1−hj)n
.
Otra estadıstica muy utilizada para la evaluacion de la presencia de valores atıpicos es
aquella que considera el cambio en la devianza en la medida en que se quita cada observacion,
esta puede ser calculada como
∆Dj =d2j
1− hj(4.4)
Donde dj es el residuo deviance. Como se puede desprender de la figura a continuacion a
traves de estos criterios, por separado, pueeden encontrarse numerosos valores atıpicos en la
regresion. Sin embargo, Hosmer & Lemeshow (2013) sugiere utilizar la interseccion de cada
uno de estos, es decir, aquellos que simultaneamente son valores atıpicos segun los criterios
recien descritos.
Siguiendo esta recomendacion se ha determinado que la lista de patrones de covariables
atıpicas son las correspondientes a las observaciones: 456,447,412,385,375,372,337,334,285,261,236,231,162,155,156,133,115,106,25,1.
18
1
11 12
25
56
106 115
132 150
155
156
162
166180
187
231
236
251
285321
334
337
372375
385
398
399
411
417
450
0.02
0.04
0.06
0.08
0.00 0.25 0.50 0.75Probabilidades predichas
Leve
rage
(a) Leverage
2125
3663
106 130
132133
155
187261
307
326
334
337
346
372
385
398
456
0.00
0.05
0.10
0.00 0.25 0.50 0.75Probabilidades predichas
Coo
k's
Dis
tanc
e
(b) Distancias de cook
Figura 3: Valores atıpicos
0
2
4
6
0.00 0.25 0.50 0.75Probabilidades predichas
Del
ta D
evia
nce
(a) Delta Deviance
2136130
133
149191
261
447
456
0
5
10
15
20
0.00 0.25 0.50 0.75Probabilidades predichas
Del
ta C
hi2
(b) Delta Chi
Figura 4: Valores atıpicos
19
Cuadro 7: Resultados de la regresion sin valores atıpicos
Dependent variable:
inf
(1) (2)
histPresente 0.954∗∗∗ 0.988∗∗∗
(0.223) (0.233)
tabac 0.084∗∗∗ 0.079∗∗
(0.027) (0.031)
tipoa 0.038∗∗∗ 0.052∗∗∗
(0.012) (0.013)
alc −0.0004 −0.0001(0.004) (0.006)
edad 0.055∗∗∗ 0.064∗∗∗
(0.010) (0.011)
Constant −5.932∗∗∗ −7.157∗∗∗
(0.884) (1.000)
Observations 462 442Log Likelihood −242.352 −221.910Akaike Inf. Crit. 496.704 455.820
Note: ∗p<0.1; ∗∗p<0.05; ∗∗∗p<0.01
Como se puede observar en el cuadro anterior, el quitar aquellas observaciones considera-
das como valores atıpicos ha significado un cambio en general en el modelo. Como siempre,
este es un mero ejercicio ilustrativo, pues eliminar observaciones influyentes no es una opcion
pues es el modelo quien debe adecuarse a la realidad y no viceversa. Una posible causa de la
presencia de valores atıpicos puede ser la omision de alguna variable relevante en el modelo.
4.2. Normalidad de los residuos
Como se menciono en la seccion 2, la distribucion de los estadısticos de prueba en la
regresion logıstica (ası como en los demas modelos lineales generalizados) descansa en el
20
teorema central del lımite, por lo que los contrastes utilizados seran validos asintoticamente.
Por contraste, en el modelo lineal general dicho supuesto es clave, en la medida en que en
este descansa la distribucion de los estimadores βOLS para poblaciones finitas. Aun ası, puede
observarse que para el caso de los residuos de pearson, los cuales estan dados por la expresion
rj =yj − njπj√nj(1− nj)
(4.5)
Si recordamos que yj es una variable aleatoria binomial, podrıa esperarse que si el tamano
nj de sujetos es lo suficientemente grande, dicho residuo siga una distribucion normal, pues
ha de recordarse que siempre y cuando nj → ∞ la distribucion normal puede aproximar
relativamente bien a la binomial. Puede utilizarse un argumento similar para los residuos
deviance. Ciertamente, si los residuos de pearson no siguen una distribucion normal, esto
invalida el uso del contraste χ2 de bondad de ajuste
Para el modelo que se esta estimando en particular, puede notarse que dado a que tiene
dos variables continuas en su estructura de covariables, en las 462 observaciones podemos
encontrar tan solo un patron de variables repetido. De esta manera la aproximacion recien
mencionada no tiene mucho sentido. Este supuesto serıa mas factible de evaluar en un modelo
con variables exclusivamente categoricas e inclusive ordinales.
Aun ası, se han construido dos histogramas, como puede apreciarse en las figuras a con-
tinuacion. En ellas se muestra como tanto la distribucion de los residuos deviance como los
residuos de pearson presentan distribuciones bimodales que por cierto nada tienen que ver
con la distribucion normal.
21
0
5
10
15
20
−2 −1 0 1 2Residuos deviance
Fre
cuen
cia
(a) Histograma residuos Deviance estandarizados
0
10
20
−2.5 0.0 2.5 5.0Residuos de Pearson
Fre
cuen
cia
(b) Residuos deviance vs probabilidades predichas
Figura 5: Normalidad de los residuos
4.3. Especificacion del modelo
Una de las razones que pueden explicar la presencia de valores atıpicos, eventualmente,
puede ser el uso de una forma funcional incorrecta o bien la falta de variables importantes en
el modelo. Para intentar dirimir sobre este problema se han estimado 3 modelos alternativos,
con todas las observaciones, en las que incluimos interacciones con la unica variable categorica
del modelo, hist, como puede observarse dichas interacciones no resultaron ser significativas.
Ademas, como criterio informal, para comparar modelos anidados suele utilizarse el criterio
de informacion de akaike (AIC)
AIC = 2k − 2l(π,y) (4.6)
De entre un conjunto de modelos anidados (o no anidados, aunque existe controversia al
respecto) ha de escogerse aquel con menor AIC, ya que este penaliza por el numero de
parametros estimados. Como puede observarse en el cuadro 8, la inclusion de mas variables
en el modelo a traves de interacciones no mejora la verosimilitud del modelo lo que queda
reflejado en que el modelo original ajusta mejor que los modelos aumentados. De esta forma,
22
la inclusion de interacciones (al menos las aquı propuestas) no son una solucion para una
mejor seleccion del modelo propuesto
Cuadro 8
Dependent variable:
inf
(1) (2) (3)
histPresente −0.102 −0.096 −0.268(0.923) (0.925) (0.945)
tabac 0.087∗∗∗ 0.084∗∗ 0.088∗∗∗
(0.027) (0.033) (0.034)
tipoa 0.039∗∗∗ 0.039∗∗∗ 0.039∗∗∗
(0.012) (0.012) (0.012)
alc −0.0002 −0.0002 −0.006(0.004) (0.004) (0.007)
edad 0.046∗∗∗ 0.046∗∗∗ 0.046∗∗∗
(0.012) (0.013) (0.013)
histPresente:edad 0.022 0.022 0.023(0.019) (0.020) (0.020)
histPresente:tabac 0.006 −0.003(0.055) (0.056)
histPresente:alc 0.009(0.009)
Constant −5.558∗∗∗ −5.557∗∗∗ −5.474∗∗∗
(0.924) (0.924) (0.923)
Observations 462 462 462Log Likelihood −241.646 −241.639 −241.194Akaike Inf. Crit. 497.291 499.278 500.388
Note: ∗p<0.1; ∗∗p<0.05; ∗∗∗p<0.01
23
5. Conclusiones
Del presente informe se desprende que el modelo aquı propuesto en general ajusta bastan-
te bien a los datos. Aunque se observa una presencia importante de valores atıpicos. Dichos
valores atıpicos pueden ser fruto de una pobre especificacion del modelo a traves de la omi-
sion de variables explicativas relevantes. Se sugiere incorporar variables de la base de datos
completa para reajusta el modelo y evaluar nuevamente la performance de este.
6. Referencias
[1] Alan Agresti y Maria Kateri. Categorical data analysis. Springer, 2011.
[2] Annette J Dobson y Adrian Barnett. An introduction to generalized linear models. CRC
press, 2008.
[3] William H Greene. Econometric analysis. Pearson Education India, 2003.
[4] David W Hosmer Jr, Stanley Lemeshow y Rodney X Sturdivant. Applied logistic regres-
sion. Vol. 398. John Wiley & Sons, 2013.
7. Anexo
7.1. Codigo R
A continuacion se presentan los datos de la sesion en R
sessionInfo()
## R version 3.2.3 (2015-12-10)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 14.04.3 LTS
##
## locale:
## [1] LC_CTYPE=es_CL.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=es_CL.UTF-8 LC_COLLATE=es_CL.UTF-8
## [5] LC_MONETARY=es_CL.UTF-8 LC_MESSAGES=es_CL.UTF-8
## [7] LC_PAPER=es_CL.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=es_CL.UTF-8 LC_IDENTIFICATION=C
##
24
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] epiR_0.9-69 survival_2.38-3 ggplot2_2.0.0 mfx_1.1
## [5] betareg_3.0-5 MASS_7.3-45 lmtest_0.9-34 zoo_1.7-12
## [9] sandwich_2.3-4 xtable_1.8-0 stargazer_5.2 knitr_1.11
##
## loaded via a namespace (and not attached):
## [1] flexmix_2.3-13 Rcpp_0.12.2 Formula_1.2-1
## [4] magrittr_1.5 splines_3.2.3 munsell_0.4.2
## [7] colorspace_1.2-6 lattice_0.20-33 BiasedUrn_1.07
## [10] plyr_1.8.3 stringr_1.0.0 tools_3.2.3
## [13] nnet_7.3-11 grid_3.2.3 gtable_0.1.2
## [16] modeltools_0.2-21 formatR_1.2.1 evaluate_0.8
## [19] labeling_0.3 stringi_1.0-1 scales_0.3.0
## [22] stats4_3.2.3
A continuacion se presenta el codigo utilizado para la carga de la base de datos en el
programa
rm(list=ls())
inf<-read.csv("/home/hector/Dropbox/Magıster/Linear_Models/infarto.csv",
header=TRUE)
names(inf)
inf$inf<-factor(inf$inf)
levels(inf$inf)<-c("Infarto", "otro caso")
sapply(inf, class) #para que me muestre todas clases
#de los objetos contenidos en el data.frame
vars<-data.frame(inf=inf$inf,hist=inf$hist,
tabac=inf$tabac, tipoa=inf$tipoa,
alc=inf$alc, edad=inf$edad)
A continuacion se presenta el codigo utilizado para estimar el modelo inicial en la seccion2
25
#=============================================================================================
# glm: Es una funcion del paquete basico stats,
# permite estimar todo tipo de modelos lineales generalizados
# stargazer: Es una funcion del paquete del mismo nombre,
# permite transcribir los resultados en formato latex para una buena presentacion
#=============================================================================================
formula<-inf~hist+tabac+tipoa+alc+edad
inf.glm<-glm(formula,family=binomial(link = "logit"),
data=vars)
stargazer(inf.glm,ci=FALSE,title="Resultados de la regresion",
dep.var.labels=c("Infarto"), covariate.labels=c("Historia familiar",
"Tabaco Acumulado",
"Comportamiento tipo A",
"Alcohol", "Edad"),
table.placement = "H", dep.var.caption = "Infarto al miocardio",
report="vctsp*", notes.align="l",
notes = c("Errores estandar entre parentesis"),
font.size="footnotesize")
A continuacion se presenta el codigo utilizado para los calculos realizados en la seccion
2.1.1
library(xtable)
ji<-with(inf.glm,null.deviance - deviance)
gl<-with(inf.glm,df.null - df.residual)
p<-with(inf.glm, pchisq(null.deviance - deviance, df.null - df.residual, lower.tail = FALSE))
deviance<-cbind(ji,gl,p)
colnames(deviance)<-c("Estadıstico", "gl", "p.value")
xtable(deviance)
A continuacion se presenta el codigo utilizado para la seccion 2.1.2
a1<-c(0,1,0,0,0,0)
a2<-c(0,0,1,0,0,0)
a3<-c(0,0,0,1,0,0)
a4<-c(0,0,0,0,1,0)
a5<-c(0,0,0,0,0,1)
A<-rbind(a1,a2,a3,a4,a5)
26
wald<-t(A%*%coef(inf.glm))%*%solve(A%*%summary(inf.glm)$cov.unscaled%*%t(A))%*%(A%*%coef(inf.glm))
test<-pchisq(wald,dim(A)[1], lower.tail =FALSE)
wald.test<-cbind(wald,dim(A)[1],test)
colnames(wald.test)<-c("Estadıstico", "gl", "p.value")
rownames(wald.test)<-c("")
print(xtable(wald.test), table.placement="H")
A continuacion se presenta el codigo utilizado para calcular los efectos marginales de laseccion ??: Efectos marginales
#===========================================================================
# MargEff: Calcula efectos marginales para modelos logit o probit
# NOTAS:
# - la funcion asume que el modelo tiene intercepto
# - stopifnot: detiene el proceso si no se cumple la condicion
# - switch: selecciona una lista de alternativas
# - outer: Aplica una version del producto de kronecker a los vectores
#===========================================================================
MargEff = function(objBinGLM) {stopifnot(objBinGLM$family$family == "binomial") # Se detine si el objeto no
#pertenece a la familia binomial
vMargEff = switch(objBinGLM$family$link,
probit = colMeans(outer(dnorm(predict(objBinGLM,
type = "link"))
, coef(objBinGLM))[, -1]),
logit = colMeans(outer(dlogis(predict(objBinGLM,
type = "link")), coef(objBinGLM))[, -1])
) # Este apartado permite calcular el promedio ponderado
#por la funcion de densidad de las probabilidades predichas ##
return(vMargEff)
}MargEff(inf.glm)
#============================================================================
# MargeffBoot: Calcula errores estandar bootstrap para los efectos marginales
# Nota: Requiere instalar el paquete car
#============================================================================
library(car)
MargEffBoot = Boot(object = inf.glm, f = MargEff,
labels = names(coef(inf.glm))[-1], R = 1000)
summary(MargEffBoot)
27
A continuacion se presenta el codigo desarrollado para calcular el contraste de Hosmer-Lemshow de la seccion
#=============================================================
# hosmer.lemeshow.test: Contraste de Hosmer Lemeshow
#=============================================================
hosmer.lemeshow.test<-function (x, y, g = 10)
{DNAME <- paste(deparse(substitute(x)), deparse(substitute(y)),
sep = ", ")
METHOD <- "Constraste de Bondad de ajuste de Hosmer & Lemeshow"
yhat <- y
y <- x
qq <- unique(quantile(yhat, probs = seq(0, 1, 1/g)))
#Calcula los cuantiles observados para los valores predichos.
cutyhat <- cut(yhat, breaks = qq, include.lowest = TRUE)
#Clasifica cada observacion en su respectivo cuantil, de acuerdo
#a la expresion anterior.
observed <- xtabs(cbind(y0 = 1 - y, y1 = y) ~ cutyhat)
#Realiza una tabla de contingencia donde agrupa los datos
#observados en los intervalos previos
expected <- xtabs(cbind(yhat0 = 1 - yhat, yhat1 = yhat) ~
cutyhat)
#Realiza una tabla de contingencia donde agrupa los datos
#predichos en los intervalos previos
chisq <- sum((observed - expected)^2/expected)
PVAL = pchisq(chisq, g - 2, lower.tail=FALSE)
PARAMETER <- g - 2
names(chisq) <- "Chi-cuadrado"
names(PARAMETER) <- "gl"
structure(list(statistic = chisq, parameter = PARAMETER,
p.value = PVAL, method = METHOD, data.name = DNAME, observed = observed,
expected = expected), class = "htest")
}hosmer.lemeshow.test(inf.glm$y, fitted(inf.glm))
A continuacion se presenta el codigo necesario para construir la curva ROC de la seccion
rocdata <- function(grp, pred){# Produce las coordenadas x e y para la curva ROC
# Argumentos: grp - valores observados
# pred - valores predichos
28
# Output: List with 2 components:
# roc = data.frame with x and y co-ordinates of plot
# stats = data.frame containing: area under ROC curve, p value, upper and lower 95% confidence interval
grp <- as.factor(grp)
if (length(pred) != length(grp)) {stop("The number of classifiers must match the number of data points")
}
if (length(levels(grp)) != 2) {stop("There must only be 2 values for the classifier")
}
cut <- unique(pred)
tp <- sapply(cut, function(x) length(which(pred > x & grp == levels(grp)[2])))
fn <- sapply(cut, function(x) length(which(pred < x & grp == levels(grp)[2])))
fp <- sapply(cut, function(x) length(which(pred > x & grp == levels(grp)[1])))
tn <- sapply(cut, function(x) length(which(pred < x & grp == levels(grp)[1])))
tpr <- tp / (tp + fn)
fpr <- fp / (fp + tn)
roc = data.frame(x = fpr, y = tpr)
roc <- roc[order(roc$x, roc$y),]
i <- 2:nrow(roc)
auc <- (roc$x[i] - roc$x[i - 1]) %*% (roc$y[i] + roc$y[i - 1])/2
pos <- pred[grp == levels(grp)[2]]
neg <- pred[grp == levels(grp)[1]]
q1 <- auc/(2-auc)
q2 <- (2*auc^2)/(1+auc)
se.auc <- sqrt(((auc * (1 - auc))
+ ((length(pos) -1)*(q1 - auc^2)) +
((length(neg) -1)*(q2 - auc^2)))/(length(pos)*length(neg)))
ci.upper <- auc + (se.auc * 0.96)
ci.lower <- auc - (se.auc * 0.96)
se.auc.null <- sqrt((1 + length(pos) + length(neg))/(12*length(pos)*length(neg)))
z <- (auc - 0.5)/se.auc.null
p <- 2*pnorm(-abs(z))
stats <- data.frame (auc = auc,
29
p.value = p,
ci.upper = ci.upper,
ci.lower = ci.lower
)
return (list(roc = roc, stats = stats))
}coordenadas<-rocdata(vars$inf, fitted(inf.glm))
class(coordenadas$stats$auc)
library(ggplot2)
curva.roc<-ggplot(coordenadas$roc, aes(x = x, y = y)) +
geom_line(aes(colour = "red", size=3)) +
geom_abline (intercept = 0, slope = 1, size=2) +
scale_x_continuous("Tasa Falsos Positivos (1-Especificidad)") +
scale_y_continuous("Tasa de verdaderos positivos (Sensibilidad)")+
theme(legend.position="none")+theme(axis.text=element_text(size=14),
axis.title=element_text(size=14))+
geom_text(x = 0.75, y = 0.25, label = round(coordenadas$stats,3),
parse = TRUE, size=8)
curva.roc
30