---
title: "Preparación de datos CASEN 2024"
subtitle: "Protocolo IPO-R — Paso 1: Input → Procesamiento"
date: today
format:
  html:
    toc: true
    toc-depth: 3
    code-fold: show
    df-print: paged
execute:
  warning: false
  message: false
---

# Objetivo

Este script es el **primer paso** del protocolo IPO-R. Su tarea es:

1. Cargar los datos originales desde `input/data/original/`
2. Seleccionar y renombrar las variables de interés
3. Recodificar variables (categorías, etiquetas, tipos)
4. Guardar el conjunto de datos procesado en `input/data/proc/`

El script de análisis (`analisis.qmd`) **depende** de lo que aquí se genere. Por eso es importante correrlo primero.

::: {.callout-important}
## Regla de oro: los datos originales no se tocan
El archivo en `input/data/original/` se carga pero **nunca se modifica**. Todos los cambios se guardan en `input/data/proc/`.
:::

---

# 1. Paquetes

```{r}
#| label: paquetes

library(haven)    # leer objetos con etiquetas (haven_labelled)
library(dplyr)    # manipulación de datos
library(here)     # rutas relativas al proyecto
```

# 2. Cargar datos originales

Cargamos la Encuesta de Caracterización Socioeconómica Nacional (CASEN) 2024 desde la carpeta de datos originales. Usamos `here::here()` para construir la ruta relativa a la raíz del proyecto, lo que garantiza que el código funcione en cualquier computador.

```{r}
#| label: cargar-datos

casen_orig <- readRDS(here::here("input", "data", "original", "casen24.rds"))

# Dimensiones del dataset original
cat("Filas:", nrow(casen_orig), "| Columnas:", ncol(casen_orig), "\n")
```

# 3. Seleccionar variables

Trabajamos con un subconjunto de variables relevantes para el análisis. Renombramos a nombres descriptivos.

```{r}
#| label: seleccionar-variables

casen <- casen_orig |>
  select(
    pco1,            # posición en el hogar: 1 = jefe/a de hogar
    region,          # región (código numérico)
    area,            # zona: 1 = urbano, 2 = rural
    sexo,            # sexo: 1 = hombre, 2 = mujer
    edad,            # edad en años cumplidos
    esc,             # años de escolaridad
    pobreza,         # situación de pobreza (por ingresos)
    ytotcorh         # ingreso total del hogar corregido
  )

glimpse(casen)
```

# 4. Recodificar variables

## 4.1 Sexo

```{r}
#| label: recodificar-sexo

casen <- casen |>
  mutate(
    sexo = factor(sexo,
                  levels = c(1, 2),
                  labels = c("Hombre", "Mujer"))
  )

table(casen$sexo)
```

## 4.2 Zona

```{r}
#| label: recodificar-zona

casen <- casen |>
  mutate(
    area = factor(area,
                  levels = c(1, 2),
                  labels = c("Urbano", "Rural"))
  )

table(casen$area)
```

## 4.3 Pobreza por ingresos

```{r}
#| label: recodificar-pobreza

casen <- casen |>
  mutate(
    pobreza = factor(pobreza,
                     levels = c(1, 2, 3),
                     labels = c("Pobreza extrema",
                                "Pobreza no extrema",
                                "No pobre"))
  )

table(casen$pobreza)
```

## 4.4 Ingreso del hogar

`ytotcorh` es el ingreso total del hogar corregido por el MIDESO. En CASEN no hay valores negativos, pero sí puede haber `NA` en casos donde el hogar no reportó ingresos. Revisamos la distribución antes de decidir cómo tratarlos.

```{r}
#| label: ingreso-revision

summary(casen$ytotcorh)
cat("Casos con ingreso NA:", sum(is.na(casen$ytotcorh)), "\n")
cat("Casos con ingreso = 0:", sum(casen$ytotcorh == 0, na.rm = TRUE), "\n")
```

Los valores `NA` corresponden a hogares que no respondieron la sección de ingresos. Los valores 0 son válidos: hogares sin ingresos monetarios declarados. Renombramos la variable para mayor claridad y dejamos los `NA` en la base — serán excluidos automáticamente por `na.rm = TRUE` en los cálculos.

```{r}
#| label: ingreso-renombrar

casen <- casen |>
  rename(ingreso_hogar = ytotcorh)
```

# 5. Revisión final

```{r}
#| label: revision-final

cat("Casos finales:", nrow(casen), "\n")
cat("Variables:", ncol(casen), "\n\n")

# Verificar que no hay columnas enteramente NA
sapply(casen, function(x) sum(is.na(x)))
```

# 6. Guardar datos procesados

```{r}
#| label: guardar-datos

saveRDS(casen,
        file = here::here("input", "data", "proc", "casen24_proc.rds"))

cat("Datos guardados en: input/data/proc/casen24_proc.rds\n")
```

---

::: {.callout-note}
## Siguiente paso
Con los datos procesados guardados, puedes abrir y correr `analisis.qmd`.
:::
