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:
set.seed(1) # Para reproducibilidad
library(tidyverse)
#
Simulación de datos
data_simulada
<- tibble(
edad = sample(0:90, 100, replace = TRUE),
sexo =
sample(c("Masculino", "Femenino"), 100, replace = TRUE),
ingresos =
round(rnorm(100, mean = 30000, sd = 10000), 2),
zona_residencia = sample(c("a",
"b", "c"), 100, replace = TRUE))
# A tibble: 100 × 4
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
1.
Análisis de correlación para estudiar dependencia entre dos variables cuantitativas:
ggplot(data_simulada, aes(x = edad, y = ingresos))
+
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()
2.
Tabla de comparación de promedios, para estudiar
independencia entre una variable
cualitativa y otra cuantitativa:
data_simulada |>
group_by(sexo) |>
summarize(ingreso_promedio = mean(ingresos, na.rm = TRUE))
# A tibble: 2 × 2
sexo
ingreso_promedio
<chr> <dbl>
1 Femenino 29794.
2 Masculino 29546.
3.
Recodification de
variables.
Ahora, queremos estudiar la relación entre edad e
ingreso vista en el apartado 1, pero con el fin estudiar la independencia a
partir del ejemplo visto en el apartado 2. Es decir, necesitamos convertir una
variable cuantitativa en cualitativa para realizar algún tipo de análisis. Un
primer ejemplo de este tipo de análisis es transformar una variable cuantitativa
en grupos específicos, con el objetivo de resaltar clúster de observaciones con
algún objetivo.
3.1. Recodificar una variable cuantitativa, creando
grupos arbitrarios.
Según edad, por ejemplo, podemos crear grupos segmentarlo
según edad del trabajador.
data_simulada |>
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))
# A tibble: 3 × 2
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.
data_simulada %>%
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))
# A tibble: 3 × 2
nivel_ingreso edad_m_ing
<chr> <dbl>
1 Alto 51.6
2 Bajo 44.7
3 Medio 42.1
3.2. Recodificar una variable cuantitativa, creando
grupos estadísticos: quintiles.
Ahora, si quisiéramos agrupar los ingresos, no
tenemos de antemano una segmentación por grupos que sea representativa como la
edad. En estos casos, donde no tenemos
una segmentación orientada a caracterizar una población, podemos optar por
grupos estadísticos, como los percentiles.
Por ejemplo: podemos ver la edad promedio pro
percentil de ingresos.
data_simulada |>
mutate(quintil_ingresos = ntile(ingresos, 5)) |> # Dividir ingresos en 5 quintiles
group_by(quintil_ingresos) |>
summarize(edad_promedio = mean(edad, na.rm = TRUE))
# A tibble: 5 × 2
quintil_ingresos edad_promedio
<int> <dbl>
1 1 44.1
2 2 43.8
3 3 41.8
4 4 44.4
5 5 59.2
·
mutate(quintil_ingresos
= ntile(ingresos, 5)): Crea una nueva columna quintil_ingresos que
divide ingresos en 5 grupos de igual tamaño.
·
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.
3.3. Recodificar una variable cualitativa para
crear una variable binaria.
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.
data_simulada %>%
mutate(hombre_binario = if_else(sexo ==
"Masculino", 1, 0)) |>
group_by(hombre_binario) |>
summarize(edad_sexo = mean(ingresos, na.rm =
TRUE))
# A tibble: 2 × 2
hombre_binario edad_sexo
<dbl> <dbl>
1 0 28807.
2 1 29658.
3.4. Recodificar una variable cualitativa para
recalificar grupos.
Finalmente, recodificamos una variable cualitativa
como zona, para verificar que la zona a y b sean consideradas como zona rural y
c como urbana. Esto se hace para obtener un grupo cuya calificación sean mas
familiar para el lector, o este mas acorde como los objetivos de la investigación.
Primero creamos la variable en la base de datos, mediante una recodificación de
la variable zona, usando case_when
para crear la nueva columna zona en la que las categorías "a"
y "b" se recodifican como "Rural"
y "c" como "Urbana":
data_simulada |>
mutate(zona = case_when(
zona_residencia %in% c("a",
"b") ~ "Rural",
zona_residencia == "c" ~
"Urbana"
))
# A tibble: 100 × 5
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
# ℹ Use `print(n = ...)` to see more rows
Ahora calculamos el ingreso promedio por la zona de
residencia.
data_simulada |>
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))
# A tibble: 2 × 2
zona
ingreso_promedio
<chr> <dbl>
1 Rural 29684.
2 Urbana 28133.