Estudio y Depuración de Datos
  • Declaración de autoría
  • Tema 1: Análisis Exploratorio de Datos
    • Tipos de variables
      • Ejercicio: Tipos de Datos
        • Resultados
    • Codificación y Transformación
      • Ejercicio: Codificación y Transformación
        • Resultados
    • Descriptivos, Gráficos y Tablas
      • Ejercicio: Gráficos y Tablas
        • Resultados
    • Ejemplo de un análisis descriptivo básico para detectar errores e incongruencias
    • PRACTICA 1
      • Resultados
  • Tema 2: Control de integridad de los datos
    • Introducción a los datos atípicos
      • Ejercicios
        • Resultados
    • Detección y tratamiento de datos atípicos (univariante)
    • Detección y tratamiento de datos atípicos (bivariante)
      • Ejercicio I
        • Resultados
    • Detección de datos atípicos y su tratamiento (automatización)
      • Ejercicio I - automatización
        • Resultados
    • Detección y tratamiento de datos atípicos (multivariante)
      • Ejercicio II
        • Resultados
    • Detección y tratamiento de duplicados
      • Ejercicio
        • Reusltados
    • Ejemplo de detección y tratamiento de atípicos y duplicados
      • Resultados
    • PRACTICA 2
      • Resultados
  • Tema 3: Valores Perdidos
    • Detección de datos perdidos
      • Ejercicios
    • Tratamiento de datos perdidos (Imputación Simple)
      • Ejercicio - Epidemia Ébola
        • Resultados
      • Ejercicio - Tipos de datos missing
        • Resultados
    • Tratamiento de datos perdidos (Imputación Múltiple con MICE)
      • Ejercicio - MICE
        • Resultados
    • PRACTICA 3
      • Resultados
    • PRÁCTICA GRUPAL
  • Bibliografía
    • 📚Bibliografía
Powered by GitBook
On this page
  • Tablas
  • Tablas de frecuencias unidemensionales
  • Tablas de frecuencias cruzadas
  • Tablas de frecuencias de una variable continua agrupada por intervalos
  • Descriptivos
  • Gráficos
  1. Tema 1: Análisis Exploratorio de Datos

Descriptivos, Gráficos y Tablas

Análisis exploratorio y corrección de errores detectados

No siempre vamos a poder realizar de forma tan sencilla la detección de errores, sobre todo cuando tenemos un gran volumen de datos, algo habitual en estadística y ciencia de datos. Por tanto, para poder detectar problemas presentes en los datos, es necesario llevar a cabo un análisis exploratorio de los mismos a través de gráficos y tablas.

Para ello es importante fijarse en los siguientes aspectos:

  1. Límites de las variables cuantitativas: Una forma rápida de verificar que las variables cuantitativas toman valores lógicos, es verificar que el máximo y el mínimo de las variables se encuentran dentro de los límites que marque la variable (por ejemplo, las variables que representan porcentajes deben situarse entre 0 y 100 o medidas como el peso, la altura, la edad, etc tomarán un número positivo). Lo miraremos con descriptivos y gráficos

  2. Niveles de las variables cualitativas: En línea con el punto anterior, también debemos verificar que los niveles de las variables cualitativas tienen sentido, teniendo en cuenta el significado de las mismas. Lo mirarmos con tablas de frecuencias

  3. Número de datos perdidos: Este tema lo veremos con mas detalle en el Tema 3, pero si en una variable observamos muchos datos faltantes (más de la mitad), es recomendable rechazarla al inicio del proceso, pues carece de suficiente información.

  4. Datos perdidos codificados: En ocasiones, en lugar de dejar "huecos" para representar los datos faltantes, se utiliza algún tipo de codificación que facilite el envío y la lectura de los conjuntos de datos. Ejemplo: En variables cualitativas el símbolo ? o el clásico NSNC (no sabe/no contesta) y en variables cuantitativas, el valor -1 (si la variable no puede tomar valores negativos) o 999. Es fundamental detectar este aspecto para poder analizar de manera correcta la presencia de ausentes. Lo miraremos con descriptivos, tablas y gráficos.

  5. Frecuencia de las categorías de las variables cualitativas: Dado que los modelos predictivos se basan en detectar patrones en las variables input que nos permitan aproximar el valor de la variable objetivo, es imprescindible que todos los niveles de las variables cualitativas estén bien representados pues, de los contrario, se podrían detectar patrones que no fueran extrapolables al estar basados en muy pocas observaciones. Por ello, se debe verificar que la frecuencia de todas ellas sea superior al 2-5% (el porcentaje exacto depende del número de observaciones del conjunto de datos).

Algunas de las funciones más útiles para este propósito son:

summary(dataFrame): Ofrece un resumen de todas las variables presentes en el conjunto de datos. Para las variables numéricas, muestra valor mínimo, máximo, media, mediana y primer y tercer cuartil; mientras que para las variables de tipo factor, muestra los 6 niveles mayoritarios, junto con sus frecuencias. En ambos casos se muestra además el número de casos perdidos.

psych::describe(Filter(is.numeric,dataFrame)): Esta función ofrece más medidas de las variables numéricas como la desviación estándar y el índice de simetría

table(varCuali), prop.table(table(varCuali): Muestra la tabla de frecuencias de la variable cualitativa seleccionada.

hist(varCuant): Muestra el histograma de la variable cuantitativa seleccionada.

barplot(table(varCuali)): Muestra el diagrama de barras de la variable cualitativa seleccionada.

A partir de estas funciones es posible hacerse una idea muy clara de cómo son las variables del conjunto de datos y de sus problemas.

Tablas

Vamos a construir una base de datos sencilla para ver este apartado

#Definición de los datos (simulamos los datos)
set.seed(123)
datos <- data.frame(
  ID = 1:20,
  genero = as.factor(c(rep("Masculino", 10), rep("Femenino", 9), "No binario")), # 10 hombres, 9 mujeres, 1 no binario
  edad = c(sample(18:80, 18, replace = TRUE), 150, -5), # Errores: edad negativa y edad demasiado alta
  estudios = as.factor(sample(c("Primaria", "Secundaria", "Universitaria", "?"), 20, replace = TRUE, prob = c(0.2, 0.3, 0.3, 0.05))),
  horas_ejercicio = c(rnorm(18, mean = 4, sd = 2), -2, 50) # Errores: valores negativos y extremadamente altos
)

Tablas de frecuencias unidemensionales

Construimos las tablas de frecuencias para la variable genero

table(): frecuencias absolutas

prop.table(table()): frecuencias relativas

table(datos$genero)
# genero

#  Hombre      Mujer No binario 
#     9          10          1 
prop.table(table(datos$genero))
# genero

# Hombre      Mujer No binario 
#   0.45       0.50       0.05 

Esto nos sirve para ver que hay una categoría muy pequeña y que muchas veces trabajar con categorías tan pequeñas es un problema. A veces las juntaremos, otras veces las borraremos y otras veces seguiremos adelante.

Tablas de frecuencias cruzadas

Las tablas cruzadas también se construyen usando table()y prop.table()especificando las dos variables a representar. En prop.table() incluimos un 1 si las queremos por filas, un 2 si por columnas, o nada si queremos las frecuencias relativas globales

t=table(datos$estudios,datos$genero)
#                  Femenino Masculino No binario
#  Primaria             2         2          0
#  Secundaria           5         7          1
#  Universitaria        2         1          0

prop.table(t)
#                  Femenino Masculino No binario
#  Primaria          0.10      0.10       0.00
#  Secundaria        0.25      0.35       0.05
#  Universitaria     0.10      0.05       0.00

prop.table(t,1)
#                Femenino  Masculino No binario
#  Primaria      0.50000000 0.50000000 0.00000000
#  Secundaria    0.38461538 0.53846154 0.07692308
#  Universitaria 0.66666667 0.33333333 0.00000000

prop.table(t,2)
#                Femenino Masculino No binario
#  Primaria      0.2222222 0.2000000  0.0000000
#  Secundaria    0.5555556 0.7000000  1.0000000
#  Universitaria 0.2222222 0.1000000  0.0000000

¿Qué porcentaje de los que se de autodenomina género masculino tiene estudios primarios?

¿Qué porcentaje de los que tienen estudios secundarios se autodenominan género no binario?

Tablas de frecuencias de una variable continua agrupada por intervalos

Una tabla de frecuencia para una variable cuantitativa no tiene sentido, veamos que pasa si representamos la edad con una tabla de frecuencia:

table(datos$edad)
# -5  21  22  23  26  32  33  39  43  45  51  54  55  56  61  64  75 150 
#  1   1   1   1   1   1   2   2   1   1   1   1   1   1   1   1   1   1 

No nos está dando informacióm adicional ni resumiendo la variable. Para trabajar este tipo de variables, podemos construir intervalos. Normalmente pensaremos qué intervalos pueden tener sentido según el objetivo del estudio. En este caso podemos pensar simplemente en una variable dicotómica con lo que son menores de edad y los que son mayores de edad.

En este caso lo podemos hacer de forma muy sencilla con el comando if_else:

datos$edad_cat<-if_else(datos$edad<40,1,2)

datos$edad_cat<-factor(datos$edad_cat, levels=c(1,2),
   
                labels=c("<40",">=40"))

table(datos$edad_cat)

Descriptivos

De la misma forma que podemos hacer tablas de frecuencias, podemos llevar a cabo un resumen descriptivo de las variables que contiene un data.frame con summary()

summary(datos)
       ID               genero        edad                 estudios horas_ejercicio  edad_cat 
 Min.   : 1.00   Femenino  : 9   Min.   : -5.00   Primaria     :4   Min.   :-2.000   <40 :11  
 1st Qu.: 5.75   Masculino :10   1st Qu.: 19.00   Secundaria   :7   1st Qu.: 1.623   >=40: 9  
 Median :10.50   No binario: 1   Median : 35.50   Universitaria:9   Median : 2.176            
 Mean   :10.50                   Mean   : 44.70                     Mean   : 4.726            
 3rd Qu.:15.25                   3rd Qu.: 63.25                     3rd Qu.: 3.154            
 Max.   :20.00                   Max.   :150.00                     Max.   :50.000           

También podemos calcular media y desviación típica de la variable edad por genero con la función aggregate()

aggregate(datos$edad,by=list(datos$genero),mean)

La librería psych contiene las funciones describe() y describeBy() que no sólo calculan la media sino que añaden otros estadísticos de interés

#install.packages("psych")

library(psych)

describe(datos$edad)

describeBy(datos$edad,datos$genero)

Gráficos

Estos serían las cuatro representaciones gráficos más sencillas para las variables que estamos viendo:

pie(table(datos$estudios))
barplot(table(datos$genero),col=rainbow(10))


library(ggplot2)
ggplot(datos, aes(x = sexo)) +
  geom_bar(aes(fill=sexo))
hist(datos$edad,col="skyblue")
hist(datos$horas_ejercicio,col="orange")

Si recordamos lo que veíamos con el summary() y ahora con los plots, podemos corregir los errores que encontramos en estas dos variables

datos$edad<-replace(datos$edad , datos$edad <0 | datos$edad>100,NA)
hist(datos$edad)

datos$horas_ejercicio<-replace(datos$horas_ejercicio , datos$horas_ejercicio <0 | datos$horas_ejercicio>40,NA)
hist(datos$horas_ejercicio)
boxplot(datos$edad~datos$genero,col=rainbow(10))

ggplot(datos, aes(x = genero, y = edad, fill = genero)) +
  geom_boxplot(color = "black") +
  labs(
    title = "Distribución de la Edad según Género",
    x = "Género",
    y = "Edad"
  ) +
  theme(legend.position = "none")  # Ocultar leyenda

Ahora es tu turno: Realiza los siguientes ejercicios:

PreviousResultadosNextEjercicio: Gráficos y Tablas

Last updated 4 months ago

En las dos variables cuantitativas vemos que hay número incorrecto, habrá que corregirlos. ¿Cómo podemos estar seguros de los número incorrectos? Con los que veremos a continuación

Ejercicio: Gráficos y Tablas
gráficos
Page cover image