# Instalar solo la primera vez (descomentar si hace falta)
# install.packages(c("readxl", "tidyverse", "janitor", "skimr", "effsize", "car", "knitr"))

library(readxl)     # Leer archivos .xlsx
library(tidyverse)  # dplyr, ggplot2, tidyr, forcats
library(janitor)    # Limpiar nombres de columnas
library(skimr)      # Resumen exploratorio rapido
library(effsize)    # Tamano del efecto (d de Cohen)
library(car)        # Test de Levene
library(knitr)      # Tablas con kable()
# -------------------------------------------------------------------------
# IMPORTANTE - COMO EVITAR EL ERROR "path does not exist":
# 1) Guarda el archivo .xlsx EN LA MISMA CARPETA que este .Rmd.
# 2) Ve a: Session > Set Working Directory > To Source File Location.
# 3) Verifica el nombre EXACTO del archivo con list.files() (ver abajo).
# 4) Si tu archivo tiene un nombre distinto (ej. con espacios o "(1)"),
#    renombralo a "Base_Gobernanza_Global.xlsx" o cambia la ruta abajo.
# -------------------------------------------------------------------------

# Descomenta estas 2 lineas para depurar si el archivo no aparece:
# getwd()
# list.files()

gobernanza <- read_excel("Base_Gobernanza_Global.xlsx") %>%
  clean_names()

# Estructura general: tipo de cada variable
glimpse(gobernanza)
## Rows: 100
## Columns: 11
## $ edad                                   <dbl> 59, 47, 59, 65, 45, 59, 39, 56,…
## $ sexo                                   <chr> "Femenino", "Masculino", "Mascu…
## $ nivel_educativo                        <chr> "Universitario", "Secundaria", …
## $ conocimiento_ods                       <chr> "Medio", "Medio", "Alto", "Alto…
## $ confianza_gobernanza_global            <dbl> 8, 5, 1, 6, 4, 1, 5, 6, 8, 7, 6…
## $ apoyo_iniciativas_climaticas           <chr> "Sí", "Sí", "Sí", "Sí", "Sí", "…
## $ percepcion_justicia_global             <dbl> 1, 4, 9, 5, 2, 9, 9, 8, 3, 8, 6…
## $ participacion_espacios_internacionales <chr> "No", "Sí", "No", "No", "Sí", "…
## $ frecuencia_lectura_agenda2030          <chr> "Nunca", "Baja", "Media", "Alta…
## $ actitud_cooperacion                    <dbl> 3, 3, 8, 7, 9, 10, 8, 6, 1, 1, …
## $ satisfaccion_gestion_global            <dbl> 10, 5, 7, 1, 8, 6, 9, 10, 2, 9,…
# Numero de filas (observaciones) y columnas (variables)
dim(gobernanza)
## [1] 100  11
# Verificamos que no existan valores perdidos (NA)
colSums(is.na(gobernanza))
##                                   edad                                   sexo 
##                                      0                                      0 
##                        nivel_educativo                       conocimiento_ods 
##                                      0                                      0 
##            confianza_gobernanza_global           apoyo_iniciativas_climaticas 
##                                      0                                      0 
##             percepcion_justicia_global participacion_espacios_internacionales 
##                                      0                                      0 
##          frecuencia_lectura_agenda2030                    actitud_cooperacion 
##                                      0                                      0 
##            satisfaccion_gestion_global 
##                                      0
resumen_numerico <- gobernanza %>%
  summarise(
    across(
      c(edad, confianza_gobernanza_global, percepcion_justicia_global,
        actitud_cooperacion, satisfaccion_gestion_global),
      list(media = ~mean(.x, na.rm = TRUE),
           mediana = ~median(.x, na.rm = TRUE),
           de = ~sd(.x, na.rm = TRUE),
           min = ~min(.x, na.rm = TRUE),
           max = ~max(.x, na.rm = TRUE)),
      .names = "{.col}_{.fn}"
    )
  )

kable(t(resumen_numerico), col.names = "Valor", digits = 2,
      caption = "Resumen descriptivo de variables numericas")
Resumen descriptivo de variables numericas
Valor
edad_media 39.13
edad_mediana 38.00
edad_de 13.93
edad_min 18.00
edad_max 65.00
confianza_gobernanza_global_media 5.19
confianza_gobernanza_global_mediana 5.00
confianza_gobernanza_global_de 2.73
confianza_gobernanza_global_min 1.00
confianza_gobernanza_global_max 10.00
percepcion_justicia_global_media 5.01
percepcion_justicia_global_mediana 5.00
percepcion_justicia_global_de 2.66
percepcion_justicia_global_min 1.00
percepcion_justicia_global_max 10.00
actitud_cooperacion_media 5.22
actitud_cooperacion_mediana 5.00
actitud_cooperacion_de 3.16
actitud_cooperacion_min 1.00
actitud_cooperacion_max 10.00
satisfaccion_gestion_global_media 5.41
satisfaccion_gestion_global_mediana 5.00
satisfaccion_gestion_global_de 3.05
satisfaccion_gestion_global_min 1.00
satisfaccion_gestion_global_max 10.00
ggplot(gobernanza, aes(x = confianza_gobernanza_global)) +
  geom_histogram(binwidth = 1, fill = "#2f6f5e", color = "white") +
  labs(title = "Distribucion de la confianza en la gobernanza global",
       x = "Nivel de confianza (1-10)", y = "Frecuencia") +
  theme_minimal(base_size = 13)

ggplot(gobernanza, aes(y = satisfaccion_gestion_global)) +
  geom_boxplot(fill = "#b08c3a", alpha = 0.7) +
  labs(title = "Boxplot: satisfaccion con la gestion global",
       y = "Satisfaccion (1-10)") +
  theme_minimal(base_size = 13)

tabla_educ <- gobernanza %>%
  count(nivel_educativo) %>%
  mutate(porcentaje = round(100 * n / sum(n), 1))

kable(tabla_educ, col.names = c("Nivel educativo", "Frecuencia", "Porcentaje (%)"),
      caption = "Distribucion del nivel educativo")
Distribucion del nivel educativo
Nivel educativo Frecuencia Porcentaje (%)
Postgrado 24 24
Secundaria 21 21
Técnico 29 29
Universitario 26 26
ggplot(gobernanza, aes(x = fct_infreq(nivel_educativo))) +
  geom_bar(fill = "#2f6f9e") +
  labs(title = "Nivel educativo de los encuestados",
       x = "Nivel educativo", y = "Numero de personas") +
  theme_minimal(base_size = 13)

vars_numericas <- gobernanza %>%
  select(edad, confianza_gobernanza_global, percepcion_justicia_global,
         actitud_cooperacion, satisfaccion_gestion_global)

matriz_cor <- round(cor(vars_numericas, use = "complete.obs"), 2)
kable(matriz_cor, caption = "Matriz de correlaciones entre variables numericas")
Matriz de correlaciones entre variables numericas
edad confianza_gobernanza_global percepcion_justicia_global actitud_cooperacion satisfaccion_gestion_global
edad 1.00 0.02 -0.10 0.17 -0.12
confianza_gobernanza_global 0.02 1.00 -0.15 0.08 -0.09
percepcion_justicia_global -0.10 -0.15 1.00 0.06 0.18
actitud_cooperacion 0.17 0.08 0.06 1.00 -0.06
satisfaccion_gestion_global -0.12 -0.09 0.18 -0.06 1.00
ggplot(gobernanza, aes(x = percepcion_justicia_global, y = actitud_cooperacion)) +
  geom_jitter(width = 0.15, height = 0.15, color = "#7a5ba6", alpha = 0.7) +
  geom_smooth(method = "lm", se = TRUE, color = "#1c2321") +
  labs(title = "Percepcion de justicia global y actitud de cooperacion",
       x = "Percepcion de justicia global (1-10)",
       y = "Actitud de cooperacion (1-10)") +
  theme_minimal(base_size = 13)

resumen_participacion <- gobernanza %>%
  group_by(participacion_espacios_internacionales) %>%
  summarise(media = mean(percepcion_justicia_global),
            de = sd(percepcion_justicia_global),
            n = n())

kable(resumen_participacion, digits = 2,
      col.names = c("Participa en espacios internacionales", "Media", "DE", "n"),
      caption = "Percepcion de justicia global segun participacion internacional")
Percepcion de justicia global segun participacion internacional
Participa en espacios internacionales Media DE n
No 5.49 2.66 61
4.26 2.53 39
# NOTA IMPORTANTE: las categorias reales de esta variable son "Sí" (con tilde)
# y "No". Los nombres en scale_fill_manual deben escribirse EXACTAMENTE
# igual (incluyendo tildes) o ggplot no aplicara el color personalizado.
ggplot(gobernanza, aes(x = participacion_espacios_internacionales,
                        y = percepcion_justicia_global,
                        fill = participacion_espacios_internacionales)) +
  geom_boxplot(alpha = 0.8) +
  scale_fill_manual(values = c("Sí" = "#2f6f5e", "No" = "#c1622e")) +
  labs(title = "Justicia global percibida segun participacion internacional",
       x = "Participa en espacios internacionales?",
       y = "Percepcion de justicia global (1-10)") +
  theme_minimal(base_size = 13)

gobernanza %>%
  group_by(participacion_espacios_internacionales) %>%
  summarise(shapiro_p_valor = shapiro.test(percepcion_justicia_global)$p.value)
## # A tibble: 2 × 2
##   participacion_espacios_internacionales shapiro_p_valor
##   <chr>                                            <dbl>
## 1 No                                             0.0106 
## 2 Sí                                             0.00302
ggplot(gobernanza, aes(sample = percepcion_justicia_global)) +
  stat_qq(color = "#2f6f5e") +
  stat_qq_line(color = "#1c2321") +
  labs(title = "Grafico QQ: percepcion de justicia global") +
  theme_minimal(base_size = 13)

leveneTest(percepcion_justicia_global ~ participacion_espacios_internacionales,
           data = gobernanza)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  1  0.7433 0.3907
##       98
prueba_t <- t.test(percepcion_justicia_global ~ participacion_espacios_internacionales,
                    data = gobernanza)
prueba_t
## 
##  Welch Two Sample t-test
## 
## data:  percepcion_justicia_global by participacion_espacios_internacionales
## t = 2.3351, df = 83.978, p-value = 0.02193
## alternative hypothesis: true difference in means between group No and group Sí is not equal to 0
## 95 percent confidence interval:
##  0.1832985 2.2874876
## sample estimates:
## mean in group No mean in group Sí 
##         5.491803         4.256410
efecto <- cohen.d(percepcion_justicia_global ~ participacion_espacios_internacionales,
                   data = gobernanza)
efecto
## 
## Cohen's d
## 
## d estimate: 0.4736515 (small)
## 95 percent confidence interval:
##      lower      upper 
## 0.06139681 0.88590611
# Prueba de respaldo, dado que no se cumple estrictamente la normalidad
wilcox.test(percepcion_justicia_global ~ participacion_espacios_internacionales,
            data = gobernanza, conf.int = TRUE)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  percepcion_justicia_global by participacion_espacios_internacionales
## W = 1508, p-value = 0.02368
## alternative hypothesis: true location shift is not equal to 0
## 95 percent confidence interval:
##  4.939998e-05 2.000005e+00
## sample estimates:
## difference in location 
##               1.000003
# SOLUCION PARA EL DOCENTE (eval = FALSE para que no se ejecute automaticamente)
# Recordatorio: las categorias son "Sí" (con tilde) y "No"

gobernanza %>%
  group_by(apoyo_iniciativas_climaticas) %>%
  summarise(media = mean(actitud_cooperacion),
            mediana = median(actitud_cooperacion),
            de = sd(actitud_cooperacion), n = n())

ggplot(gobernanza, aes(x = apoyo_iniciativas_climaticas, y = actitud_cooperacion,
                        fill = apoyo_iniciativas_climaticas)) +
  geom_boxplot(alpha = 0.8) +
  scale_fill_manual(values = c("Sí" = "#2f6f9e", "No" = "#c1622e")) +
  labs(title = "Actitud de cooperacion segun apoyo a iniciativas climaticas",
       x = "Apoya iniciativas climaticas?", y = "Actitud de cooperacion (1-10)") +
  theme_minimal()

gobernanza %>%
  group_by(apoyo_iniciativas_climaticas) %>%
  summarise(shapiro_p = shapiro.test(actitud_cooperacion)$p.value)

leveneTest(actitud_cooperacion ~ apoyo_iniciativas_climaticas, data = gobernanza)

t.test(actitud_cooperacion ~ apoyo_iniciativas_climaticas, data = gobernanza)
cohen.d(actitud_cooperacion ~ apoyo_iniciativas_climaticas, data = gobernanza)
wilcox.test(actitud_cooperacion ~ apoyo_iniciativas_climaticas, data = gobernanza,
            conf.int = TRUE)

# RESULTADO ESPERADO (referencia para el docente, calculado sobre estos datos):
# Media grupo "Si" ~ 5.41 (n=71) vs grupo "No" ~ 4.76 (n=29)
# t-test: t ~ 0.88, p ~ 0.38 (NO significativo)
# Cohen's d ~ 0.21 (efecto pequeno)
# Conclusion esperada: NO hay evidencia suficiente de que el apoyo a
# iniciativas climaticas se relacione con la actitud de cooperacion;
# la diferencia observada es pequena y no significativa (p > 0.05).