El análisis de involucrados (Stakeholder Analysis)

El análisis de actores, también conocido como análisis de stakeholders, es una metodología utilizada para identificar, evaluar y entender a las personas, grupos u organizaciones que tienen interés, influencia o que pueden verse afectados por un proyecto, política, programa o situación específica. Su objetivo es mapear y comprender las expectativas, intereses y el poder relativo de los distintos actores involucrados, así como sus posibles interacciones y conflictos. Hoy su analisis puede realizarse a través de mapear las relaciones (análisis de redes) que existen entre los actores que componen una intervención.

El análisis de redes, también conocido como análisis de redes sociales (Social Network Analysis, SNA), es una metodología que estudia las relaciones e interacciones entre actores (personas, organizaciones, entidades, etc.) en un sistema determinado. Su objetivo principal es entender cómo se estructuran y funcionan estas relaciones dentro de una red.

Algunas conceptos claves dentro del SNA son el los nodos, vertices, tipos de matrices y las medidas de centralidad.

Nodos y Aristas: Nodos (o vértices): Representan los actores de la red, que pueden ser individuos, organizaciones, países, entre otros. Aristas (o enlaces): Representan las conexiones o relaciones entre los nodos, como lazos de amistad, colaboraciones, flujos de información, o relaciones comerciales.

Tipología de Redes: Redes no dirigidas: Las conexiones entre nodos no tienen una dirección específica (e.g., relaciones de amistad). Redes dirigidas: Las conexiones tienen una dirección, indicando la naturaleza asimétrica de la relación (e.g., flujo de información, autoridad). Redes ponderadas: Las conexiones tienen un peso o valor que indica la intensidad o la frecuencia de la relación.

Medidas de Centralidad: Estas métricas ayudan a identificar los nodos más importantes dentro de la red: Centralidad de grado: Mide el número de conexiones directas de un nodo. Centralidad de intermediación: Cuantifica cuántas veces un nodo actúa como un puente a lo largo del camino más corto entre otros nodos. Centralidad de proximidad: Indica cuán cerca está un nodo de todos los demás en la red. Centralidad de vector propio: Mide la influencia de un nodo, considerando también la importancia de los nodos a los que está conectado.

Estructuras de Redes: Redes densas: Nodos muy interconectados, con muchas relaciones directas entre ellos. Redes dispersas: Nodos con pocas conexiones directas, indicando una mayor distancia entre los actores. Clústeres o comunidades: Subgrupos de nodos dentro de la red que están más conectados entre sí que con otros nodos.

El análisis de redes proporciona una perspectiva estructural única, permitiendo ver más allá de las características individuales y entender cómo las interacciones y la posición de los actores dentro de la red afectan el comportamiento, la influencia y el poder. Esto es fundamental para entender cómo las intervenciones operan y qué tipo de decisiones se pueden desprender de la interación de los actores.

Realicemos un ejercicio de análisis de involucrados con igraph para entender un poco más su estructura y relaciones. Vamos a basarnos en el estudio de caso de Arcabuco.

1. Cargamos las librerías necesarias

Instalar las librerías si no están instaladas

install.packages(c("igraph", "readr", "tidyr", "RColorBrewer", "ggraph", "ggplot2", "haven"))

Cargar las librerías

library(igraph)
library(readr)
library(tidyr)
library(RColorBrewer)
library(ggraph)
library(ggplot2)
library(haven)

2. Cargamos la matriz no adyacente

Selecciona el archivo con la matriz de adyacencia (no dirigina). Aseguremos que la columna es cuadrada dejando la primera columna y la primera fila como nombres.

library(readr)
library(tibble) # Necesario para column_to_rownames()

# Lee el archivo con read_csv
poder <- read_csv("/cloud/project/actores_nodirigida.csv")

# Convierte la primera columna en nombres de fila
poder <- column_to_rownames(poder, var = colnames(poder)[1])

Verificamos la estructura de la matriz cargada

str(poder)
## 'data.frame':    12 obs. of  12 variables:
##  $ Vecinos            : num  0 0 1 1 0 0 0 1 1 0 ...
##  $ Agremiaciones      : num  0 0 1 1 1 0 0 1 0 1 ...
##  $ Empleados          : num  1 1 0 1 1 0 0 1 1 1 ...
##  $ Carniceros         : num  1 1 1 0 1 0 1 1 1 1 ...
##  $ Veterinario        : num  0 1 1 1 1 1 0 1 0 1 ...
##  $ Matarifes          : num  1 1 1 1 1 0 1 1 1 1 ...
##  $ Compradores        : num  1 0 1 1 0 0 0 1 1 0 ...
##  $ Alcaldia           : num  1 1 1 1 0 0 1 0 0 1 ...
##  $ Habitantes de calle: num  0 0 1 0 0 1 1 1 0 0 ...
##  $ Transportadores    : num  0 1 1 1 1 0 0 1 1 0 ...
##  $ Ninxs              : num  0 0 0 0 0 0 0 1 0 0 ...
##  $ Turista            : num  0 0 0 1 0 0 0 1 1 0 ...
class(poder)
## [1] "data.frame"

3. Creamos un objeto igraph

Convertimos el dataframe en una matriz

poder_matriz <- as.matrix(poder)

Creamos un objeto igraph a partir de la matriz de adyacencia (no dirigido)

vester <- graph_from_adjacency_matrix(poder_matriz, mode = "undirected", diag = FALSE)

Asignamos nombres a los nodos basados en los nombres de fila

V(vester)$name <- rownames(poder_matriz)

4. Exploración de datos

Tamaño del grafo (número de aristas)

gsize(vester)
## [1] 47

Número de nodos o vértices

gorder(vester)
## [1] 12

Lista de vértices y aristas

V(vester)
## + 12/12 vertices, named, from d1fb014:
##  [1] Vecinos             Agremiaciones       Empleados          
##  [4] Carniceros          Veterinario         Matarifes          
##  [7] Compradores         Alcaldia            Habitantes de calle
## [10] Transportadores     Ninxs               Turista
E(vester)
## + 47/47 edges from d1fb014 (vertex names):
##  [1] Vecinos      --Empleados           Vecinos      --Carniceros         
##  [3] Vecinos      --Matarifes           Vecinos      --Compradores        
##  [5] Vecinos      --Alcaldia            Vecinos      --Habitantes de calle
##  [7] Agremiaciones--Empleados           Agremiaciones--Carniceros         
##  [9] Agremiaciones--Veterinario         Agremiaciones--Matarifes          
## [11] Agremiaciones--Alcaldia            Agremiaciones--Transportadores    
## [13] Empleados    --Carniceros          Empleados    --Veterinario        
## [15] Empleados    --Matarifes           Empleados    --Compradores        
## [17] Empleados    --Alcaldia            Empleados    --Habitantes de calle
## [19] Empleados    --Transportadores     Carniceros   --Veterinario        
## + ... omitted several edges

5. Densidad y cluster de la red

La densidad de la red es una medida que cuantifica el grado de interconexión entre los nodos de una red en relación al número total posible de conexiones. En otras palabras, la densidad refleja cuán conectada está una red comparada con la máxima cantidad de conexiones que podría tener.

Indentificacion de densidad

Interpretación: Una densidad cercana a 1 indica una red densa donde la mayoría de los nodos están conectados entre sí. Una densidad cercana a 0 indica una red dispersa con pocas conexiones en relación al número total posible de conexiones.

## Análisis de Densidad de la Red
# Calcular la densidad de la red
densidad_vester <- edge_density(vester)
cat("La densidad de la red es:", densidad_vester, "\n")
## La densidad de la red es: 0.7121212

Identificación de Clústeres

En el análisis de redes, el concepto de clúster se refiere a un grupo de nodos que están más densamente conectados entre sí que con el resto de la red. Estos clústeres, también conocidos como comunidades o módulos, indican la presencia de subestructuras dentro de la red, donde los nodos dentro de un mismo clúster tienen una alta probabilidad de estar interconectados. Esta propiedad es importante para entender cómo se organizan los nodos y cómo interactúan dentro de la red.

La identificación de clústeres muestra subgrupos dentro de la red que están más conectados entre sí. Esto puede indicar la presencia de comunidades, subgrupos o coaliciones dentro de la red.

# Identificación de Clústeres
# Utilizar el algoritmo de comunidad de Louvain para detectar clústeres
comunidades_vester <- cluster_louvain(vester)

# Mostrar el número de comunidades detectadas
cat("Número de clústeres detectados:", length(comunidades_vester), "\n")
## Número de clústeres detectados: 2

Identificar las comunidades de cada nodo

# Mostrar a qué comunidad pertenece cada nodo
membresia_vester <- membership(comunidades_vester)
print(membresia_vester)
##             Vecinos       Agremiaciones           Empleados          Carniceros 
##                   1                   2                   2                   1 
##         Veterinario           Matarifes         Compradores            Alcaldia 
##                   2                   1                   1                   1 
## Habitantes de calle     Transportadores               Ninxs             Turista 
##                   1                   2                   1                   1
# Añadir la comunidad a los atributos del nodo
V(vester)$comunidad <- membresia_vester

Visualización de los clústers

# Crear una paleta de colores para las comunidades
# Utilizando `unique` en `membresia_vester` para contar las comunidades únicas
colores <- rainbow(length(unique(membresia_vester)))

# Visualización de la red, coloreando por clústeres
plot(vester, vertex.color = colores[V(vester)$comunidad],
     vertex.size = 10, vertex.label.cex = 0.7,
     main = "Red con Clústeres Identificados",
     layout = layout_with_fr)

# Otra visualización utilizando ggraph
library(ggraph)
ggraph(vester, layout = "fr") + 
  geom_edge_link(aes(edge_alpha = 0.5), show.legend = FALSE) +
  geom_node_point(aes(color = factor(comunidad)), size = 5) +
  geom_node_text(aes(label = name), repel = TRUE, size = 3) +
  scale_color_manual(values = colores) +
  theme_void() +
  ggtitle("Visualización de la Red con Clústeres")

6. Medidas de centralidad en la red

Las medidas de centralidad en el análisis de redes sociales se utilizan para identificar y cuantificar la importancia o influencia de un nodo dentro de la red. El paquete ‘igraph’ en R proporciona varias métricas de centralidad que ayudan a evaluar diferentes aspectos de la posición de un nodo en la red.

Centralidad de Grado (Degree Centrality)

Mide el número de conexiones directas (aristas) que un nodo tiene con otros nodos en la red. Un nodo con un alto grado de centralidad se considera altamente conectado o popular en la red, lo que indica su capacidad para interactuar directamente con otros nodos. Esta medida es útil para identificar actores clave con un gran número de conexiones.

Centralidad de grado es útil para identificar actores “populares” o “visibles”.

# Degree Centrality)
vester_deg <- degree(vester, mode = "all")
V(vester)$degree <- vester_deg

Centralidad de Vector Propio (Eigenvector Centrality)

Mide la influencia de un nodo en la red teniendo en cuenta no solo el número de conexiones directas, sino también la calidad de estas conexiones. Un nodo tiene un valor alto de centralidad de vector propio si está conectado a otros nodos que también son altamente centrales.

Captura la idea de que no todas las conexiones tienen el mismo valor; una conexión con un nodo influyente tiene más peso que una conexión con un nodo periférico. Un nodo con alta centralidad de vector propio es un nodo influyente que está conectado a otros nodos influyentes.

Centralidad de vector propio y centralidad de autovalores ayudan a detectar nodos influyentes en un contexto de conexiones de alta calidad.

# Eigenvector centrality
vester_eig <- evcent(vester)$vector
## Warning: `evcent()` was deprecated in igraph 2.0.0.
## ℹ Please use `eigen_centrality()` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
V(vester)$Eigen <- vester_eig

Centralidad de Intermediación (Betweenness Centrality)

Cuantifica cuántas veces un nodo actúa como un puente a lo largo del camino más corto entre otros dos nodos. Un nodo con alta centralidad de intermediación tiene un papel crucial en la facilitación de la comunicación dentro de la red, ya que controla el flujo de información entre diferentes partes de la red. Este nodo puede influir en la transferencia de información y recursos.

Centralidad de intermediación identifica nodos que actúan como puentes o intermediarios clave.

# Betweeness centrality
vester_bet <- betweenness(vester, directed = FALSE)
V(vester)$betweenness <- vester_bet

Centralidad de Proximidad (Closeness Centrality)

Mide cuán cerca está un nodo de todos los demás nodos de la red, calculando la inversa de la suma de las distancias más cortas desde el nodo a todos los demás. Un nodo con alta centralidad de proximidad puede llegar rápidamente a todos los demás nodos. Se usa para identificar nodos que tienen una posición de acceso rápido y eficaz dentro de la red.

# Centralidad de Proximidad (Closeness Centrality)
# Para redes no conectadas, se utiliza la aproximación estándar
vester_closeness <- closeness(vester, normalized = TRUE)
V(vester)$closeness <- vester_closeness

Centralidad de proximidad es útil para identificar actores que pueden acceder rápidamente a otros nodos en la red.

Centralidad de Autovalores (Katz Centrality)

Similar a la centralidad de vector propio, pero agrega un peso decaído para las conexiones de mayor longitud. Evalúa la influencia general de un nodo en la red, teniendo en cuenta la influencia de nodos conectados y desalentando trayectorias largas y menos directas.

# Centralidad de Autovalores (Katz Centrality)
# Específicamente útil en grafos dirigidos, aquí lo aplicamos como una aproximación.
vester_katz <- alpha_centrality(vester, alpha = 0.1, exo = 1, tol = 1e-7)
V(vester)$katz <- vester_katz
# Mostrar las primeras filas de los datos de centralidad
head(data.frame(Name = V(vester)$name,
                Degree = V(vester)$degree,
                Eigenvector = V(vester)$Eigen,
                Betweenness = V(vester)$betweenness,
                Closeness = V(vester)$closeness,
                Katz = V(vester)$katz))
##            Name Degree Eigenvector Betweenness Closeness     Katz
## 1       Vecinos      6   0.6576009    0.000000 0.6875000 4.913782
## 2 Agremiaciones      6   0.6399704    0.000000 0.6875000 4.821476
## 3     Empleados      9   0.8804328    1.800000 0.8461538 6.315938
## 4    Carniceros     11   1.0000000    4.566667 1.0000000 7.098861
## 5   Veterinario      6   0.6399704    0.000000 0.6875000 4.821476
## 6     Matarifes     11   1.0000000    4.566667 1.0000000 7.098861

7. Visualización con ggraph y etiquetas de nodos

Degree Centrality Representa cuántas conexiones directas tiene cada nodo. Los nodos con más conexiones tienen mayor tamaño y color más intenso.

# 1. Visualización de Degree Centrality
ggraph(vester, layout = "fr") + 
  geom_edge_link(aes(edge_alpha = 0.5), show.legend = FALSE) + 
  geom_node_point(aes(size = degree, color = degree), show.legend = TRUE) + 
  geom_node_text(aes(label = name), vjust = 1.8, size = 3) + 
  scale_color_viridis_c(option = "C") + 
  theme_void() + 
  ggtitle("Centralidad de Grado (Degree Centrality)") +
  theme(legend.position = "bottom")

Eigenvector Centrality Muestra la influencia de un nodo basado en la calidad de sus conexiones. Un nodo con alta centralidad de vector propio está conectado a otros nodos igualmente importantes.

# 2. Visualización de Eigenvector Centrality
ggraph(vester, layout = "fr") + 
  geom_edge_link(aes(edge_alpha = 0.5), show.legend = FALSE) + 
  geom_node_point(aes(size = Eigen, color = Eigen), show.legend = TRUE) + 
  geom_node_text(aes(label = name), vjust = 1.8, size = 3) + 
  scale_color_viridis_c(option = "B") + 
  theme_void() + 
  ggtitle("Centralidad de Vector Propio (Eigenvector Centrality)") +
  theme(legend.position = "bottom")

Betweenness Centrality Indica cuántas veces un nodo actúa como puente en los caminos más cortos entre otros nodos. Nodos con alta intermediación son críticos para la conexión de diferentes partes de la red

# 3. Visualización de Betweenness Centrality
ggraph(vester, layout = "fr") + 
  geom_edge_link(aes(edge_alpha = 0.5), show.legend = FALSE) + 
  geom_node_point(aes(size = betweenness, color = betweenness), show.legend = TRUE) + 
  geom_node_text(aes(label = name), vjust = 1.8, size = 3) + 
  scale_color_viridis_c(option = "A") + 
  theme_void() + 
  ggtitle("Centralidad de Intermediación (Betweenness Centrality)") +
  theme(legend.position = "bottom")

Closeness Centrality Mide cuán rápidamente un nodo puede acceder a todos los demás nodos en la red. Nodos con alta centralidad de proximidad tienen acceso eficiente a otros nodos.

# 4. Visualización de Closeness Centrality
ggraph(vester, layout = "fr") + 
  geom_edge_link(aes(edge_alpha = 0.5), show.legend = FALSE) + 
  geom_node_point(aes(size = closeness, color = closeness), show.legend = TRUE) + 
  geom_node_text(aes(label = name), vjust = 1.8, size = 3) + 
  scale_color_viridis_c(option = "D") + 
  theme_void() + 
  ggtitle("Centralidad de Proximidad (Closeness Centrality)") +
  theme(legend.position = "bottom")

Katz Centrality Evalúa la influencia global de un nodo, teniendo en cuenta tanto sus conexiones directas como indirectas, ponderadas por la importancia de esos nodos.

# 5. Visualización de Katz Centrality
ggraph(vester, layout = "fr") + 
  geom_edge_link(aes(edge_alpha = 0.5), show.legend = FALSE) + 
  geom_node_point(aes(size = katz, color = katz), show.legend = TRUE) + 
  geom_node_text(aes(label = name), vjust = 1.8, size = 3) + 
  scale_color_viridis_c(option = "E") + 
  theme_void() + 
  ggtitle("Centralidad de Autovalores (Katz Centrality)") +
  theme(legend.position = "bottom")

# Visualizaciones simultáneas

Layout de Fruchterman-Reingold: Este layout organiza los nodos de forma que los nodos más conectados (con mayor centralidad) se agrupan en el centro, mientras que los menos conectados tienden a estar en la periferia.

Tamaño de los nodos: Los nodos están dimensionados de acuerdo a su centralidad de grado (degree), lo que indica cuántas conexiones directas tiene cada nodo. Los nodos más grandes tienen más conexiones. Color de los nodos: El color de cada nodo está determinado por su centralidad de eigenvector (Eigen). Esta métrica muestra cuán bien conectado está un nodo, no solo directamente, sino también a través de sus conexiones con otros nodos importantes. Los colores más intensos indican nodos con alta centralidad de eigenvector.

# Visualización básica con layout de fruchterman-reingold
ggraph(vester, layout = "fr") + 
  geom_edge_link(aes(edge_alpha = 0.8), show.legend = FALSE) + 
  geom_node_point(aes(size = degree, color = Eigen), show.legend = TRUE) + 
  geom_node_text(aes(label = name), vjust = 1.8, size = 3) + # Añadir etiquetas a los nodos
  scale_color_viridis_c() + 
  theme_void() + 
  ggtitle("Visualización de la red con centralidad de grado y eigenvector") +
  theme(legend.position = "bottom")

Layout circular: Organiza los nodos en un círculo. Este layout es útil para visualizar las relaciones entre los nodos de manera equitativa, permitiendo ver claramente todas las conexiones. Tamaño de los nodos: El tamaño de cada nodo refleja su centralidad de grado (degree). Color de los nodos: El color se basa en la centralidad de intermediación (betweenness). Los nodos con mayor intermediación están coloreados con tonos más intensos, indicando que estos nodos actúan como “puentes” entre diferentes partes de la red

# Visualización con layout en círculo y etiquetas
ggraph(vester, layout = "circle") + 
  geom_edge_link(aes(edge_alpha = 0.5), show.legend = FALSE) + 
  geom_node_point(aes(size = degree, color = betweenness), show.legend = TRUE) + 
  geom_node_text(aes(label = name), vjust = 1.8, size = 3) + # Añadir etiquetas a los nodos
  scale_color_distiller(palette = "Spectral") + 
  theme_void() + 
  ggtitle("Visualización de la red con layout en círculo") +
  theme(legend.position = "bottom")

8. Otras medidas

Diámetro y Longitud del Camino Más Corto

Diametro de la red mide la mayor distancia mínima entre cualquier par de nodos en la red. Representa el camino más largo de los más cortos, indicando la “extensión” de la red.

diametro_vester <- diameter(vester)
cat("Diametro de la red:", diametro_vester, "\n")
## Diametro de la red: 2

Longitud Promedio del Camino: Calcula la distancia media entre todos los pares de nodos en la red. Es útil para entender la “compacidad” de la red.

longitud_promedio <- mean_distance(vester)
cat("Longitud promedio del camino en la red:", longitud_promedio, "\n")
## Longitud promedio del camino en la red: 1.287879

Un diámetro de 2 significa que cualquier nodo de la red puede alcanzar a cualquier otro nodo en, como máximo, dos pasos. Esto indica que la red es muy compacta y que todos los nodos están muy cerca unos de otros. En términos de acceso y difusión de información, esto sugiere que cualquier nodo puede comunicarse rápidamente con cualquier otro. Un diámetro de 2 generalmente se asocia con redes densas y bien conectadas, donde la mayoría de los nodos tienen múltiples conexiones directas o están conectados a través de intermediarios que facilitan las interacciones.

En redes con pocos nodos y muchas conexiones entre ellos, es común tener diámetros bajos. Por ejemplo, un grupo de amigos íntimos donde todos se conocen, o una pequeña empresa donde cada empleado interactúa con casi todos los demás.

Coeficiente de Agrupamiento (Clustering Coefficient)

Mide la tendencia de los nodos a formar triángulos, es decir, la probabilidad de que dos vecinos de un nodo también estén conectados entre sí. Esto indica la cohesión local dentro de la red.

coef_agrupamiento <- transitivity(vester, type = "global")
cat("Coeficiente de agrupamiento global:", coef_agrupamiento, "\n")
## Coeficiente de agrupamiento global: 0.7692308

Un coeficiente de agrupamiento de aproximadamente 0.77 indica que la red presenta un nivel alto de cohesión local. Esto significa que los nodos tienden a formar triángulos o grupos cerrados. En otras palabras, si dos nodos están conectados a un mismo nodo, es muy probable que también estén conectados entre sí.

Redundancia de Conexiones

Conectividad de K-Cores: Identifica subredes donde todos los nodos están conectados a al menos k vecinos. Es útil para identificar regiones altamente interconectadas de la red.

coreness_vester <- coreness(vester)
cat("Coreness de cada nodo:\n")
## Coreness de cada nodo:
print(coreness_vester)
##             Vecinos       Agremiaciones           Empleados          Carniceros 
##                   6                   6                   6                   6 
##         Veterinario           Matarifes         Compradores            Alcaldia 
##                   6                   6                   6                   6 
## Habitantes de calle     Transportadores               Ninxs             Turista 
##                   6                   6                   5                   5

La redundancia de conexiones proporciona información sobre la cohesión interna y la vulnerabilidad de los nodos dentro de la red. Aquellos con alta redundancia están bien integrados en su comunidad, mientras que los que tienen menos pueden beneficiarse de conexiones adicionales para mejorar su posición y acceso a la información.

Todos los nodos (excepto “Ninxs” y “Turista”) tienen una redundancia de 6: Esto sugiere que estos nodos están conectados a otros nodos de tal manera que tienen múltiples caminos alternativos para llegar a los mismos destinos dentro de la red. Esta redundancia puede implicar:

Alta cohesión interna: Los nodos tienen muchas conexiones dentro de su comunidad inmediata. Menor acceso a información externa: Debido a que las conexiones tienden a repetirse dentro del mismo grupo, estos nodos pueden estar limitados en términos de acceso a información diversa fuera de su comunidad.

“Ninxs” y “Turista” tienen una redundancia de 5:Una redundancia ligeramente menor para estos nodos indica que tienen menos caminos alternativos dentro de su red inmediata. Esto podría significar que: Menor cohesión interna: Pueden estar más en la periferia de la red o tener menos conexiones redundantes dentro de su subgrupo. Mayor vulnerabilidad: En términos de acceso a recursos e información, pueden depender más de unos pocos nodos clave.

Propiedades de Conectividad

Componentes Conectados: Identifica y cuenta las subredes aisladas en la red. Los componentes conectados son subgrupos de nodos que están conectados entre sí pero no tienen conexión con otros nodos fuera de ese grupo.

componentes <- components(vester)
cat("Número de componentes conectados:", componentes$no, "\n")
## Número de componentes conectados: 1

Cuando el número de componentes conectados es 1, significa que la red vester es completamente conectada. Es decir, todos los nodos están conectados entre sí de alguna manera, ya sea directa o indirectamente. No hay subredes aisladas o desconectadas dentro de la red.

Puentes (Bridges): Identifica aristas que, si se eliminan, aumentarían el número de componentes conectados en la red.

puentes <- edge_betweenness(vester)
cat("puentes:\n")
## puentes:
print(puentes)
##  [1] 1.700000 2.150000 2.150000 1.200000 2.150000 1.650000 1.700000 2.283333
##  [9] 1.000000 2.283333 2.283333 1.450000 1.400000 1.700000 1.400000 1.900000
## [17] 1.400000 1.800000 1.600000 2.283333 1.000000 1.950000 1.000000 1.400000
## [25] 1.650000 2.450000 2.566667 2.283333 2.283333 1.450000 1.950000 1.000000
## [33] 1.400000 1.650000 2.450000 2.566667 1.950000 1.450000 1.400000 1.400000
## [41] 1.650000 2.450000 2.566667 2.050000 1.950000 1.900000 1.700000

Los valores proporcionados indican la importancia relativa de cada enlace como puente dentro de la red. Valores más altos indican enlaces que son cruciales para mantener la cohesión de la red y conectan nodos o subgrupos que, de otro modo, estarían desconectados.

Enlaces con valores de intermediación altos (como los de 2.566667 o 2.450000) son particularmente importantes para la conectividad global de la red. Si estos enlaces se eliminan, la red puede fragmentarse significativamente.

Estos enlaces actúan como “puentes” entre diferentes partes de la red y son esenciales para la comunicación y el flujo de información. Identificarlos es crucial para entender cómo se puede reforzar o proteger la estructura de la red.

En contextos como el análisis organizacional o la gestión de redes sociales, los enlaces con alta intermediación pueden ser puntos de vulnerabilidad. Se deben proteger y reforzar para evitar la fragmentación de la red.

# Asignar los valores de intermediación como atributo de arista
E(vester)$bridge <- c(1.7, 2.15, 2.15, 1.2, 2.15, 1.65, 1.7, 2.283333, 1, 2.283333, 2.283333, 1.45, 1.4,
                      1.7, 1.4, 1.9, 1.4, 1.8, 1.6, 2.283333, 1, 1.95, 1, 1.4, 1.65, 2.45,
                      2.566667, 2.283333, 2.283333, 1.45, 1.95, 1, 1.4, 1.65, 2.45, 2.566667, 1.95, 1.45, 1.4,
                      1.4, 1.65, 2.45, 2.566667, 2.05, 1.95, 1.9, 1.7)

# Visualización de la red con el grosor de los enlaces proporcional a su valor de puente
plot(vester, edge.width = E(vester)$bridge * 2, edge.color = ifelse(E(vester)$bridge > 2, "red", "gray"),
     vertex.size = 10, vertex.label.cex = 0.8,
     main = "Visualización de Puentes en la Red de Vester",
     layout = layout_with_fr)

# Otra visualización con ggraph destacando puentes
## 1. Cargar las librerías necesarias
install.packages(c("igraph", "readr", "ggplot2", "ggraph", "viridis"))
## Installing packages into '/cloud/lib/x86_64-pc-linux-gnu-library/4.4'
## (as 'lib' is unspecified)
library(igraph)
library(readr)
library(ggplot2)
library(ggraph)
library(viridis)
## Loading required package: viridisLite
# Visualización con ggraph destacando puentes
ggraph(vester, layout = "fr") +
  geom_edge_link(aes(edge_alpha = 0.5, width = bridge, color = bridge)) +
  geom_node_point(size = 5) +
  geom_node_text(aes(label = name), repel = TRUE, size = 3) +
  scale_edge_colour_gradient(low = "lightblue", high = "darkred") + # Gradiente de colores
  scale_edge_width(range = c(0.5, 3)) +  # Ajuste del grosor de los enlaces
  theme_void() +
  ggtitle("Visualización de Puentes en la Red de Vester")

Redundancia y Robustez

Resiliencia de la Red: Analiza cómo cambia la conectividad global de la red al eliminar nodos o aristas, para evaluar la robustez de la red frente a fallos.

# Ejemplo de eliminación de un nodo
# resiliencia <- robustness(vester)

Análisis de Periferia y Centro (Centralization)

Evalúa cuán centralizada o descentralizada está la red en torno a un nodo o un conjunto de nodos. Ayuda a determinar la estructura jerárquica de la red. Es un concepto que evalúa la desigualdad en la distribución de la centralidad dentro de la red. En otras palabras, mide qué tan centralizados o dispersos están los nodos en términos de su importancia o conectividad.

la centralización de grado indica qué tan concentradas están las conexiones en torno a unos pocos nodos. Un valor alto sugiere que uno o pocos nodos tienen muchas más conexiones que los demás, actuando como centros de la red.

El valor de 0.2878788 implica una centralización relativamente baja. Esto indica que las conexiones están distribuidas de manera más uniforme entre los nodos, y no hay un único nodo extremadamente dominante en cuanto a conexiones.

centralizacion <- centr_degree(vester)$centralization
cat("centralizacion:\n")
## centralizacion:
print(centralizacion)
## [1] 0.2878788

Conexiones Estructurales (Structural Holes)

Analiza las oportunidades de “puente” entre grupos no conectados directamente en la red, identificando nodos que tienen un potencial para conectar diferentes comunidades.

Nodos como Empleados, Agremiaciones, Carniceros, Matarifes parecen estar en el centro con varias conexiones (centralidad alta), mientras que nodos como Ninxs, Turista y otros pueden estar en la periferia con menor número de conexiones.

El concepto de conexiones estructurales (o structural holes) se refiere a la idea de que en una red social hay posiciones que conectan a diferentes grupos que, de otro modo, estarían separados. Un nodo que ocupa esta posición actúa como un intermediario o puente entre diferentes subredes, lo que le otorga poder y control sobre el flujo de información y recursos.

Los valores presentados, como 0.4072450 para “Agremiaciones” o 0.3261084 para “Matarifes”, se refieren al índice de constraint (restricción) de Burt, que mide la dependencia de un nodo respecto a sus vecinos inmediatos.

Un valor alto de constraint indica que un nodo depende mucho de sus conexiones inmediatas para obtener información o recursos. Esto significa que el nodo no ocupa una posición estratégica de puente, ya que la mayoría de sus conexiones son redundantes.

Un valor bajo de constraint, en cambio, sugiere que el nodo tiene acceso a información y recursos únicos que no están disponibles a través de sus conexiones inmediatas, permitiéndole actuar como un mediador entre diferentes grupos.

# Ejemplo básico de detección de agujeros estructurales
agujeros_estructurales <- constraint(vester)
cat("agujeros_estructurales:\n")
## agujeros_estructurales:
print(agujeros_estructurales)
##             Vecinos       Agremiaciones           Empleados          Carniceros 
##           0.3909763           0.4072450           0.3485609           0.3261084 
##         Veterinario           Matarifes         Compradores            Alcaldia 
##           0.4072450           0.3261084           0.3882536           0.3261084 
## Habitantes de calle     Transportadores               Ninxs             Turista 
##           0.3500495           0.3662596           0.3960088           0.4041334

Agremiaciones (0.4072450) y Veterinario (0.4072450): Tienen valores relativamente altos de constraint. Esto sugiere que estas entidades dependen de sus conexiones inmediatas y no tienen acceso a muchos grupos distintos dentro de la red. En otras palabras, su posición no es particularmente estratégica en términos de actuar como un puente entre diferentes subredes.

Carniceros (0.3261084) y Matarifes (0.3261084): Tienen valores de constraint más bajos. Esto indica que, aunque no están en una posición central, tienen algo más de independencia y potencial para conectar diferentes grupos dentro de la red.

Ninxs (0.3960088) y Turista (0.4041334): Tienen valores intermedios-altos, lo que sugiere que están más aislados y no tienen muchas oportunidades para actuar como intermediarios.

Implicaciones Prácticas:

Gestión de la Red:Para mejorar la efectividad de la red, se podría intentar reducir el constraint de algunos nodos, creando conexiones adicionales con nodos fuera de su subgrupo inmediato. Esto permitiría una mejor difusión de información y la posibilidad de generar innovaciones a partir del acceso a recursos o ideas más diversas.

Identificación de Actores Clave: Nodos con valores bajos de constraint, como “Carniceros” y “Matarifes”, podrían ser considerados como nodos potenciales para desarrollar más conexiones intergrupales, ya que ya tienen cierta independencia en la red.

Oportunidades de Mejora:Nodos con valores altos de constraint, como “Agremiaciones” y “Veterinario”, podrían beneficiarse de nuevas conexiones estratégicas para reducir su dependencia y aumentar su rol como intermediarios dentro de la red.

# Asignar los valores de constraint a los nodos
V(vester)$constraint <- c(0.3909763, 0.4072450, 0.3485609, 0.3261084, 0.4072450, 0.3261084,
                          0.3882536, 0.3261084, 0.3500495, 0.3662596, 0.3960088, 0.4041334)

# Visualización con ggraph destacando el constraint
ggraph(vester, layout = "fr") +
  geom_edge_link(aes(edge_alpha = 0.5), show.legend = FALSE) +
  geom_node_point(aes(size = constraint, color = constraint), show.legend = TRUE) +
  geom_node_text(aes(label = name), repel = TRUE, size = 3) +
  scale_color_viridis_c() +
  theme_void() +
  ggtitle("Visualización de Conexiones Estructurales en la Red de Vester")

9. Resultados de la red

Balance General de la Red vester La red vester presenta una serie de características estructurales que ofrecen una visión integral sobre su configuración, conectividad y dinámica interna. A continuación se ofrece un análisis general basado en las principales métricas evaluadas:

  1. Densidad de la Red: 0.7121212 Interpretación: La red tiene una densidad relativamente alta, lo que sugiere que la mayoría de los nodos están bien interconectados. Esto facilita una comunicación fluida y la propagación rápida de información dentro de la red. Una red densa indica que los nodos están muy cerca unos de otros, con muchas conexiones directas.

  2. Número de Componentes Conectados: 1 Interpretación: La red está completamente conectada, lo que significa que no hay subgrupos aislados. Todos los nodos están conectados de alguna manera con todos los demás, directa o indirectamente. Esto favorece la cohesión y asegura que cualquier nodo puede comunicarse con cualquier otro, promoviendo una interacción integrada en toda la red.

  3. Número de Clústeres Detectados: 2 Interpretación: Aunque la red tiene un solo componente conectado, se identifican dos clústeres o comunidades. Esto sugiere que hay subgrupos dentro de la red donde los nodos están más conectados entre sí que con nodos fuera del grupo. Estos clústeres pueden indicar la presencia de subcomunidades, como equipos o alianzas dentro de la red.

  4. Diámetro de la Red: 2 Interpretación: El diámetro indica que la distancia más larga en los caminos más cortos entre dos nodos cualesquiera es de solo dos pasos. Esto sugiere una red muy compacta donde cualquier nodo puede alcanzar a cualquier otro con muy pocos intermediarios. Esto es ideal para la comunicación rápida y la difusión de información.

  5. Coeficiente de Agrupamiento Global: 0.7692308 Interpretación: El alto coeficiente de agrupamiento indica que los nodos tienden a formar triángulos, es decir, si dos nodos están conectados a un tercer nodo, es probable que también estén conectados entre sí. Esto sugiere una fuerte cohesión local y la presencia de comunidades densamente conectadas dentro de la red.

  6. Centralización: 0.2878788 Interpretación: La red presenta una centralización baja, lo que indica que no depende de un único nodo o pequeño grupo de nodos para la mayoría de las conexiones. Esto significa que la red es más distribuida y tiene una estructura más horizontal, reduciendo la dependencia de nodos clave.

  7. Resiliencia de la Red (Robustez) Análisis: La red muestra cierta robustez frente a la eliminación de nodos de alto grado. Aunque la eliminación de nodos con muchas conexiones aumentaría los componentes conectados, la red no se fragmenta completamente, lo que sugiere una estructura resistente.

  8. Constraint (Conexiones Estructurales) Valores entre 0.326 y 0.407: Los nodos en la red tienen valores de constraint moderados, lo que indica que no todos los nodos actúan como puentes efectivos entre diferentes grupos. Los valores altos sugieren una alta dependencia de sus conexiones inmediatas y menor capacidad para acceder a recursos o información externos a su grupo inmediato.

La red vester muestra un equilibrio entre cohesión y diversidad estructural. Aunque es una red densa y bien conectada, con un solo componente y un diámetro pequeño, también hay indicios de subestructuras en forma de clústeres. La baja centralización sugiere que no hay una dependencia excesiva de nodos centrales, lo que la hace menos vulnerable a fallos catastróficos. Sin embargo, el valor relativamente alto de constraint indica que la mayoría de los nodos están integrados en grupos específicos, con pocas oportunidades para actuar como puentes entre estos grupos.

Para mejorar su funcionamiento, se podrían desarrollar conexiones adicionales entre nodos de diferentes clústeres, reduciendo el constraint y aumentando las oportunidades de intercambio de información y recursos. Esto fortalecería la resiliencia y capacidad de la red para adaptarse a cambios o pérdidas de conexiones críticas.

10. Recomendaciones

Para intervenir de manera efectiva en la red vester desde una perspectiva de toma de decisiones, es crucial identificar a los actores clave y entender su posición en términos de poder e influencia. A continuación, se ofrece un análisis detallado de cada actor y recomendaciones estratégicas para optimizar la estructura y funcionamiento de la red.

Identificación de Actores Clave y su Caracterización:

Agremiaciones: Posición e Influencia: Como uno de los actores más centrales con un alto número de conexiones, Agremiaciones actúa como un nodo de coordinación clave en la red. Su valor de constraint sugiere que está bien conectado pero también depende en gran medida de sus conexiones inmediatas. Recomendación: Fortalecer su rol como mediador, creando puentes con nodos periféricos como Habitantes de Calle y Transportadores. Esto puede ayudar a equilibrar la red y reducir la dependencia de unos pocos nodos centrales.

Empleados: Posición e Influencia: Con una alta centralidad, Empleados tiene una gran capacidad de influencia en la red. Su conexión con diversos actores los coloca en una posición estratégica para distribuir información y coordinar esfuerzos. Recomendación: Involucrar a Empleados en la toma de decisiones y como facilitadores de la comunicación entre los clústeres identificados. Promover su participación en iniciativas de colaboración intersectorial.

Carniceros y Matarifes: Posición e Influencia: Aunque tienen un valor de constraint moderado, Carniceros y Matarifes actúan como puentes potenciales entre diferentes grupos. Esto les da la capacidad de conectar actores que no interactuarían de otra manera. Recomendación: Incentivar a estos actores a asumir un rol más proactivo como conectores, facilitando la comunicación y colaboración entre clústeres. Esto puede implicar su inclusión en proyectos transversales que involucren a la Alcaldía y Vecinos.

Alcaldía: Posición e Influencia: La Alcaldía, con su posición institucional, tiene un papel esencial en la coordinación y mediación de conflictos. Aunque no es el nodo más conectado, su influencia externa y capacidad de acción la convierte en un actor crítico. Recomendación: Utilizar la Alcaldía como un facilitador de recursos y mediador en situaciones de conflicto. Promover su rol en la implementación de políticas y proyectos que requieran cooperación intersectorial.

Vecinos: Posición e Influencia: Los Vecinos tienen una posición menos estratégica en la red, pero son esenciales para la cohesión social y la implementación de iniciativas locales. Su participación en la red puede ser crucial para proyectos comunitarios. Recomendación: Involucrar a Vecinos en proyectos comunitarios y fortalecer sus conexiones con otros actores, como Habitantes de Calle y Empleados. Promover iniciativas de participación ciudadana que aprovechen su rol como actores locales.

Habitantes de Calle: Posición e Influencia: Este grupo tiene una influencia limitada y está relativamente aislado dentro de la red. Sin embargo, su integración puede mejorar significativamente la cohesión social y la efectividad de la red. Recomendación: Implementar programas de inclusión social que mejoren sus conexiones con actores clave como la Alcaldía, Vecinos y Agremiaciones. Facilitar su acceso a recursos y oportunidades a través de proyectos específicos de integración.

Transportadores: Posición e Influencia: Actúan como intermediarios entre varios nodos, lo que les da un potencial de conexión importante. Su rol puede ser crucial en la logística y distribución dentro de la red. Recomendación: Promover su participación en la planificación y ejecución de proyectos logísticos y de distribución. Facilitar su interacción con otros actores económicos y sociales de la red.

Veterinario: Posición e Influencia: Aunque está conectado con actores clave como Carniceros y Matarifes, su influencia es más técnica que estratégica. Puede ser esencial en temas de salud y seguridad alimentaria. Recomendación: Asegurar su integración en proyectos que requieran conocimiento especializado, como seguridad alimentaria y salud pública. Fortalecer sus conexiones con otros actores técnicos y administrativos.

Ninxs y Turista: Posición e Influencia: Son actores periféricos con menos conexiones. Su influencia es limitada, pero pueden representar grupos vulnerables o externos que requieren una atención especial. Recomendación: Facilitar su integración a través de proyectos inclusivos que fortalezcan sus vínculos con actores centrales y que consideren sus necesidades y características específicas.

Compradores: Posición e Influencia: Aunque no tienen muchas conexiones, su rol en la red es crítico en términos económicos. Representan la demanda y su interacción con otros actores como Carniceros y Matarifes es fundamental. Recomendación: Promover su interacción en iniciativas de mercado y logística. Fortalecer sus conexiones con Transportadores y Agremiaciones para mejorar la eficiencia y sostenibilidad de la cadena de suministro.

Estrategias de Intervención Basadas en el Análisis:

Fortalecimiento de Puentes Intersectoriales: Desarrollar conexiones entre actores que actualmente tienen pocas interacciones, como Habitantes de Calle y Agremiaciones, para aumentar la integración de la red y facilitar la inclusión de actores periféricos.

Desarrollo de Proyectos Transversales: Implementar iniciativas que involucren a varios actores de diferentes sectores (Alcaldía, Carniceros, Transportadores) para abordar problemas complejos que requieren una colaboración multidimensional.

Reducción de la Dependencia de Actores Clave: Crear redundancia en la red aumentando las conexiones y capacidades de nodos periféricos. Esto puede implicar la capacitación de actores como Transportadores y Compradores para asumir roles más importantes en la red.

Fomento del Liderazgo y Participación Comunitaria: Promover la participación activa de los Vecinos y otros actores comunitarios en la toma de decisiones locales. Esto ayudará a legitimar las decisiones y fortalecer la cohesión social dentro de la red.

Inclusión y Empoderamiento de Actores Vulnerables: Desarrollar programas específicos para la inclusión de Habitantes de Calle y otros actores vulnerables, asegurando que tengan una voz en la red y acceso a recursos y oportunidades.

Conclusión: Para intervenir de manera efectiva en la red, es fundamental equilibrar el poder y la influencia, fortaleciendo las conexiones entre nodos centrales y periféricos, promoviendo la inclusión de actores vulnerables y distribuyendo el liderazgo y la toma de decisiones de manera más equitativa. Con un enfoque coordinado y colaborativo, se puede mejorar la resiliencia y sostenibilidad de la red en su conjunto.