Mapa Mundi Final

Juntamos todos los clusters en uno unico

# ---------- DATOS Y CLUSTERIZACIÓN ----------

# Variables a considerar
vars <- c("trade_usd", "2_property_rights", "4_trade", "3_sound_money", "5c_business_reg")

# Tabla resumida por país
tabla_cluster <- tabla_filtrada %>%
  group_by(Pais) %>%
  summarise(trade_usd = mean(trade_usd, na.rm = TRUE), .groups = "drop")

# Normalización
tabla_cluster$trade_usd_z <- scale(tabla_cluster$trade_usd)

# Clustering jerárquico
dist_matrix <- dist(tabla_cluster$trade_usd_z)
hc <- hclust(dist_matrix, method = "ward.D2")
tabla_cluster$cluster <- cutree(hc, k = 6)

# Agregar clúster a los datos
tabla_filtrada_cluster <- left_join(tabla_filtrada, tabla_cluster %>% select(Pais, cluster), by = "Pais")
tabla_filtrada_cluster <- tabla_filtrada_cluster %>%
  mutate(trade_usd = trade_usd / 1000)

# ---------- CORRELACIONES POR PAÍS ----------

otras_vars <- setdiff(vars, "trade_usd")

correlaciones <- tabla_filtrada_cluster %>%
  group_by(Pais, cluster) %>%
  filter(n() >= 3) %>%
  summarise(
    across(all_of(otras_vars), ~{
      valid <- complete.cases(.x, trade_usd)
      if (sum(valid) >= 2) cor(.x[valid], trade_usd[valid], method = "spearman") else NA_real_
    }, .names = "cor_{.col}"),
    mean_correlation = mean(c_across(starts_with("cor_")), na.rm = TRUE),
    base_mean = mean(trade_usd, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  rename(name = Pais)

# ---------- MAPA INTERACTIVO ÚNICO ----------

# Obtener geometría mundial
world <- ne_countries(scale = "medium", returnclass = "sf")

# Unir mapa con datos
mapa_sf <- left_join(world, correlaciones, by = "name")

# Etiquetas del popup
mapa_sf$popup <- apply(mapa_sf, 1, function(row) {
  cors <- paste0("<strong>Correlación con ", otras_vars, ": </strong>", 
                 format(round(as.numeric(row[paste0("cor_", otras_vars)]), 2)), collapse = "<br/>")
  paste0(
    "<strong>País: </strong>", row["name"], "<br/>",
    "<strong>Clúster: </strong>", row["cluster"], "<br/>",
    "<strong>Promedio trade_usd: </strong>$", format(round(as.numeric(row["base_mean"]), 2), big.mark = ","), "<br/>",
    cors, "<br/>",
    "<strong><u>Correlación promedio: </u></strong>", round(as.numeric(row["mean_correlation"]), 2)
  )
})

# Colores por clúster (opcional: puedes usar colores distintos por clúster si prefieres)
paleta_color <- colorNumeric("RdYlBu", domain = mapa_sf$mean_correlation)

# Crear mapa interactivo
leaflet(data = mapa_sf) %>%
  addProviderTiles("CartoDB.Positron") %>%
  addPolygons(
    fillColor = ~paleta_color(mean_correlation),
    fillOpacity = 0.7,
    color = "#BDBDC3",
    weight = 1,
    popup = ~popup
  ) %>%
  addLegend(
    pal = paleta_color,
    values = ~mean_correlation,
    position = "bottomright",
    title = "Correlación media con trade_usd"
  )