# --- 1. CARGA DE PAQUETES ---
if (!require("haven")) install.packages("haven")
## Loading required package: haven
if (!require("dplyr")) install.packages("dplyr")
## Loading required package: dplyr
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
if (!require("ggplot2")) install.packages("ggplot2")
## Loading required package: ggplot2
if (!require("scales")) install.packages("scales")
## Loading required package: scales
if (!require("tidyr")) install.packages("tidyr")
## Loading required package: tidyr
if (!require("stringr")) install.packages("stringr")
## Loading required package: stringr
library(haven)
library(dplyr)
library(ggplot2)
library(scales)
library(tidyr)
library(stringr)

# --- 2. CARGA DE DATOS ---
# Asegúrate de que el archivo .sav esté en la misma carpeta que tu script
nombre_archivo <- "20241205_enssex_data.sav" 

tryCatch({
  datos <- read_sav(nombre_archivo)
  message(">> ¡Base de datos cargada exitosamente!")
}, error = function(e) {
  stop("ERROR: No se encuentra el archivo. Verifica que el nombre esté bien escrito y que estés en la carpeta correcta.")
})
## >> ¡Base de datos cargada exitosamente!
# --- 3. LIMPIEZA DE COLUMNAS (Corrección de error de lectura) ---
names(datos) <- toupper(trimws(names(datos)))

# --- 4. PROCESAMIENTO INTELIGENTE DE DATOS (CORREGIDO) ---
df_analisis <- datos %>%
  select(P5, P31, P32) %>%
  mutate(
    # Paso A: Convertir a texto
    Educ_Texto = as.character(as_factor(P5)),
    
    # Paso B: Renombrar (LÓGICA MEJORADA PARA QUE NO SE BORREN DATOS)
    Educacion_Corta = case_when(
      # 1. Postgrado
      grepl("Postgrado", Educ_Texto) ~ "Postgrado",
      
      # 2. Universidad (Busca la palabra 'Profesional')
      grepl("Profesional", Educ_Texto) & !grepl("Media", Educ_Texto) ~ "Universitaria",
      
      # 3. Técnico Superior (Busca 'Nivel Superior' para no confundir con Media Técnica)
      grepl("Nivel Superior", Educ_Texto) ~ "Téc. Superior",
      
      # 4. Media (Incluye Científico-Humanista, Técnica y Humanidades antiguas)
      grepl("Media", Educ_Texto) | grepl("Humanidades", Educ_Texto) | grepl("Industrial", Educ_Texto) ~ "Media",
      
      # 5. Básica (Incluye Básica, Primario, Preparatoria)
      grepl("Básica", Educ_Texto) | grepl("Primario", Educ_Texto) | grepl("Preparatoria", Educ_Texto) | grepl("Especial", Educ_Texto) ~ "Básica",
      
      # 6. Sin estudios (Nunca asistió, preescolar)
      grepl("Nunca", Educ_Texto) | grepl("Sala cuna", Educ_Texto) | grepl("Jardín", Educ_Texto) | grepl("Kinder", Educ_Texto) ~ "Sin estudios",
      
      TRUE ~ "Otro/NsNr"
    ),
    
    # Paso C: Ordenar
    Educacion = factor(Educacion_Corta, levels = c(
      "Sin estudios", "Básica", "Media", 
      "Téc. Superior", "Universitaria", "Postgrado"
    )),
    
    Aceptacion_LGB = as_factor(P31),
    Aceptacion_Trans = as_factor(P32)
  ) %>%
  # Paso D: Filtros
  filter(!is.na(Educacion) & !is.na(Aceptacion_LGB) & !is.na(Aceptacion_Trans)) %>%
  filter(Educacion != "Otro/NsNr") %>%
  droplevels()


# --- 5. ANÁLISIS ESTADÍSTICO ---

# PRUEBA 1: LGB
tabla_lgb <- table(df_analisis$Educacion, df_analisis$Aceptacion_LGB)
tabla_lgb <- tabla_lgb[rowSums(tabla_lgb) > 0, ]
print(tabla_lgb)
##                
##                 Lo/a aceptaría No lo/a aceptaría No sabe cómo reaccionaría
##   Sin estudios             126                22                        38
##   Básica                  2627               247                       741
##   Media                   7848               342                      1644
##   Téc. Superior           2231                81                       310
##   Universitaria           3141                82                       383
##   Postgrado                200                 2                        16
##                
##                 No responde
##   Sin estudios            8
##   Básica                 79
##   Media                 147
##   Téc. Superior          34
##   Universitaria          42
##   Postgrado               1
print(chisq.test(tabla_lgb, simulate.p.value = TRUE))
## 
##  Pearson's Chi-squared test with simulated p-value (based on 2000
##  replicates)
## 
## data:  tabla_lgb
## X-squared = 391.03, df = NA, p-value = 0.0004998
# PRUEBA 2: TRANS
tabla_trans <- table(df_analisis$Educacion, df_analisis$Aceptacion_Trans)
tabla_trans <- tabla_trans[rowSums(tabla_trans) > 0, ]
print(tabla_trans)
##                
##                 Lo/a aceptaría No lo/a aceptaría No sabe cómo reaccionaría
##   Sin estudios             120                27                        40
##   Básica                  2530               269                       810
##   Media                   7542               377                      1906
##   Téc. Superior           2130                96                       392
##   Universitaria           2991               105                       508
##   Postgrado                188                 6                        23
##                
##                 No responde
##   Sin estudios            7
##   Básica                 85
##   Media                 156
##   Téc. Superior          38
##   Universitaria          44
##   Postgrado               2
print(chisq.test(tabla_trans, simulate.p.value = TRUE))
## 
##  Pearson's Chi-squared test with simulated p-value (based on 2000
##  replicates)
## 
## data:  tabla_trans
## X-squared = 319.49, df = NA, p-value = 0.0004998
# --- 6. GENERACIÓN DE GRÁFICOS (Visibles y Limpios) ---

# GRÁFICO 1: LGB
plot_lgb <- ggplot(df_analisis, aes(x = Educacion, fill = Aceptacion_LGB)) +
  geom_bar(position = "fill") +
  coord_flip() + 
  scale_y_continuous(labels = percent) +
  # Ajustamos la leyenda (wrap) para que no ocupe todo el espacio
  scale_fill_discrete(labels = function(x) str_wrap(x, width = 25)) +
  labs(
    title = "Aceptación hacia hijo/a LGB",
    subtitle = "Según Nivel Educacional",
    x = "Nivel Educacional",
    y = "Porcentaje",
    fill = "Respuesta"
  ) +
  theme_minimal() +
  theme(
    legend.position = "bottom",
    plot.title = element_text(face = "bold", size = 14),
    axis.text.y = element_text(size = 10) # Tamaño legible para las etiquetas cortas
  )

print(plot_lgb)

ggsave("Grafico_LGB_Final.png", plot = plot_lgb, width = 10, height = 7)


# GRÁFICO 2: TRANS
plot_trans <- ggplot(df_analisis, aes(x = Educacion, fill = Aceptacion_Trans)) +
  geom_bar(position = "fill") +
  coord_flip() + 
  scale_y_continuous(labels = percent) +
  scale_fill_discrete(labels = function(x) str_wrap(x, width = 25)) +
  labs(
    title = "Aceptación hacia hijo/a Trans",
    subtitle = "Según Nivel Educacional",
    x = "Nivel Educacional",
    y = "Porcentaje",
    fill = "Respuesta"
  ) +
  theme_minimal() +
  theme(
    legend.position = "bottom",
    plot.title = element_text(face = "bold", size = 14),
    axis.text.y = element_text(size = 10)
  )

print(plot_trans)

ggsave("Grafico_Trans_Final.png", plot = plot_trans, width = 10, height = 7)