R

Introducción a igraph en R (Parte 4): Centralidad de cercanía (Closeness) en Grafos

En las publicaciones anteriores, exploramos la centralidad de grado y la centralidad de intermediación, dos medidas fundamentales en el análisis de redes. Esta semana, nos enfocaremos en otra medida crucial para el análisis de grafos: la centralidad de cercanía (closeness centrality).

La centralidad de cercanía mide cuán cerca está un nodo del resto de nodos de la red. En otras palabras, calcula la inversa de la suma de las distancias desde un nodo a todos los demás. Esta medida es especialmente útil en aquellas redes donde la velocidad en la transmisión de la información o transporte es un factor importante. Su utilidad se extiende a múltiples disciplinas, desde el análisis de redes de telecomunicaciones hasta la optimización de infraestructuras de transporte.

¿Qué mide y por qué es importante la centralidad de cercanía (Closeness)?

La centralidad de cercanía de un nodo v se define matemáticamente como: C_C(v) = \frac{1}{\sum_{t \neq v} d(v, t)}, donde d(v, t) es la distancia más corta entre el nodo v y el nodo t.

Un valor mayor de centralidad de cercanía indica que el nodo está más próximo, en promedio, al resto de la red.

La importancia de esta medida radica en su capacidad para identificar nodos que pueden acceder rápidamente a otros nodos dentro de una red. Esto tiene aplicaciones en redes de transporte, telecomunicaciones y difusión de información.

Adicionalmente, permite medir la eficiencia de un nodo dentro de una red, ya que aquellos con alta centralidad de cercanía pueden facilitar una mejor comunicación, reducir costos de transmisión y mejorar la resiliencia de una estructura de conexiones interdependientes. En estudios de propagación de información, los nodos con alta centralidad de cercanía suelen ser los primeros en recibir y distribuir información crítica.

Uso en grafos de rutas o información

La centralidad de cercanía es especialmente útil en los siguientes escenarios:

Redes de transporte

En redes de transporte, como redes de carreteras, ferroviarias o aeropuertos, los nodos con alta centralidad de cercanía representan ubicaciones estratégicas desde las que se puede llegar rápidamente a muchas otras partes de la red. Esto es crucial para la optimización del tráfico y la logística. En planificación urbana, esta métrica ayuda a mejorar la accesibilidad de los ciudadanos a diferentes servicios y minimizar el tiempo de desplazamiento entre diferentes puntos de interés.

Redes de comunicación

En redes de telecomunicaciones, los servidores con alta centralidad de cercanía pueden transmitir información de manera más eficiente, reduciendo la latencia y mejorando el rendimiento del sistema. Por ejemplo, en redes distribuidas como el internet, los nodos con alta cercanía pueden actuar como hubs de distribución de paquetes de datos, optimizando la velocidad de conexión.

Redes sociales

En redes sociales, los usuarios con alta centralidad de cercanía pueden difundir información de manera más eficiente al estar ”más cerca” del resto de la comunidad. En plataformas como Bluesky, Mastodon o Facebook, identificar estos nodos es clave para diseñar estrategias de marketing digital y campañas virales, asegurando que los mensajes lleguen a una mayor audiencia con rapidez.

Infraestructura y redes energéticas

En redes eléctricas y sistemas de distribución de energía, la centralidad de cercanía permite identificar subestaciones estratégicas que minimizan pérdidas en la transmisión y optimizan la distribución de recursos. En sistemas de abastecimiento de agua, ayuda a determinar la mejor ubicación de estaciones de bombeo para garantizar una distribución equitativa.

Obtención de la centralidad de cercanía con closeness() en igraph

Podemos calcular la centralidad de cercanía en igraph con la función closeness(). Veamos un ejemplo con un grafo simple:

library(igraph)

# Crear un grafo simple
g <- graph(edges = c(1,2, 1,3, 2,4, 2,5, 3,6, 5,6, 4,5), directed = FALSE)

# Calcular centralidad de cercanía
closeness(g)

Este código devuelve un vector con la centralidad de cercanía de cada nodo en la red. Los valores que se obtiene son:

0.1250000 0.1428571 0.1111111 0.1111111 0.1428571 0.1250000

Lo que indica que los nodos con mayor centralidad de cercanía son el segundo y el quinto, ambos con aproximadamente 0,14. Resultado que también se puede analizar visualmente, para lo que podemos crear un gráfico en el que se muestra el grafo ajustando el tamaño de los nodos según su centralidad de cercanía:

# Ajustar tamaños según centralidad de cercanía
V(g)$size <- closeness(g) * 250

# Graficar el grafo
plot(g, vertex.label.cex=1.2, edge.width=2, main="Centralidad de Cercanía")

Los nodos con mayor centralidad aparecerán más grandes, reflejando su proximidad al resto de la red, como se muestra en la siguiente figura:

Grafo en el que el tamaño de los nodos el proporcional al valor de la centralidad de cercanía

Normalización de la Centralidad de Cercanía en igraph

En grafos con muchos nodos, la interpretación de la centralidad de cercanía puede ser más intuitiva si se normaliza. En igraph, esto se logra mediante el argumento normalized = TRUE en la función closeness(). La fórmula utilizada para la normalización es: C_C^{norm}(v) = \frac{C_C(v)}{(n - 1)}, donde n es el número total de nodos en la red.

Para calcular la versión normalizada en igraph:

# Calcular centralidad de cercanía normalizada
closeness(g, normalized = TRUE)

Lo que, para el grafo de ejemplo, produce los siguientes resultados:

0.6250000 0.7142857 0.5555556 0.5555556 0.7142857 0.6250000

Esto garantiza que los valores de centralidad se encuentren en un rango entre 0 y 1, facilitando la comparación de los valores entre grafos de diferentes tamaños.

Ejemplo práctico: Red de transporte urbano

Imaginemos que estamos analizando una red de transporte urbano, donde los nodos representan estaciones y las aristas representan conexiones directas. Queremos identificar las estaciones que permiten acceder más rápidamente a otras estaciones.

# Crear un grafo de transporte
g_transporte <- graph(edges = c("A","B", "A","C", "B","D", "B","E", "C","F", "E","F", "D","E"), directed = FALSE)

# Calcular centralidad de cercanía
closeness(g_transporte, normalized = TRUE)

# Visualizar el grafo
V(g_transporte)$size <- closeness(g_transporte, normalized = TRUE) * 50
plot(g_transporte, vertex.label.cex=1.2, edge.width=2, main="Red de Transporte Urbano")

Lo que produce una gráfica como la que se muestra a continuación:

Representación de la red de transporte urbano en el que el tamaño de los nodos el proporcional al valor de la centralidad de cercanía

En este caso, las estaciones con mayor centralidad de cercanía son aquellas desde las cuales es posible llegar más rápidamente a otras estaciones. Aplicando este análisis a un sistema de transporte real, como el metro de una gran ciudad, podríamos identificar estaciones clave que pueden actuar como puntos de transbordo óptimos.

Conclusiones

La centralidad de cercanía es una herramienta importante para el análisis de redes, permitiendo identificar nodos que están bien posicionados para acceder rápidamente al resto de la red. Su aplicación es clave en redes de transporte, telecomunicaciones y difusión de información, además de otros campos como la infraestructura energética y la planificación urbana.

En esta entrega, hemos explorado su definición, su importancia en diferentes tipos de grafos, y su implementación en igraph con ejemplos prácticos. La próxima semana, abordaremos otra medida relevante en el análisis de redes: la centralidad de autovector (eigenvector centrality), utilizada para evaluar la influencia de un nodo en la red.

Nota: La imagen de este artículo fue generada utilizando un modelo de inteligencia artificial.

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento

Imagínate en una sala con un grupo de personas, por ejemplo, en una oficina, un…

3 días ago

Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)

En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…

5 días ago

Curiosidad: ¿Por qué usamos p < 0.05? Un umbral que cambió la historia de la ciencia

En casi cualquier análisis estadístico —ya sea en medicina, psicología, economía o ciencia de datos—…

1 semana ago

¿Está concentrado el MSCI World? Un análisis con Gini, Lorenz y leyes de potencia

El MSCI World Index suele presentarse como “la ventana al mundo” para quienes invierten en…

2 semanas ago

Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo

En el mundo del análisis de datos solemos escuchar una idea poderosa: cuantos más datos,…

2 semanas ago

Error npm ERR! code EACCES al instalar paquetes en Node.js: Cómo solucionarlo paso a paso

¿Te has encontrado con este error al intentar instalar paquetes con npm? npm ERR! code…

3 semanas ago

This website uses cookies.