Practica 04

Limpieza de Datos

Lo primero que se debe realizar es la limpieza de datos,para esto se debe de importar los datos para ver como estan distribuidos con que datos estamos trabajando.

Ya cargados los datos vemos que estos nos dicen practicamente nada de nuestra base, falta entrar en un contexto sobre lo que estamos revisando, analizando lo que nos da la página, tenemos el siguiente resumen de nuestra base.

La información sobre la base nos indica que cada atributo y los divide en Clinicos e Hispatologicos, estos se ven de la siguiente forma

  • Clinicos: Estas variables tratan temas visibles acerca de la enfermedad
    • Erythema: Enrojecimiento de la Piel
    • Scaling: Piel Escamosa
    • Definite Borders: Bordes definidos en la anomalía
    • Itching: Picazón
    • Koebner Phenomenon: Se refiere cuando personas con cierta enfermedad dermatológica manifestan lesiones de la enfermedad en otras lesiones sobre piel sana
    • Polygonal Papules: Presencia de pápulas poligonales
    • Follicular Papules: Presencia de pápulas foliculares
    • Oral Mucosal Inv.: Presencia de Mucosa Oral
    • Knee and Elbow Inv.: Presencia en Rodillas y Codos
    • Scalp Inv.: Presencia en Cuero Cabelludo
    • Family History: Historial Familiar (Si se cuenta con algun caso en la familia)
    • Age: Edad del paciente en cuestion
  • Histopatologicos: Estas variables tratan resultados de estudios
    • Melanin Incontinence: Incontinencia Melanica
    • Eosinophils in infiltrate: Infiltración Eosinofilica (Normalmente en tejido gastrointestinal)
    • PNL Infiltrate: Presencia de “Pure Neuritic Leprosy”
    • Fiborsis Papillary Dermis: Presencia de Fibrosis Dermica
    • Exocytosis: Proceso durable que consume energía y en el cual una célula dirige el contenido de sus vesículas secretoras hacia fuera de la célula
    • Acanthosis: Presencia de areas oscuras y aterciopeladas en pliegues del cuerpo
    • Hyperkeratosis: Presencia de engrosamiento de la capa externa de la piel
    • Parakeratosis: Alteración en el proceso de queratinización de la piel
    • Clubbing Rete Ridges: Presencia de extensiones epiteliales que se project bajo tejido en piel y membranas mucosas
    • Elongation Rete Ridges: Presencia de hiperpigmentación
    • Thinning Suprapapillary Epidermis: Adelgazamiento de la epidermis suprapapilar
    • Spongiform Pustule: Presencia de una colección de local de neutrofilos subcorneales
    • Munro Microabcess: Presencia de una colección de abseso de neutrofilos intracorneales
    • Focal Hypergranulosis: Presencia de hipergranulosis focal
    • Disappearance of granular layer: Desaparición de las capas granulares
    • Vacuolisation and Damage of Basal Layer: Vacuolización y Daño de la capa Basal
    • Spongiosis: Presencia de un edema intercelular
    • Saw-tooth appearence of retes: Aparición de patrones de Sierra bajo el tejido en piel
    • Follicular Horn Plug: Presencia de tapones de cuerno folicular
    • Perifollicular parakeratosis: Condición de la Mucosa Rumen
    • Inflamatory mononuclear infiltrate: Resultado de un estudio para filtrar celular con posibles tumores
    • Band-like infiltrate: Afectación de la epidermis basal en un patrón de bandas

Según la información de la pagina de la Base, hay 34 atributos dentro del dataset pero entonces a que se refiere la columna 35 ? Esta ultima se refiere a la clase de Enfermedad Dermatologica que se esta tratando.

  • Clase Enfermedad
    • Valor 1: Psoriasis
    • Valor 2: Seboreic Dermatitis
    • Valor 3: Lichen Planus
    • Valor 4: Pityariasis Rosea
    • Valor 5: Cronic Dermatitis
    • Valor 6: Pityariasis Rubra Pilaris

Ahora, necesitariamos renombrar cada columna en base a lo que significa dentro de nuestro dataset

Entonces tenemos que se vería de la siguiente forma

Ahora bien, para asegurarnos que los datos esten correctos, tenemos que ver los valores que pueden llegar a tomar para ver que no haya una inconsistencia en los datos, tomando en cuenta lo que nos dice la descripción de los datos en la página de donde se obtuvieron, tenemos que las variables toman los siguientes datos

  • Clinicos:
    • Toman valores de 0 a 3 (Excepto Family History que toma de 0 o 1), en donde 0 es la no presencia del padecimiento, 3 una fuerte presencia del padecimiento y 1,2 son puntos intermedios, en caso de Family History, 0 es cuando no se presentan antecedentes y 1 es lo contrario. La edad simplemente es un integral que representa la edad del paciente al momento del estudio
  • Histopatologicos:
    • Toman valores de 0 a 3 en donde 0 es la no presencia del padecimiento, 3 una fuerte presencia del padecimiento y 1,2 son puntos intermedios

Ahora, para esta practica decidimos enfocarnos en Dermatitis Crónica (Enfermedad Clase 5)

Antes de pasar a hacer análisis estadisticos, hace falta ver si hay algun atributo con valores nulos / no aceptados dentro de nuestro dataset, analisandolo cuidadosamente se tiene que hay varios casos en los que la fecha es desconocida, se opto por quitar estos casos ya que, al no saber que peso tendran las diferentes variables se opto por dejar el dataset de la manera más homogenea posible, para eso quitamos las entradas donde Edad = ?, esto nos queda como

Otra cosa que se hizo dentro de las variables fue pasar al tipo de data correcto para poder trabajar con las diferentes funciones estadisticas

Los datos finales con los que se trabajaran son los siguientes

Se agrego la columna Diagnostico para tomar como un fallo si se obtuvo la enfermedad 5 y un censurado si no se obtuvo

Análisis Exploratorio

Una vez quitadas las entradas y filtrados los valores en base a la enfermedad elegida, hacemos el Análisis Exploratorio de Datos y tenemos los siguientes resultados

Modelos

Estimación Kaplan-Meier para la función de supervivencia

Call: survfit(formula = Surv(Age, Diagnostico) ~ 1, data = data)

 time n.risk n.event survival std.err lower 95% CI upper 95% CI
    8    353       1    0.997 0.00283        0.992        1.000
   16    330       1    0.994 0.00413        0.986        1.000
   17    325       3    0.985 0.00667        0.972        0.998
   18    320       3    0.976 0.00848        0.959        0.992
   19    311       2    0.969 0.00951        0.951        0.988
   22    294       1    0.966 0.01004        0.947        0.986
   25    274       2    0.959 0.01113        0.938        0.981
   27    257       2    0.952 0.01223        0.928        0.976
   28    241       1    0.948 0.01280        0.923        0.973
   29    236       1    0.944 0.01337        0.918        0.970
 [ reached getOption("max.print") -- omitted 22 rows ]

Tenemos entonces que dado un Modelo Kaplan-Meier podemos esperar una función de supervivencia como la siguiente

Ahora bien, si queremos analizar los datos dado una variable de interes para ver como se desarrollan los casos dada una variable especifica, como ejemplo dentro de la practica se ocuparan tres variables, estas son Erythema, Itching y Melanin Incontinence dado que son variables comunes que queremos ver la diferencia entre diferentes tipos de niveles de cada variable con respecto a una Dermatitis Crónica además de que queriamos tomar variables tanto Clinicas como Histopatologicas

Esta grafica es tomando en cuenta el Modelo con base en el Enrojecimiento de la Piel

Despues se toma en cuenta el Modelo con base en la comezón presentada tenemos lo siguiente

Y por ultimo se toma en cuenta el modelo usando la Incontinencia Melanica y tenemos lo siguiente

Ahora bien, se nota una clara diferencia entre la supervivencia (El hecho de tener la enfermedad de Clase 5) entre las diferentes variables analizadas, pero para esto se puede hacer el Log-Rank Test para cada comparación de variables.

Diagnostico en base al Enrojecimiento de la Piel

Call:
survdiff(formula = Surv(Age, Diagnostico) ~ Erythema, data = data)

             N Observed Expected (O-E)^2/E (O-E)^2/V
Erythema=0   4        2    0.557      3.74      3.82
Erythema=1  54       22    7.686     26.65     32.13
Erythema=2 210       21   28.109      1.80      4.48
Erythema=3  90        3   11.647      6.42      8.71

 Chisq= 39  on 3 degrees of freedom, p= 2e-08 

Dado este resultado se rechaza la hipotesis de que el Enrojecimiento de Piel NO afecta a la probabilidad de la enfermedad

Diagnostico en base a la Picazón presentada

Call:
survdiff(formula = Surv(Age, Diagnostico) ~ Itching, data = data)

            N Observed Expected (O-E)^2/E (O-E)^2/V
Itching=0 116        8    15.30     3.482     5.170
Itching=1  72        7     8.34     0.216     0.263
Itching=2  97       18    14.45     0.875     1.266
Itching=3  73       15     9.91     2.609     3.309

 Chisq= 7.3  on 3 degrees of freedom, p= 0.06 

Dado este resultado NO se puede rechazar la hipotesis de que la picazón de piel NO afecta a la probabilidad de la enfermedad.

Diagnostico en base a la Incontinencia de Melanina

Call:
survdiff(formula = Surv(Age, Diagnostico) ~ Melnanin.Incont., 
    data = data)

                     N Observed Expected (O-E)^2/E (O-E)^2/V
Melnanin.Incont.=0 289       48    38.03      2.61     12.92
Melnanin.Incont.=1   7        0     0.99      0.99      1.02
Melnanin.Incont.=2  46        0     6.78      6.78      8.02
Melnanin.Incont.=3  16        0     2.20      2.20      2.33

 Chisq= 12.9  on 3 degrees of freedom, p= 0.005 

Dado este resultado se rechaza la hipotesis de que la Incontinencia de Melanina NO afecta a la probabilidad de la enfermedad

Riesgo Proporcional de Cox

Ahora bien, para poder probar que tan bueno es nuestro modelo, podemos usar el Modelo de riesgo proporcional de Cox

Ahora bien, nosotros queremos ver si la toma de estas tres variables o que combinación entre ellas hacen a nuestro modelo más preciso, el Test de Cox sirve mucho para esto.

Primero tomaremos la variable Erythema para ver la significancia de la variable en cuestion

Call:
coxph(formula = Surv(Age, Diagnostico) ~ Erythema, data = data)

  n= 358, number of events= 48 

            coef exp(coef) se(coef)      z Pr(>|z|)    
Erythema -1.0940    0.3349   0.1970 -5.553  2.8e-08 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

         exp(coef) exp(-coef) lower .95 upper .95
Erythema    0.3349      2.986    0.2276    0.4927

Concordance= 0.716  (se = 0.037 )
Likelihood ratio test= 29.25  on 1 df,   p=6e-08
Wald test            = 30.84  on 1 df,   p=3e-08
Score (logrank) test = 31.59  on 1 df,   p=2e-08

Primero tomaremos la variable Itching para ver la significancia de la variable en cuestion

Call:
coxph(formula = Surv(Age, Diagnostico) ~ Itching, data = data)

  n= 358, number of events= 48 

          coef exp(coef) se(coef)    z Pr(>|z|)   
Itching 0.3525    1.4226   0.1335 2.64  0.00829 **
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

        exp(coef) exp(-coef) lower .95 upper .95
Itching     1.423     0.7029     1.095     1.848

Concordance= 0.636  (se = 0.042 )
Likelihood ratio test= 7.32  on 1 df,   p=0.007
Wald test            = 6.97  on 1 df,   p=0.008
Score (logrank) test = 7.23  on 1 df,   p=0.007

Primero tomaremos la variable Incontinencia Melanica para ver la significancia de la variable en cuestion

Call:
coxph(formula = Surv(Age, Diagnostico) ~ Melnanin.Incont., data = data)

  n= 358, number of events= 48 

                       coef  exp(coef)   se(coef)      z Pr(>|z|)
Melnanin.Incont. -1.694e+01  4.416e-08  4.181e+03 -0.004    0.997

                 exp(coef) exp(-coef) lower .95 upper .95
Melnanin.Incont. 4.416e-08   22642411         0       Inf

Concordance= 0.614  (se = 0.013 )
Likelihood ratio test= 22.66  on 1 df,   p=2e-06
Wald test            = 0  on 1 df,   p=1
Score (logrank) test = 11.86  on 1 df,   p=6e-04

Ahora, podemos comparar la combinación entre ellos para ver si podemos quitar alguna variable y dejar nuestro modelo con una eficiencia tan buena como con las 3

Tomamos la combinación entre las 2 con los mejores p-values, estas son Incontinencia Melanica y Erythema

Call:
coxph(formula = Surv(Age, Diagnostico) ~ Melnanin.Incont. + Erythema, 
    data = data)

  n= 358, number of events= 48 

                       coef  exp(coef)   se(coef)      z Pr(>|z|)    
Melnanin.Incont. -1.798e+01  1.551e-08  4.230e+03 -0.004    0.997    
Erythema         -1.132e+00  3.224e-01  2.022e-01 -5.598 2.16e-08 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

                 exp(coef) exp(-coef) lower .95 upper .95
Melnanin.Incont. 1.551e-08  6.446e+07    0.0000       Inf
Erythema         3.224e-01  3.102e+00    0.2169    0.4792

Concordance= 0.783  (se = 0.029 )
Likelihood ratio test= 53.43  on 2 df,   p=2e-12
Wald test            = 31.34  on 2 df,   p=2e-07
Score (logrank) test = 43.38  on 2 df,   p=4e-10

Nos damos cuenta que en este caso la combinación de estas variables nos da una concordancia de modelo de 0.783, mejorando al 0.614 y al 0.636, por tanto tenemos que las 2 variables fueron buenas para combinarlas al momento de evaluar el modelo

Después se prueba agregar la variable que tuvo un menor nivel de significancia para ver en que tanto afecta a nuestro modelo

Call:
coxph(formula = Surv(Age, Diagnostico) ~ Melnanin.Incont. + Erythema + 
    Itching, data = data)

  n= 358, number of events= 48 

                       coef  exp(coef)   se(coef)      z Pr(>|z|)    
Melnanin.Incont. -1.798e+01  1.552e-08  4.396e+03 -0.004    0.997    
Erythema         -1.120e+00  3.263e-01  1.916e-01 -5.844 5.09e-09 ***
Itching           5.635e-01  1.757e+00  1.405e-01  4.012 6.02e-05 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

                 exp(coef) exp(-coef) lower .95 upper .95
Melnanin.Incont. 1.552e-08  6.445e+07    0.0000       Inf
Erythema         3.263e-01  3.065e+00    0.2241     0.475
Itching          1.757e+00  5.692e-01    1.3340     2.313

Concordance= 0.835  (se = 0.028 )
Likelihood ratio test= 70.56  on 3 df,   p=3e-15
Wald test            = 49.09  on 3 df,   p=1e-10
Score (logrank) test = 60.82  on 3 df,   p=4e-13

Esto nos dice que a pesar de que el nivel de significancia individual de las variables, eran diferentes entre si, la combinación de todas nos da un nivel de eficiencia muy bueno dado los resultados de los diferentes Test