No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

MCAR, MAR, MNAR en Python

12/21
Recursos

Aportes 9

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Es importante saber que tipo de mecanismo es el que esta ocasionando que nuestros datos falten, en este ejemplo de wikipedia

Se trata el ejemplo de un cuestionario sobre depresi贸n, y basicamente se sab铆a que si la falta de datos era:

.

MAR: An example is that males are less likely to fill in a depression survey but this has nothing to do with their level of depression, after accounting for maleness.

B谩sicamente si eran hombres era mas probable que faltara ese valor (indicador de depresi贸n).
Aqu铆 la localizaci贸n del valor faltante dependia de la variable male/female

.

MNAR: This would occur if men failed to fill in a depression survey because of their level of depression.

Y en este otro caso faltaban esos valores debido a la misma variable o indicador de 鈥渄epresi贸n鈥, las personas estaban tan deprimidas que por esta misma raz贸n no podian ir y tomar la encuesta.


Y la conclusi贸n fue:

The more data is missing (MNAR), the more biased are the estimations. We underestimate the intensity of depression in the population.


Si no se toman en cuenta los datos faltantes MNAR, entonces se pueden caer en sesgos.
Y como dice el proverbio:

.

Garbage in, garbage out.

.

MCAR, MAR, MNAR en Python

Tenemos un conjunto de datos llamado diabetes_df en el que aparentemente no hay datos faltantes (nan). Lo podemos verificar como sigue:

diabetes_df
diabetes_df.missing_variable_plot()

Por otro lado, sabemos que si existen datos faltantes pero estan escrito en otro formato, en este caso por cero. Ahora lo que se hace es remplazar tales valores por nan para que sean detectados como valores faltantes.

diabetes_df[diabetes_df.columns[1:6]] = diabetes_df[diabetes_df.columns[1:6]].replace(0,np.nan)
diabetes_df.missing.missing_variable_plot()
  • Caso MCAR
# ordena las columnas desde la que mas tiene valores faltantes a la que menos tiene
(
    diabetes_df
    .missing.sort_variables_by_missingness()
    .pipe(missingno.matrix) # muestra los datos en una matriz de sombra
)

Para las variables bmi y glucose hay tan pocos valores faltantes que se pueden considerar valores faltantes al azar

  • Caso MAR
(
    diabetes_df
    .missing.sort_variables_by_missingness()
    .sort_values(by='blood_pressure') # ordena los valores segun una columna
    .pipe(missingno.matrix)
)

Los valores faltantes de la variable blood_presure pueden estar relacionado a algunos valores de la insulina o de la skin_thickness por lo que son de tipo MAR

  • Caso MNAR
(
    diabetes_df
    .missing.sort_variables_by_missingness()
    .sort_values(by='insulin') # ordena los valores segun una columna
    .pipe(missingno.matrix)
)

Hay un rango de valores de insulina en la que estan la mayoria de los valores faltantes de las demas variables de lo que podemos concluir que es de tipo MNAR

Soy m茅dico y creo que es importante precisar un dato importante respecto a la clase. Que en una base de datos haya n煤meros enteros, muchas veces altos, acompa帽ados de n煤meros 0 abruptos no siempre significa que tengamos datos faltantes. **En el caso de la variable 鈥渋nsulina鈥, es perfectamente plausible que el valor sea 0 sin que este sea faltante.** Simple y sencillamente por el hecho de que ***隆Los pacientes diab茅ticos no siempre toman insulina!*** Para el manejo de la diabetes usamos m煤ltiples medicamentos, algunos son pastillas (como metformina), otros inyectables y varios por otros medios corno la Incluso algunos pacientes, aunque les recetemos insulina, a veces no se la ponen. En todos esos casos, al llenar el apartado de "Insulina", podr铆amos poner 0 y puede ser un valor real y bien medido. Entonces, en esta base de datos podr铆an estar pasando dos cosas: 1\. Que los pacientes que no usan insulina pueden ser de dos tipos principales. O est谩n lo suficientemente sanos como para poder darles otros tratamientos 鈥渕enos fuertes鈥 contra la diabetes y que sea suficiente con eso (como pastillas). O son pacientes que, aunque les recetemos la insulina, no se la ponen porque no hacen caso a indicaciones m茅dicas. En ambos casos, estamos ante un grupo de pacientes de diabetes que no acuden tan frecuentemente al hospital y al que puede ser m谩s dif铆cil darles seguimiento (o porque no necesitan ir tan frecuentemente o porque no van, aunque se les cite). En esos casos, no me sorprender铆a que hubiera m谩s valores faltantes de otros tipos. 2\. Que los pacientes no acudieron a la cita para las mediciones o no supieron contestar las preguntas, y aunque tomen insulina, no se pudo registrar. En ese caso, s铆 ser铆an valores faltantes Desgraciadamente, el no haber registrado dentro de la metodolog铆a los 鈥淣o respondi贸鈥 o 鈥淣o acudi贸鈥 como NaN implica un sesgo a esta base de datos impresionante, porque se mezclan estos dos grandes grupos que menciono. Entonces no podemos saber cu谩les de esos son realmente faltantes y cu谩les son diab茅ticos sencillamente que no requieren de insulina. Por supuesto, en otros casos, como la presi贸n arterial, es claro que un valor de 0 es imposible, porque una persona no puede no tener sangre corriendo por su cuerpo (el hecho de que la sangre se mueva genera presi贸n en las arterias). Entonces estoy perfectamente de acuerdo con tratar esos valores directamente como nulos. Solo quer铆a dejar esa acotaci贸n.

En est谩 clase aprend铆 algo nuevo, algo que ahora en adelante va a agregarle contenido a mis analisis exploratorios

Si a Ustedes tambi茅n les dio el error que no les cambiaba los datos 0 a Nan al hacer replace, lo resolv铆 cambiando el c贸digo a ```js diabetes_df[diabetes_df.columns[1:6]].replace("0", np.nan) ```Eso o cambiando el tipo de datos a int, lo que prefieran

Recuerden que no todas las bases de datos que tengan ceros significa que son datos nulos, eso depende del contexto que de la base de datos.

Me gustaria dejar mi anecdota, yo en la U fui auxiliar investigativo, y me correspondia realizar un analisis de datos de pm2.5 y pm10 en las estaciones del valle de aburra Antioquia, que pasaba , hay se codificaban los valores nulos como numeros negativo, sin embargo existian algunas mediciones que daban cero en la concentracion de ese contaminante, yo en mi logica dije, que probabilidades hay de que la cencentracion de pm10 y pm 2.5 sea cero en uno de los puntos con mayor cencentracion de contaminacion atmosferica colombia, entonces yo lo tome como un dato Nan, que paso la jefa de investigacion me llamo la atencion, ya que esos datos si son reale, solo que esas concentraciones fueron tomadas en la madrugada a horas donde el flujo vehicular es practicamente nulo, en resumen, el remplazar los datos que uno considera nulo solo es una buena practica si uno conoce el contexto de la base de datos.

genial!

12. MCAR, MAR, MNAR en Python

  • Gracias a la exploraci贸n datos se puede llegar a algunas conclusiones de que tipo de datos faltantes tengo.