Una base de datos suele tener diversos tipos de variables del tipo cualitativo y cuantitativo. En función del tipo de variables aplicamos diversos tipos de herramientas estadísticas para el análisis de datos. Por ejemplo, el estudio de la independencia entre dos variables depende de la forma de la misma:
* Dos variables cuantitativas: análisis de regresión o correlación
* Una variable cuantitativa y una cualitativa: test de media o comparación de media.
- * Dos
variables cualitativas: test chi-cuadrado.
Por tanto, pueden existir casos donde estemos interesados en recodificar una de estas variables para aplicar algún tipo de análisis, como convertir una variable cuantitativa en cualitativa o transformar una variable cualitativa para recalificar grupos. Por ejemplo agregar edades por rango: 0-10, 11-20, 21-30, …; o reagrupar grupos dentro de una variable cualitativa, ejemplo, agrupar los estudiantes de economía y contabilidad como miembros de la facultad de económicas.
Para ilustrar estos ejemplos, simulamos la siguiente base de datos:
library(tidyverse)
data_simulada <- tibble(
edad = sample(0:90, 100, replace = TRUE),
ingresos = round(rnorm(100, mean = 30000, sd = 10000), 2),
zona_residencia = sample(c("a", "b", "c"), 100, replace = TRUE))
edad sexo ingresos zona_residencia
<int> <chr> <dbl> <chr>
1 7 Femenino 13113. a
2 24 Masculino 14276. a
3 19 Femenino 25950. a
4 83 Masculino 33193. a
5 4 Masculino 30404. c
6 73 Femenino 26100. a
7 19 Masculino 11808. c
8 54 Masculino 36592. b
9 55 Femenino 34596. c
10 78 Femenino 46166. C
geom_point(alpha = 0.6) +
geom_smooth(method = "lm", color = "blue", se = FALSE) +
labs(x = "Edad", y = "Ingresos", title = "Relación entre Edad e Ingresos") +
theme_minimal()
group_by(sexo) |>
summarize(ingreso_promedio = mean(ingresos, na.rm = TRUE))
sexo ingreso_promedio
<chr> <dbl>
1 Femenino 29794.
2 Masculino 29546.
mutate(grupo_edad = case_when(
edad >= 0 & edad <= 14 ~ "0-14",
edad >= 15 & edad <= 64 ~ "15-64",
edad > 65 ~ ">65",
TRUE ~ NA_character_ # Manejo de posibles NA
)) |>
group_by(grupo_edad) |>
summarise(media = mean(ingresos))
grupo_edad media
<chr> <dbl>
1 0-14 29160.
2 15-64 28094.
3 >65 32791
Otro ejemplo de este tipo de recodificación es crear una variable con distintos niveles de ingresos: bajo, medio, alto. Podemos ahora obtener edad promedio según nivel de ingresos.
mutate(
nivel_ingreso = case_when(
ingresos < 20000 ~ "Bajo",
ingresos >= 20000 & ingresos < 40000 ~ "Medio",
ingresos >= 40000 ~ "Alto"
)
) |>
group_by(nivel_ingreso) |>
summarize(edad_m_ing = mean(edad, na.rm = TRUE))
nivel_ingreso edad_m_ing
<chr> <dbl>
1 Alto 51.6
2 Bajo 44.7
3 Medio 42.1
mutate(quintil_ingresos = ntile(ingresos, 5)) |> # Dividir ingresos en 5 quintiles
group_by(quintil_ingresos) |>
summarize(edad_promedio = mean(edad, na.rm = TRUE))
quintil_ingresos edad_promedio
<int> <dbl>
2 2 43.8
3 3 41.8
4 4 44.4
5 5 59.2
·
group_by(quintil_ingresos):
Agrupa los datos por cada quintil de ingresos.
·
summarize(edad_promedio
= mean(edad, na.rm = TRUE)): Calcula la edad promedio dentro de cada quintil.
Este ejemplo aplica para variables cuantitativas, al recodificar una variable para crear un grupo que sea igual a 1. Por ejemplo, podemos querer que menores de edad sean 1, o que mujeres sean menores a 1.
Recodificar Sexo a Valores Binarios. Convertimos sexo en variables binarias, codificando "Masculino" como 1 y "Femenino" como 0. Al grupo base se coloca el valor de 1.
mutate(hombre_binario = if_else(sexo == "Masculino", 1, 0)) |>
group_by(hombre_binario) |>
summarize(edad_sexo = mean(ingresos, na.rm = TRUE))
hombre_binario edad_sexo
<dbl> <dbl>
1 0 28807.
2 1 29658.
mutate(zona = case_when(
zona_residencia %in% c("a", "b") ~ "Rural",
zona_residencia == "c" ~ "Urbana"
))
edad sexo ingresos zona_residencia zona
<int> <chr> <dbl> <chr> <chr>
1 7 Femenino 13113. a Rural
2 24 Masculino 14276. a Rural
3 19 Femenino 25950. a Rural
4 83 Masculino 33193. a Rural
5 4 Masculino 30404. c Urbana
6 73 Femenino 26100. a Rural
7 19 Masculino 11808. c Urbana
8 54 Masculino 36592. b Rural
9 55 Femenino 34596. c Urbana
10 78 Femenino 46166. c Urbana
# ℹ 90 more rows
Ahora calculamos el ingreso promedio por la zona de residencia.
mutate(zona = case_when(
zona_residencia %in% c("a", "b") ~ "Rural",
zona_residencia == "c" ~ "Urbana"
)) |>
group_by(zona) |>
summarize(ingreso_promedio = mean(ingresos, na.rm = TRUE))
zona ingreso_promedio
<chr> <dbl>
1 Rural 29684.
2 Urbana 28133.