---
title: "Redes de actores para construir ciudades amigables para las personas mayores en Nuevo León."
output: html_notebook
---


```{r, echo = FALSE}
############################################################
# MAPA DE ACTORES – POLÍTICA DE ENVEJECIMIENTO
############################################################

library(visNetwork)
library(dplyr)
library(htmlwidgets)
library(igraph)

############################################################
# 1️⃣ NODOS
############################################################

nodes <- data.frame(
  id = c(
    "DIF Estatal",
    "Instituto Estatal de Adultos Mayores",
    "Secretaría de Movilidad y Planeación Urbana",
    "Gobierno Municipal de San Pedro",
    "San Pedro 400 Centro Intergeneracional",
    "Procuraduría de la Defensa del Adulto Mayor",
    "IMSS",
    "Universidad Autónoma de Nuevo León",
    "Tecnológico de Monterrey",
    "Centro para el Futuro de las Ciudades",
    "UDEM",
    "Consejo Nuevo León para la Planeación Estratégica",
    "Cómo Vamos Nuevo León",
    "Regio Poder",
    "Casa de Retiro Luis Elizondo",
    "Centro Comunitario de San Pedro 400",
    "Centro Comunitario Revolución IV San Pedro",
    "Oxxo FEMSA",
    "Década del Envejecimiento Saludable (OMS)",
    "Comunidad de Personas Mayores"   # ← TEXTO CORREGIDO
  ),
  
  group = c(
    rep("Gobierno Estatal y Municipal", 6),
    "Instituciones de Salud",
    rep("Universidades y Centros de Investigación", 5),
    rep("Organizaciones de la Sociedad Civil", 2),
    rep("Colectivos Comunitarios", 3),
    "Sector Privado",
    "Organismos Internacionales",
    "Comunidad"
  )
)

# Tamaño base
nodes$size <- 25

# Reducir aún más tamaño de Comunidad
nodes$size[nodes$id == "Comunidad de Personas Mayores"] <- 5


############################################################
# 2️⃣ RELACIONES
############################################################

edges <- data.frame(
  from = c(
    "Década del Envejecimiento Saludable (OMS)",
    "Instituto Estatal de Adultos Mayores",
    "Consejo Nuevo León para la Planeación Estratégica",
    "Secretaría de Movilidad y Planeación Urbana",
    "DIF Estatal",
    "Gobierno Municipal de San Pedro",
    "Universidad Autónoma de Nuevo León",
    "Tecnológico de Monterrey",
    "UDEM",
    "Centro para el Futuro de las Ciudades",
    "Cómo Vamos Nuevo León",
    "Regio Poder",
    "Oxxo FEMSA",
    "Centro Comunitario de San Pedro 400",
    "Centro Comunitario Revolución IV San Pedro",
    "Casa de Retiro Luis Elizondo",
    "IMSS",
    "Procuraduría de la Defensa del Adulto Mayor",
    "DIF Estatal"
  ),
  
  to = c(
    "Instituto Estatal de Adultos Mayores",
    "Gobierno Municipal de San Pedro",
    "Instituto Estatal de Adultos Mayores",
    "Gobierno Municipal de San Pedro",
    "Procuraduría de la Defensa del Adulto Mayor",
    "San Pedro 400 Centro Intergeneracional",
    "Consejo Nuevo León para la Planeación Estratégica",
    "Consejo Nuevo León para la Planeación Estratégica",
    "Consejo Nuevo León para la Planeación Estratégica",
    "Gobierno Municipal de San Pedro",
    "Gobierno Municipal de San Pedro",
    "Gobierno Municipal de San Pedro",
    "Centro Comunitario de San Pedro 400",
    "Comunidad de Personas Mayores",
    "Comunidad de Personas Mayores",
    "DIF Estatal",
    "Comunidad de Personas Mayores",
    "Comunidad de Personas Mayores",
    "Instituto Estatal de Adultos Mayores"
  ),
  
  tipo = c(
    "Cooperación Técnica",
    "Regulación",
    "Incidencia Política",
    "Cooperación Técnica",
    "Prestación de Servicios",
    "Prestación de Servicios",
    "Cooperación Técnica",
    "Cooperación Técnica",
    "Cooperación Técnica",
    "Cooperación Técnica",
    "Incidencia Política",
    "Incidencia Política",
    "Financiamiento",
    "Prestación de Servicios",
    "Prestación de Servicios",
    "Regulación",
    "Prestación de Servicios",
    "Incidencia Política",
    "Coordinación Institucional"
  ),
  
  weight = c(
    5,5,4,3,5,5,4,4,4,3,4,2,3,5,5,3,4,3,4
  )
)

############################################################
# 3️⃣ COLORES POR TIPO DE RELACIÓN
############################################################

edges$color <- case_when(
  edges$tipo == "Financiamiento" ~ "#2A9D8F",
  edges$tipo == "Regulación" ~ "#E63946",
  edges$tipo == "Cooperación Técnica" ~ "#457B9D",
  edges$tipo == "Prestación de Servicios" ~ "#6A994E",
  edges$tipo == "Incidencia Política" ~ "#F77F00",
  edges$tipo == "Coordinación Institucional" ~ "#8D99AE"
)

edges$width <- edges$weight


############################################################
# 4️⃣ CREAR RED FINAL
############################################################

network_final <- visNetwork(nodes, edges,
                            height = "850px",
                            width = "100%") %>%
  
  visNodes(font = list(size = 22)) %>%
  
  visGroups(groupname = "Gobierno Estatal y Municipal",
            color = "#E63946", shape = "square") %>%
  
  visGroups(groupname = "Instituciones de Salud",
            color = "#457B9D", shape = "triangle") %>%
  
  visGroups(groupname = "Universidades y Centros de Investigación",
            color = "#1D3557", shape = "dot") %>%
  
  visGroups(groupname = "Organizaciones de la Sociedad Civil",
            color = "#F4A261", shape = "diamond") %>%
  
  visGroups(groupname = "Colectivos Comunitarios",
            color = "#2A9D8F", shape = "star") %>%
  
  visGroups(groupname = "Sector Privado",
            color = "#E9C46A", shape = "hexagon") %>%
  
  visGroups(groupname = "Organismos Internacionales",
            color = "#6A4C93", shape = "triangleDown") %>%
  
  visGroups(groupname = "Comunidad",
            color = "#CDB4DB", shape = "circle") %>%
  
  visEdges(smooth = TRUE) %>%
  
  # 🔹 LEYENDA CORREGIDA (ya no incluye nodo gigante de comunidad)
  visLegend(
    addNodes = data.frame(
      label = c(
        "Gobierno Estatal y Municipal",
        "Instituciones de Salud",
        "Universidades y Centros de Investigación",
        "Organizaciones de la Sociedad Civil",
        "Colectivos Comunitarios",
        "Sector Privado",
        "Organismos Internacionales",
        "Comunidad"
      ),
      shape = c("square","triangle","dot","diamond",
                "star","hexagon","triangleDown","circle"),
      color = c("#E63946","#457B9D","#1D3557","#F4A261",
                "#2A9D8F","#E9C46A","#6A4C93","#CDB4DB")
    ),
    addEdges = data.frame(
      label = c(
        "Financiamiento",
        "Regulación",
        "Cooperación Técnica",
        "Prestación de Servicios",
        "Incidencia Política",
        "Coordinación Institucional"
      ),
      color = c(
        "#2A9D8F",
        "#E63946",
        "#457B9D",
        "#6A994E",
        "#F77F00",
        "#8D99AE"
      )
    ),
    position = "right"
  ) %>%
  
  visOptions(
    highlightNearest = list(enabled = TRUE, degree = 1),
    nodesIdSelection = TRUE
  ) %>%
  
  visPhysics(stabilization = TRUE) %>%
  
  visLayout(randomSeed = 123)

```

```{r, echo= FALSE}
############################################################
# 5️⃣ MOSTRAR
############################################################

network_final
```

