Parte 3: Discretización y modificación

1. Transformen las variables categóricas en un formato adecuado para el análisis.

library(dplyr)
library(stringr)
library(tidyr)

cat_vars <- c("Ciudad","Nivel_Educativo","Estado_Civil","Sector_Laboral","Propietario_Vivienda","Rango_Salario")

df_final <- df
df_final[num_vars] <- Complete_pmm[num_vars]

# 2) Crear Rango_Salario (si no existe todavía)
df_final <- df_final %>%
  mutate(
    Rango_Salario = case_when(
      is.na(Salario) ~ NA_character_,
      Salario < 20000 ~ "Bajo",
      Salario < 50000 ~ "Medio",
      TRUE ~ "Alto"
    )
  )


df_cat <- df_final %>%
  mutate(
    across(all_of(cat_vars), ~ str_squish(as.character(.))),
    across(all_of(cat_vars), ~ replace_na(., "Desconocido"))
  ) %>%
  mutate(
    # Ordinales con orden
    Nivel_Educativo = factor(Nivel_Educativo,
                             levels = c("Primaria","Secundaria","Universitario"),
                             ordered = TRUE),
    Rango_Salario = factor(Rango_Salario,
                           levels = c("Bajo","Medio","Alto"),
                           ordered = TRUE),
    across(setdiff(cat_vars, c("Nivel_Educativo","Rango_Salario")), as.factor)
  )

glimpse(df_cat)
## Rows: 100
## Columns: 12
## $ ID                   <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15…
## $ Edad                 <dbl> 35, 43, 53, 38, 58, 46, 38, 62, 35, 30, 45, 33, 3…
## $ Salario              <dbl> 27203, 45647, 42181, 58530, 76972, 59877, 30183, …
## $ Experiencia          <dbl> 24, 10, 10, 20, 14, 16, 26, 29, 38, 24, 30, 30, 2…
## $ Ciudad               <fct> Ponce, San Juan, Caguas, Ponce, Ponce, Caguas, Ca…
## $ Nivel_Educativo      <ord> Primaria, Primaria, Universitario, Universitario,…
## $ Horas_Trabajo_Semana <dbl> 54, 36, 26, 45, 59, 60, 22, 41, 49, 33, 28, 50, 5…
## $ Estado_Civil         <fct> Casado, Casado, Desconocido, Casado, Casado, Casa…
## $ Sector_Laboral       <fct> Público, Público, Independiente, Público, Indepen…
## $ Cantidad_Hijos       <dbl> 3, 3, 5, 2, 5, 4, 0, 0, 3, 5, 5, 3, 4, 2, 1, 3, 5…
## $ Propietario_Vivienda <fct> No, No, Sí, Sí, Sí, No, Sí, Sí, Sí, No, No, No, N…
## $ Rango_Salario        <ord> Medio, Medio, Medio, Alto, Alto, Alto, Medio, Alt…

2. Expliquen las decisiones tomadas en este proceso.

Se transformaron las variables categóricas a un formato adecuado para el análisis. Primero, las variables nominales como Ciudad, Estado_Civil, Sector_Laboral y Propietario_Vivienda se convirtieron a factor para que el análisis reconozca correctamente sus categorías y permita generar gráficos por grupo. Luego, Nivel_Educativo y Rango_Salario se definieron como factores ordenados, ya que representan categorías con jerarquía, lo cual mejora la interpretación y comparaciones entre grupos. Además, los valores faltantes en categóricas se recodificaron como “Desconocido” para no perder observaciones y mantener consistencia en los resultados. Se creó Rango_Salario a partir de Salario para discretizar el ingreso en grupos comparables y facilitar análisis posteriores.

Parte 4: Visualización avanzada

1. Crea un mapa de calor interactivo de correlaciones entre las variables numéricas usando plotly.

cor_mat <- df_final %>%
  select(where(is.numeric)) %>%
  cor(use = "complete.obs")

plot_ly(
  x = colnames(cor_mat),
  y = colnames(cor_mat),
  z = cor_mat,
  zmin = -1,
    zmax = 1,
  type = "heatmap"
)

¿Qué patrones observas en los datos?

La mayoría de las correlaciones entre las variables numéricas están cercanas a cero, lo que sugiere que no existen relaciones lineales fuertes en el conjunto de datos. Las asociaciones más visibles son entre Salario y Experiencia, y entre Salario y Horas_Trabajo_Semana. También se aprecia una relación positiva leve entre Edad y Cantidad_Hijos. No se identifican correlaciones negativas fuertes.

2. Genera un gráfico de barras interactivo con ggplotly para comparar cantidad de hijos según el rango de salario.

p_barras <- df_final %>%
  count(Rango_Salario, Cantidad_Hijos) %>%
  ggplot(aes(x = Rango_Salario, y = n, fill = factor(Cantidad_Hijos))) +
  geom_bar(stat = "identity", position = "dodge")

ggplotly(p_barras)

¿Qué patrones observas en los datos?

Podemos ver que las personas con un salario mas alto tienen mas hijos en general.

3. Crea un gráfico de dispersión donde se visualice la relación entre Salario y Experiencia.

plot_ly(
  df_final,
  x = ~Experiencia,
  y = ~Salario,
  type = "scatter",
  mode = "markers"
)

¿Qué patrones observas en los datos?

Con la grafica no es completamente obvio pero si nos fijamos los puntos se ven mas concentrado arriba a la derecha lo que señala lo mismo que vimos en el mapa de calor, que con mas experiencia el salario tiende a ser mas alto.