R

Introducción a igraph en R (Parte 5): Centralidad de autovector (Eigenvector Centrality) en Grafos

En las entradas anteriores, exploramos diversas medidas de centralidad, como la centralidad de grado, la centralidad de intermediación y la centralidad de cercanía. Esta semana nos enfocaremos en una métrica fundamental dentro del análisis de redes: la centralidad de autovector (eigenvector centrality).

Esta medida extiende la idea de la centralidad de grado, teniendo en cuenta no sólo el número de conexiones de un nodo, sino también la importancia de los nodos a los que está conectado. Esto la convierte en una métrica fundamental para identificar los nodos más influyentes dentro de una red y es especialmente útil en aplicaciones donde la influencia o la reputación de un nodo dependen de su contexto en la red. Además, esta métrica es ampliamente utilizada en disciplinas como las ciencias sociales, la biología, la informática y la economía, donde la estructura de la red puede influir en los resultados y las interacciones entre los nodos.

Concepto y relación con la importancia de un nodo

La centralidad de autovector asigna un puntaje a cada nodo basado en la importancia de sus vecinos. Matemáticamente, se define como la solución al siguiente sistema de ecuaciones: C_a​(i) = \frac{1}{\lambda} \sum_{j \in N(i)} A_{ij} x_j, donde:

  • x_i es la centralidad del nodo i.
  • A_{ij} es el valor de la matriz de adyacencia en la posición (i, j), indicando si hay una conexión entre los nodos i y j.
  • \lambda es el mayor autovalor de la matriz de adyacencia.

La idea clave es que un nodo es importante si está conectado a otros nodos importantes. Esta propiedad hace que la centralidad de autovector sea útil en aplicaciones como:

  • Redes sociales: Para identificar usuarios influyentes y líderes de opinión.
  • Redes de transporte: Para detectar las estaciones críticas dentro de la red de infraestructuras y evaluar su impacto en la eficiencia del sistema.
  • Ciencias biomédicas: Para analizar interacciones de proteínas en redes biológicas y su impacto en enfermedades complejas.
  • Finanzas: Para evaluar la importancia de instituciones en sistemas financieros interconectados y detectar nodos clave en la propagación de crisis financieras.
  • Redes eléctricas y de telecomunicaciones: Para determinar nodos estratégicos en la distribución de recursos y mejorar la eficiencia de la red.

Conexión con el algoritmo PageRank

Una de las aplicaciones más famosas de la centralidad de autovector es el algoritmo PageRank, desarrollado por Google para clasificar las páginas web. El PageRank es una variante de la centralidad de autovector, con la diferencia de que introduce un factor de amortiguamiento para evitar problemas en grafos desconectados.

La idea detrás de PageRank es similar: una página web es importante si es enlazada por otras páginas importantes. Este concepto se extiende a redes sociales, donde los usuarios con más conexiones a otros usuarios influyentes tienen mayor autoridad en la comunidad. También se aplica en sistemas de recomendación y en análisis de influencia política en redes de comunicación.

Matemáticamente, PageRank se calcula iterativamente de la siguiente manera: PR(i) = (1-d) + d \sum_{j \in N(i)} \frac{PR(j)}{L(j)}, donde:

  • PR(i) es el PageRank del nodo i.
  • d es el factor de amortiguamiento (por defecto 0.85).
  • N(i) representa los nodos que enlazan a i.
  • L(j) es el número de enlaces salientes del nodo j.

Este método ha sido clave en el éxito de Google y en muchos otros motores de búsqueda y redes sociales, permitiendo una clasificación más efectiva de la relevancia de los nodos dentro de la red.

Cálculo con eigen_centrality() en igraph

La centralidad de autovector se puede calcular fácilmente en igraph utilizando la función eigen_centrality(). Para el PageRank se puede usar la función page_rank().Veamos un ejemplo práctico en R:

library(igraph)

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

# Calcular la centralidad de autovector
centralidad_eigen <- eigen_centrality(g)

# Mostrar los valores de centralidad
centralidad_eigen$vector

# Calcular PageRank
centralidad_page_rank <- page_rank(g)

# Mostrar los valores del PageRank
centralidad_page_rank$vector

Este código devuelve un vector con los valores de centralidad de autovector de cada nodo y otro con el PageRank. En concreto, la centralidad de autovector es:

0.6535266 0.9497121 0.8416578 1.0000000 0.9497121 0.6535266

Mientras que el PageRank es:

0.1304151 0.1844428 0.1876104 0.1826739 0.1844428 0.1304151

Ahora, podemos visualizar el grafo escalando el tamaño de los nodos según su importancia en base a la centralidad de autovector:

# Ajustar tamaño de los nodos según su centralidad
V(g)$size <- centralidad_eigen$vector * 20

# Graficar el grafo
plot(g, vertex.label.cex=1.2, edge.width=2, main="Centralidad de Autovector")
Grafo en el que tamaño de los nodos está escalado según su centralidad de autovector.

Caso práctico: Red de colaboración académica

Imaginemos una red de colaboración académica donde los nodos representan investigadores y las aristas indican coautorías en publicaciones científicas. Queremos identificar a los investigadores más influyentes en función de su red de colaboraciones.

# Crear un grafo de colaboración
colaboracion <- graph(edges = c("Alice","Bob", "Alice","Charlie", "Bob","David", "Bob","Eve", "Charlie","Fay", "Eve","Fay", "David","Eve", "Charlie","David"), directed = FALSE)

# Calcular la centralidad de autovector
centralidad_eigen_colab <- eigen_centrality(colaboracion)

# Visualizar el grafo
V(colaboracion)$size <- centralidad_eigen_colab$vector * 50
plot(colaboracion, vertex.label.cex=1.2, edge.width=2, main="Red de Colaboración Académica")
Grafo con el ejemplo de la red de colaboración académica donde los nodos representan investigadores y las conexiones indican colaboraciones directas.

Conclusiónes

La centralidad de autovector es una medida avanzada que permite identificar nodos influyentes en redes sociales, académicas y de información. Su conexión con el algoritmo PageRank la hace fundamental en aplicaciones como la clasificación de páginas web y la detección de líderes en redes sociales.

En esta entrega, hemos explorado su definición, su relación con otras medidas de centralidad, su implementación en igraph y un caso práctico de aplicación. Además, hemos visto cómo se vincula con el PageRank y su importancia en distintos dominios.

En la próxima publicación, abordaremos otra métrica clave: el centralidad de Katz, que expande la centralidad de autovector considerando el impacto de conexiones indirectas.

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

Por Qué las Contraseñas Largas son más Seguras que las Complejas

"Tu contraseña debe tener al menos 8 caracteres, una mayúscula, un número y un símbolo…

5 días ago

Gini, KS y AUC: Cómo Medir la Calidad de un Modelo de Credit Scoring

Cuando un analista de riesgo presenta un nuevo scorecard ante el comité de dirección, la…

7 días ago

Curiosidad: De dónde vienen foo, bar y foobar

Si revisáis código o documentación de otros programadores, tarde o temprano os toparéis con dos…

2 semanas ago

BG/NBD + Gamma/Gamma: el modelo probabilístico para CLV en compras continuas

Los dos artículos anteriores cubrieron el CLV clásico —una fórmula útil pero que trata a…

2 semanas ago

Errores habituales al trabajar con DataFrames grandes en Pandas (y cómo evitarlos)

Hay un momento muy concreto en la vida de casi todo análisis: el código que…

3 semanas ago

Champion vs Challenger: Cómo los Bancos Validan Modelos Nuevos antes de Ponerlos en Producción

Has construido un nuevo modelo de credit scoring. Las métricas de validación son mejores que…

3 semanas ago

This website uses cookies.