1 Presentación

En esta clase se desarrollan procedimientos básicos y muy utilizados para el tratamiento de variables categóricas en R, con ejemplos aplicados al mercado laboral. La idea central es mostrar que el trabajo con variables cualitativas no consiste solo en “cambiar el tipo” de una variable, sino en decidir cómo debe representarse analíticamente.

En particular, se trabajará con cinco operaciones frecuentes:

  1. conversión de una variable desde tipo carácter a factor;
  2. conversión de una variable desde tipo numérico a factor;
  3. transformación de una variable cuantitativa en cualitativa mediante intervalos de ancho fijo;
  4. transformación de una variable cuantitativa en cualitativa mediante cuantiles;
  5. reordenación de niveles en variables del tipo factor.

1.1 Objetivos de aprendizaje

Al finalizar la clase, serás capaz de:

  • reconocer cuándo una variable debe tratarse como categórica;
  • convertir variables de tipo carácter y numérico en factores;
  • distinguir entre factor nominal y factor ordenado;
  • construir variables categóricas a partir de variables cuantitativas usando cut();
  • diferenciar entre recodificación por tramos fijos y por cuantiles;
  • reordenar niveles de factores para mejorar la interpretación de tablas y gráficos.

1.2 Requisitos

Nota aclaratoria: Si los paquetes utilizados en esta guía no están instalados en el equipo, deberán instalarse previamente con install.packages(). Una vez instalados, deberán cargarse con la función library() al iniciar cada sesión de trabajo.

if (!requireNamespace("dplyr", quietly = TRUE)) install.packages("dplyr")
if (!requireNamespace("forcats", quietly = TRUE)) install.packages("forcats")
if (!requireNamespace("ggplot2", quietly = TRUE)) install.packages("ggplot2")

library(dplyr)
library(forcats)
library(ggplot2)

2 Base de ejemplo

Trabajaremos con una base pequeña, artificial y didáctica, construida con variables típicas del mercado laboral.

empleo <- data.frame(
  id = 1:12,
  sexo = c("Mujer", "Hombre", "Mujer", "Hombre", "Mujer", "Hombre",
           "Mujer", "Hombre", "Mujer", "Hombre", "Mujer", "Hombre"),
  nivel_educ = c(1, 2, 3, 2, 1, 3, 2, 1, 3, 2, 1, 3),
  ingreso = c(1800000, 2500000, 3200000, 4100000, 2100000, 5300000,
              2900000, 1700000, 4600000, 3500000, 2300000, 6100000),
  horas = c(20, 48, 45, 52, 30, 60, 44, 25, 55, 47, 36, 58),
  sector = c("Comercio", "Industria", "Servicios", "Servicios",
             "Comercio", "Industria", "Servicios", "Comercio",
             "Industria", "Servicios", "Comercio", "Industria")
)

empleo
##    id   sexo nivel_educ ingreso horas    sector
## 1   1  Mujer          1 1800000    20  Comercio
## 2   2 Hombre          2 2500000    48 Industria
## 3   3  Mujer          3 3200000    45 Servicios
## 4   4 Hombre          2 4100000    52 Servicios
## 5   5  Mujer          1 2100000    30  Comercio
## 6   6 Hombre          3 5300000    60 Industria
## 7   7  Mujer          2 2900000    44 Servicios
## 8   8 Hombre          1 1700000    25  Comercio
## 9   9  Mujer          3 4600000    55 Industria
## 10 10 Hombre          2 3500000    47 Servicios
## 11 11  Mujer          1 2300000    36  Comercio
## 12 12 Hombre          3 6100000    58 Industria

2.1 Lectura inicial de la base

str(empleo)
## 'data.frame':    12 obs. of  6 variables:
##  $ id        : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ sexo      : chr  "Mujer" "Hombre" "Mujer" "Hombre" ...
##  $ nivel_educ: num  1 2 3 2 1 3 2 1 3 2 ...
##  $ ingreso   : num  1800000 2500000 3200000 4100000 2100000 5300000 2900000 1700000 4600000 3500000 ...
##  $ horas     : num  20 48 45 52 30 60 44 25 55 47 ...
##  $ sector    : chr  "Comercio" "Industria" "Servicios" "Servicios" ...

A partir de esta estructura podemos observar que:

  • sexo y sector son variables almacenadas como carácter, aunque conceptualmente son cualitativas;
  • nivel_educ es una variable numérica codificada, pero representa categorías;
  • ingreso y horas son variables cuantitativas que luego transformaremos en cualitativas.

3 Conversión desde tipo carácter a factor

3.1 Explicación conceptual

Muchas variables cualitativas ingresan a R como texto. Por ejemplo:

  • sexo;
  • rama de actividad;
  • categoría ocupacional;
  • tipo de contrato;
  • condición de informalidad.

Cuando una variable representa categorías, conviene transformarla a factor, porque así R la reconoce explícitamente como categórica. Esto afecta la forma en que se construyen tablas, gráficos y modelos.

3.2 Ejemplo 1: convertir sexo a factor

class(empleo$sexo)
## [1] "character"
empleo$sexo <- factor(empleo$sexo)

class(empleo$sexo)
## [1] "factor"
levels(empleo$sexo)
## [1] "Hombre" "Mujer"

Interpretación

La variable sexo pasó de tipo carácter a tipo factor. Esto significa que R ya no la trata como texto libre, sino como una variable categórica con niveles definidos.

3.3 Ejemplo 2: especificar manualmente el orden de los niveles

empleo$sexo <- factor(
  empleo$sexo,
  levels = c("Hombre", "Mujer")
)

levels(empleo$sexo)
## [1] "Hombre" "Mujer"

Comentario

Si no se fija un orden manual, R suele ordenar los niveles alfabéticamente. Sin embargo, en algunos análisis interesa un orden sustantivo o una categoría de referencia específica.

3.4 Ejercicio 1

Convertir sector en una variable factor y mostrar sus niveles.

Solución

empleo$sector <- factor(empleo$sector)
class(empleo$sector)
## [1] "factor"
levels(empleo$sector)
## [1] "Comercio"  "Industria" "Servicios"

4 Conversión desde tipo numérico a factor

4.1 Explicación conceptual

En muchas bases de datos las variables cualitativas se almacenan como números. Por ejemplo:

  • 1 = Bajo
  • 2 = Medio
  • 3 = Alto

Aunque estas variables estén guardadas como numéricas, su naturaleza no es cuantitativa. El número funciona como código, no como magnitud. En esos casos corresponde convertir la variable a factor y asignar etiquetas.

4.2 Ejemplo 1: recodificar nivel_educ

Supongamos la siguiente equivalencia:

  • 1 = Primaria
  • 2 = Secundaria
  • 3 = Terciaria
empleo$nivel_educ_cat <- factor(
  empleo$nivel_educ,
  levels = c(1, 2, 3),
  labels = c("Primaria", "Secundaria", "Terciaria")
)

empleo$nivel_educ_cat
##  [1] Primaria   Secundaria Terciaria  Secundaria Primaria   Terciaria 
##  [7] Secundaria Primaria   Terciaria  Secundaria Primaria   Terciaria 
## Levels: Primaria Secundaria Terciaria
levels(empleo$nivel_educ_cat)
## [1] "Primaria"   "Secundaria" "Terciaria"

4.3 Ejemplo 2: factor ordenado

Cuando las categorías tienen jerarquía natural, puede ser útil crear un factor ordenado.

empleo$nivel_educ_ord <- factor(
  empleo$nivel_educ,
  levels = c(1, 2, 3),
  labels = c("Primaria", "Secundaria", "Terciaria"),
  ordered = TRUE
)

empleo$nivel_educ_ord
##  [1] Primaria   Secundaria Terciaria  Secundaria Primaria   Terciaria 
##  [7] Secundaria Primaria   Terciaria  Secundaria Primaria   Terciaria 
## Levels: Primaria < Secundaria < Terciaria
is.ordered(empleo$nivel_educ_ord)
## [1] TRUE

Comentario

No toda variable numérica es cuantitativa. Si el número solo representa una etiqueta, debe tratarse como categórica.

4.4 Ejercicio 2

Se dispone de una variable jornada_cod con los siguientes códigos:

  • 1 = Parcial
  • 2 = Completa
  • 3 = Sobrecarga

Crear un factor ordenado llamado jornada.

Solución

empleo$jornada_cod <- c(1, 2, 2, 3, 1, 3, 2, 1, 3, 2, 2, 3)

empleo$jornada <- factor(
  empleo$jornada_cod,
  levels = c(1, 2, 3),
  labels = c("Parcial", "Completa", "Sobrecarga"),
  ordered = TRUE
)

empleo$jornada
##  [1] Parcial    Completa   Completa   Sobrecarga Parcial    Sobrecarga
##  [7] Completa   Parcial    Sobrecarga Completa   Completa   Sobrecarga
## Levels: Parcial < Completa < Sobrecarga

5 Transformar variables cuantitativas en cualitativas por intervalos de ancho fijo

5.1 Explicación conceptual

Con frecuencia es útil transformar una variable cuantitativa en una categórica usando tramos previamente definidos. En el ámbito laboral esto se utiliza, por ejemplo, para construir:

  • tramos salariales;
  • grupos de edad;
  • rangos de antigüedad;
  • categorías de horas trabajadas.

La función más utilizada en R para este fin es cut().

5.2 Ejemplo 1: tramos de ingreso laboral

Queremos crear tres categorías:

  • Bajo: hasta 2.500.000
  • Medio: más de 2.500.000 hasta 4.000.000
  • Alto: más de 4.000.000
empleo$tramo_ingreso <- cut(
  empleo$ingreso,
  breaks = c(0, 2500000, 4000000, Inf),
  labels = c("Bajo", "Medio", "Alto"),
  right = TRUE,
  include.lowest = TRUE
)

empleo[, c("ingreso", "tramo_ingreso")]
##    ingreso tramo_ingreso
## 1  1800000          Bajo
## 2  2500000          Bajo
## 3  3200000         Medio
## 4  4100000          Alto
## 5  2100000          Bajo
## 6  5300000          Alto
## 7  2900000         Medio
## 8  1700000          Bajo
## 9  4600000          Alto
## 10 3500000         Medio
## 11 2300000          Bajo
## 12 6100000          Alto
table(empleo$tramo_ingreso)
## 
##  Bajo Medio  Alto 
##     5     3     4

Interpretación

En este caso, los cortes responden a un criterio analítico fijado previamente. No dependen de la distribución de la muestra, sino de umbrales definidos por el analista.

5.3 Ejemplo 2: categorías de horas trabajadas

Queremos construir la variable:

  • Menos de 30 horas
  • 30 a 48 horas
  • Más de 48 horas
empleo$tramo_horas <- cut(
  empleo$horas,
  breaks = c(0, 29, 48, Inf),
  labels = c("Menos de 30", "30 a 48", "Más de 48"),
  right = TRUE,
  include.lowest = TRUE
)

empleo[, c("horas", "tramo_horas")]
##    horas tramo_horas
## 1     20 Menos de 30
## 2     48     30 a 48
## 3     45     30 a 48
## 4     52   Más de 48
## 5     30     30 a 48
## 6     60   Más de 48
## 7     44     30 a 48
## 8     25 Menos de 30
## 9     55   Más de 48
## 10    47     30 a 48
## 11    36     30 a 48
## 12    58   Más de 48
table(empleo$tramo_horas)
## 
## Menos de 30     30 a 48   Más de 48 
##           2           6           4

5.4 Ejercicio 3

Construir una variable llamada grupo_ingreso2 con estas categorías:

  • Hasta 2 millones
  • De 2 a 4 millones
  • Más de 4 millones

Solución

empleo$grupo_ingreso2 <- cut(
  empleo$ingreso,
  breaks = c(0, 2000000, 4000000, Inf),
  labels = c("Hasta 2 millones", "De 2 a 4 millones", "Más de 4 millones"),
  include.lowest = TRUE
)

empleo[, c("ingreso", "grupo_ingreso2")]
##    ingreso    grupo_ingreso2
## 1  1800000  Hasta 2 millones
## 2  2500000 De 2 a 4 millones
## 3  3200000 De 2 a 4 millones
## 4  4100000 Más de 4 millones
## 5  2100000 De 2 a 4 millones
## 6  5300000 Más de 4 millones
## 7  2900000 De 2 a 4 millones
## 8  1700000  Hasta 2 millones
## 9  4600000 Más de 4 millones
## 10 3500000 De 2 a 4 millones
## 11 2300000 De 2 a 4 millones
## 12 6100000 Más de 4 millones
table(empleo$grupo_ingreso2)
## 
##  Hasta 2 millones De 2 a 4 millones Más de 4 millones 
##                 2                 6                 4

6 Transformar variables cuantitativas en cualitativas según cuantiles

6.1 Explicación conceptual

A diferencia del caso anterior, aquí los cortes no se fijan por tramos sustantivos, sino por la posición relativa de cada observación en la distribución.

Esto es muy útil para construir:

  • cuartiles de ingreso;
  • quintiles salariales;
  • deciles de remuneración;
  • terciles de horas trabajadas.

En R, una estrategia habitual consiste en calcular cuantiles con quantile() y luego utilizar esos puntos de corte en cut().

6.2 Ejemplo 1: cuartiles de ingreso

cortes_ingreso <- quantile(
  empleo$ingreso,
  probs = c(0, 0.25, 0.50, 0.75, 1)
)

cortes_ingreso
##      0%     25%     50%     75%    100% 
## 1700000 2250000 3050000 4225000 6100000
empleo$cuartil_ingreso <- cut(
  empleo$ingreso,
  breaks = cortes_ingreso,
  labels = c("Q1", "Q2", "Q3", "Q4"),
  include.lowest = TRUE
)

empleo[, c("ingreso", "cuartil_ingreso")]
##    ingreso cuartil_ingreso
## 1  1800000              Q1
## 2  2500000              Q2
## 3  3200000              Q3
## 4  4100000              Q3
## 5  2100000              Q1
## 6  5300000              Q4
## 7  2900000              Q2
## 8  1700000              Q1
## 9  4600000              Q4
## 10 3500000              Q3
## 11 2300000              Q2
## 12 6100000              Q4
table(empleo$cuartil_ingreso)
## 
## Q1 Q2 Q3 Q4 
##  3  3  3  3

Interpretación

En este caso, los grupos no tienen la misma amplitud monetaria. Lo que se busca es dividir la distribución en partes con cantidades similares de observaciones.

6.3 Ejemplo 2: terciles de horas trabajadas

cortes_horas <- quantile(
  empleo$horas,
  probs = c(0, 1/3, 2/3, 1)
)

cortes_horas
##        0% 33.33333% 66.66667%      100% 
##  20.00000  41.33333  49.33333  60.00000
empleo$tercil_horas <- cut(
  empleo$horas,
  breaks = cortes_horas,
  labels = c("Bajo", "Medio", "Alto"),
  include.lowest = TRUE
)

empleo[, c("horas", "tercil_horas")]
##    horas tercil_horas
## 1     20         Bajo
## 2     48        Medio
## 3     45        Medio
## 4     52         Alto
## 5     30         Bajo
## 6     60         Alto
## 7     44        Medio
## 8     25         Bajo
## 9     55         Alto
## 10    47        Medio
## 11    36         Bajo
## 12    58         Alto
table(empleo$tercil_horas)
## 
##  Bajo Medio  Alto 
##     4     4     4

Advertencia metodológica

Cuando existen muchos valores repetidos, puede ocurrir que algunos cuantiles coincidan. En esos casos, cut() puede generar problemas por puntos de corte duplicados. Por ello, siempre es recomendable revisar los valores devueltos por quantile() antes de construir la categorización.

6.4 Ejercicio 4

Crear una variable de cuartiles para horas llamada cuartil_horas.

Solución

q_horas <- quantile(empleo$horas, probs = c(0, 0.25, 0.50, 0.75, 1))

empleo$cuartil_horas <- cut(
  empleo$horas,
  breaks = q_horas,
  labels = c("Q1", "Q2", "Q3", "Q4"),
  include.lowest = TRUE
)

empleo[, c("horas", "cuartil_horas")]
##    horas cuartil_horas
## 1     20            Q1
## 2     48            Q3
## 3     45            Q2
## 4     52            Q3
## 5     30            Q1
## 6     60            Q4
## 7     44            Q2
## 8     25            Q1
## 9     55            Q4
## 10    47            Q3
## 11    36            Q2
## 12    58            Q4
table(empleo$cuartil_horas)
## 
## Q1 Q2 Q3 Q4 
##  3  3  3  3

7 Reordenación de niveles de variables del tipo factor

7.1 Explicación conceptual

El orden de los niveles de un factor es importante porque puede afectar:

  • el orden de las categorías en una tabla;
  • el eje de un gráfico;
  • la lectura sustantiva de los resultados;
  • la categoría de referencia en algunos modelos estadísticos.

En R puede fijarse el orden desde factor(), pero también puede modificarse con funciones del paquete forcats.

7.2 Reordenación manual de niveles

Queremos asegurarnos de que tramo_ingreso quede en el orden lógico:

  • Bajo
  • Medio
  • Alto
levels(empleo$tramo_ingreso)
## [1] "Bajo"  "Medio" "Alto"
empleo$tramo_ingreso <- fct_relevel(
  empleo$tramo_ingreso,
  "Bajo", "Medio", "Alto"
)

levels(empleo$tramo_ingreso)
## [1] "Bajo"  "Medio" "Alto"

7.3 Reordenación según frecuencia

empleo$sector_freq <- fct_infreq(empleo$sector)
levels(empleo$sector_freq)
## [1] "Comercio"  "Industria" "Servicios"
table(empleo$sector_freq)
## 
##  Comercio Industria Servicios 
##         4         4         4

Comentario

Esta opción es útil cuando se quiere presentar primero las categorías más frecuentes.

7.4 Reordenación según una variable resumen

Ahora ordenaremos el sector según el ingreso promedio.

empleo$sector_ingreso <- fct_reorder(
  empleo$sector,
  empleo$ingreso,
  .fun = mean
)

levels(empleo$sector_ingreso)
## [1] "Comercio"  "Servicios" "Industria"
empleo %>%
  group_by(sector_ingreso) %>%
  summarise(promedio_ingreso = mean(ingreso), .groups = "drop")
## # A tibble: 3 × 2
##   sector_ingreso promedio_ingreso
##   <fct>                     <dbl>
## 1 Comercio                1975000
## 2 Servicios               3425000
## 3 Industria               4625000

7.5 Designación de una categoría de referencia

Explicación conceptual

Dentro del tratamiento de variables categóricas, una tarea importante consiste en definir explícitamente una categoría de referencia en una variable de tipo factor.

Aunque en esta clase aún no se desarrollan modelos categóricos, esta operación es fundamental en la gestión de datos, ya que permite dejar preparada la base de datos para análisis posteriores y asegurar una interpretación coherente de las categorías.

La categoría de referencia es la categoría base respecto de la cual, en etapas posteriores del análisis, podrán compararse las demás. Por ello, su elección no debería ser arbitraria, sino responder a un criterio sustantivo.

En estudios del mercado laboral, algunas referencias frecuentes pueden ser:

  • la categoría de menor nivel, por ejemplo, Primaria en nivel educativo;
  • una categoría de uso habitual o normativo, por ejemplo, empleo informal;
  • la categoría más frecuente en la base;
  • una categoría de interés analítico para comparaciones posteriores.

Importancia en la gestión de datos categóricos

Definir una categoría de referencia permite:

  • establecer un orden analíticamente útil de los niveles del factor;
  • facilitar la lectura e interpretación de tablas y salidas estadísticas;
  • dejar la base preparada para futuros modelos categóricos;
  • evitar que R utilice automáticamente un orden alfabético que puede no ser el más adecuado.

En este sentido, la designación de una categoría de referencia puede entenderse como una forma específica de reordenación de niveles, orientada no solo a la presentación de resultados, sino también a la consistencia analítica del tratamiento de los datos.

Ejemplo aplicado al mercado laboral

Supongamos que la variable nivel_educ_cat tiene tres categorías:

  • Primaria
  • Secundaria
  • Terciaria

Si se desea que la categoría Primaria sea la referencia, puede utilizarse la función relevel().

# Ver niveles actuales
levels(empleo$nivel_educ_cat)
## [1] "Primaria"   "Secundaria" "Terciaria"
# Definir "Pirmaria" como categoría de referencia
empleo$nivel_educ_ref <- relevel(empleo$nivel_educ_cat, ref = "Primaria")

# Verificar el nuevo orden de niveles
levels(empleo$nivel_educ_ref)
## [1] "Primaria"   "Secundaria" "Terciaria"

Interpretación

Con esta operación:

  • la categoría Primaria queda establecida como referencia;
  • las demás categorías quedan ordenadas con respecto a esa base;
  • la variable queda preparada para futuras comparaciones analíticas.

Es importante señalar que esta operación no modifica los casos observados, sino únicamente la forma en que R organiza e interpreta los niveles del factor.

Ejemplo adicional: sector de actividad

En una variable como sector, puede ser útil fijar como referencia una categoría tradicional o sustantivamente relevante, por ejemplo, Comercio.

# Ver niveles actuales
levels(empleo$sector)
## [1] "Comercio"  "Industria" "Servicios"
# Definir "Comercio" como categoría de referencia
empleo$sector_ref <- relevel(empleo$sector, ref = "Comercio")

# Verificar el nuevo orden
levels(empleo$sector_ref)
## [1] "Comercio"  "Industria" "Servicios"

Recomendación metodológica

La categoría de referencia debe elegirse de manera coherente con el objetivo del análisis. En la etapa de gestión de datos, conviene dejar explícita esta decisión, especialmente cuando se trabaja con variables que más adelante podrían utilizarse en tablas comparativas, gráficos o modelos categóricos.

Ejercicio propuesto

Tomando la variable tramo_ingreso, definir la categoría Bajo como referencia y verificar el nuevo orden de los niveles.

Solución

# Ver niveles actuales
levels(empleo$tramo_ingreso)
## [1] "Bajo"  "Medio" "Alto"
# Definir "Bajo" como referencia
empleo$tramo_ingreso_ref <- relevel(empleo$tramo_ingreso, ref = "Bajo")

# Verificar niveles
levels(empleo$tramo_ingreso_ref)
## [1] "Bajo"  "Medio" "Alto"

Idea clave para recordar

Designar una categoría de referencia es una tarea esencial en la gestión de variables categóricas, porque permite organizar los niveles del factor de manera consistente y dejar preparada la base para análisis comparativos posteriores.

8 Ejercicio integrador

A continuación se presenta una nueva base de datos ficticia con información de personas ocupadas. El objetivo es aplicar de manera integrada algunos de los principales procedimientos de gestión de variables categóricas en R.

8.1 Base de datos de ejemplo

La base contiene las siguientes variables:

  • tipo_empleo: tipo de empleo, registrado como texto con las categorías Formal e Informal;
  • categoria_ocup: categoría de ocupación, registrada numéricamente con la siguiente codificación:
    • 1 = Público
    • 2 = Privado
    • 3 = Doméstico
  • salario: ingreso laboral mensual;
  • anios_estudio: años de estudio aprobados, medidos cuantitativamente entre 1 y 18.
library(dplyr)
library(forcats)

ocupacion <- data.frame(
  id = 1:15,
  tipo_empleo = c("Formal", "Informal", "Formal", "Formal", "Informal",
                  "Formal", "Informal", "Formal", "Informal", "Formal",
                  "Formal", "Informal", "Formal", "Informal", "Formal"),
  categoria_ocup = c(2, 2, 1, 2, 3, 1, 3, 2, 2, 1, 2, 3, 1, 2, 2),
  salario = c(3200000, 1800000, 4500000, 3800000, 1500000,
              5200000, 1700000, 2900000, 2100000, 4800000,
              3500000, 1600000, 6000000, 2400000, 3300000),
  anios_estudio = c(12, 6, 17, 14, 5, 18, 8, 11, 7, 16, 13, 4, 15, 9, 12)
)

ocupacion
##    id tipo_empleo categoria_ocup salario anios_estudio
## 1   1      Formal              2 3200000            12
## 2   2    Informal              2 1800000             6
## 3   3      Formal              1 4500000            17
## 4   4      Formal              2 3800000            14
## 5   5    Informal              3 1500000             5
## 6   6      Formal              1 5200000            18
## 7   7    Informal              3 1700000             8
## 8   8      Formal              2 2900000            11
## 9   9    Informal              2 2100000             7
## 10 10      Formal              1 4800000            16
## 11 11      Formal              2 3500000            13
## 12 12    Informal              3 1600000             4
## 13 13      Formal              1 6000000            15
## 14 14    Informal              2 2400000             9
## 15 15      Formal              2 3300000            12

8.2 Consigna

A partir de la base ocupacion, realizar las siguientes tareas:

  1. Transformar la variable tipo_empleo, actualmente registrada como texto, a una variable de tipo factor.
  2. Transformar la variable categoria_ocup, actualmente registrada como numérica, a una variable categórica con las etiquetas:
    • Público
    • Privado
    • Doméstico
  3. Transformar la variable anios_estudio en una nueva variable cualitativa llamada nivel_educativo, con las siguientes categorías:
    • Primaria: de 1 a 6 años
    • Secundaria: de 7 a 12 años
    • Terciaria: de 13 a 18 años
  4. Reordenar los niveles de nivel_educativo para que queden en el orden:
    • Primaria
    • Secundaria
    • Terciaria
  5. Verificar la estructura final de la base y observar los niveles de las variables categóricas creadas.

8.3 Solución

Nota metodológica sobre el uso de funciones en R

Para el desarrollo de este ejercicio se emplea la librería dplyr, en particular la función mutate(), como una alternativa para la gestión y transformación de datos. Su uso permite generar nuevas variables o modificar variables existentes de manera clara, ordenada y consistente dentro del proceso de preparación de datos categóricos.

ocupacion <- ocupacion %>%
  mutate(
    # 1. Conversión de carácter a factor
    tipo_empleo = factor(tipo_empleo),

    # 2. Conversión de numérico a factor con etiquetas
    categoria_ocup = factor(
      categoria_ocup,
      levels = c(1, 2, 3),
      labels = c("Público", "Privado", "Doméstico")
    ),

    
    
    
    # 3. Transformación de variable cuantitativa a cualitativa
    nivel_educativo = cut(
      anios_estudio,
      breaks = c(0, 6, 12, 18),
      labels = c("Primaria", "Secundaria", "Terciaria"),
      include.lowest = TRUE,
      right = TRUE
    )
  )
ocupacion <- ocupacion %>%
  mutate(
    nivel_educativo = fct_relevel(
      nivel_educativo,
      "Primaria", "Secundaria", "Terciaria"
    )
  )

ocupacion
##    id tipo_empleo categoria_ocup salario anios_estudio nivel_educativo
## 1   1      Formal        Privado 3200000            12      Secundaria
## 2   2    Informal        Privado 1800000             6        Primaria
## 3   3      Formal        Público 4500000            17       Terciaria
## 4   4      Formal        Privado 3800000            14       Terciaria
## 5   5    Informal      Doméstico 1500000             5        Primaria
## 6   6      Formal        Público 5200000            18       Terciaria
## 7   7    Informal      Doméstico 1700000             8      Secundaria
## 8   8      Formal        Privado 2900000            11      Secundaria
## 9   9    Informal        Privado 2100000             7      Secundaria
## 10 10      Formal        Público 4800000            16       Terciaria
## 11 11      Formal        Privado 3500000            13       Terciaria
## 12 12    Informal      Doméstico 1600000             4        Primaria
## 13 13      Formal        Público 6000000            15       Terciaria
## 14 14    Informal        Privado 2400000             9      Secundaria
## 15 15      Formal        Privado 3300000            12      Secundaria

8.4 Verificación de resultados

str(ocupacion)
## 'data.frame':    15 obs. of  6 variables:
##  $ id             : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ tipo_empleo    : Factor w/ 2 levels "Formal","Informal": 1 2 1 1 2 1 2 1 2 1 ...
##  $ categoria_ocup : Factor w/ 3 levels "Público","Privado",..: 2 2 1 2 3 1 3 2 2 1 ...
##  $ salario        : num  3200000 1800000 4500000 3800000 1500000 5200000 1700000 2900000 2100000 4800000 ...
##  $ anios_estudio  : num  12 6 17 14 5 18 8 11 7 16 ...
##  $ nivel_educativo: Factor w/ 3 levels "Primaria","Secundaria",..: 2 1 3 3 1 3 2 2 2 3 ...
levels(ocupacion$tipo_empleo)
## [1] "Formal"   "Informal"
levels(ocupacion$categoria_ocup)
## [1] "Público"   "Privado"   "Doméstico"
levels(ocupacion$nivel_educativo)
## [1] "Primaria"   "Secundaria" "Terciaria"

Tablas de frecuencia

table(ocupacion$tipo_empleo)
## 
##   Formal Informal 
##        9        6
table(ocupacion$categoria_ocup)
## 
##   Público   Privado Doméstico 
##         4         8         3
table(ocupacion$nivel_educativo)
## 
##   Primaria Secundaria  Terciaria 
##          3          6          6

8.5 Interpretación

En este ejercicio se integran tres procedimientos fundamentales en el tratamiento de variables categóricas:

  • la conversión de una variable de tipo carácter a factor;
  • la conversión de una variable numérica codificada a factor con etiquetas;
  • la transformación de una variable cuantitativa en una variable cualitativa mediante intervalos definidos.

Asimismo, se incorpora la reordenación de niveles, lo cual permite dejar la variable categórica organizada de forma coherente para su posterior utilización en tablas, gráficos y análisis estadísticos.

9 Actividad de cierre

9.1 Preguntas para discusión

  1. ¿Por qué una variable almacenada como número no siempre debe analizarse como cuantitativa?
  2. ¿Qué diferencia analítica existe entre construir tramos salariales fijos y construir cuartiles de ingreso?
  3. ¿En qué tipo de análisis resulta especialmente útil reordenar niveles de un factor?

10 Mensaje metodológico final

El tratamiento de variables categóricas en R no es solo un asunto técnico. Implica tomar decisiones analíticas sobre cómo representar la realidad observada. Una misma variable puede tener almacenamiento numérico, pero significado cualitativo. Del mismo modo, una variable cuantitativa puede recategorizarse de formas distintas según el propósito del análisis.

En estudios del mercado laboral, estas decisiones son especialmente importantes porque afectan la forma en que se describen y comunican fenómenos como la educación, la inserción ocupacional, los ingresos y las jornadas de trabajo.

Nota metodológica: La presente guía fue elaborada con apoyo de herramientas de inteligencia artificial generativa, específicamente ChatGPT de OpenAI, como asistencia en la estructuración y redacción del material. La selección de contenidos, la validación conceptual y la revisión final son responsabilidad del docente.

11 Bibliografía

R Core Team. R: A language and environment for statistical computing. Vienna: R Foundation for Statistical Computing.

Wickham, H. et al. dplyr: A Grammar of Data Manipulation.

Wickham, H. forcats: Tools for Working with Categorical Variables.

Wickham, H. ggplot2: Elegant Graphics for Data Analysis.