• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Encuestas: Tamaño de Muestra
    • Lotería: Probabilidad de Ganar
    • Reparto de Escaños (D’Hondt)
    • Tres en Raya con IA
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad
    • Tiendas afiliadas
      • AliExpress
      • Amazon
      • Banggood
      • GeekBuying
      • Lenovo

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • Excel
  • Matlab

Introducción a igraph en R (Parte 8): PageRank

mayo 7, 2025 Por Daniel Rodríguez Deja un comentario
Tiempo de lectura: 8 minutos

En el análisis de redes, identificar los nodos más influyentes es clave para comprender cómo se organiza y se comporta un sistema. Uno de los algoritmos más importantes en este ámbito es PageRank, desarrollado originalmente por Larry Page y Sergey Brin en 1998. Este algoritmo sería la base del motor de búsqueda de Google, revolucionando la forma en que se clasifican las páginas web.

A diferencia de otras métricas más simples, como la centralidad de grado, que solo cuenta la cantidad de enlaces que recibe un nodo, PageRank tiene en cuenta también la importancia de quienes enlazan a dicho nodo. Es decir, no todos los enlaces valen lo mismo: recibir un enlace desde un nodo influyente cuenta más que recibirlo de uno poco conectado.

Esta lógica lo hace especialmente útil no solo para motores de búsqueda, sino también en otras áreas como:

  • Biología: para analizar redes de interacción entre proteínas.
  • Economía: para estudiar los flujos de comercio entre países o empresas.
  • Sociología: para identificar personas influyentes en redes sociales.
  • Sistemas de recomendación: como una forma de evaluar la relevancia de productos o contenidos.

En esta entrada, explicaremos en detalle el algoritmo PageRank, sus diferencias con la centralidad de autovector, y como implementar en R con igraph.

Tabla de contenidos

  • 1 ¿Qué es PageRank?
  • 2 Formulación matemática de PageRank
  • 3 Diferencias entre PageRank y la centralidad de autovector
  • 4 Implementación en igraph con page_rank()
    • 4.1 Ejemplo básico en R
    • 4.2 Ejemplo con una red web simulada
  • 5 Conclusión

¿Qué es PageRank?

PageRank es un algoritmo que asigna un puntaje de importancia a cada nodo de una red dirigida. Su filosofía se resume en una idea sencilla: “una página es importante si otras páginas importantes la enlazan”. La clave está en que esos enlaces también están ponderados: un enlace desde un nodo relevante cuenta más que uno desde un nodo periférico.

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

Publicidad


Formulación matemática de PageRank

Supongamos una red dirigida con n nodos. Podemos representarla mediante una matriz de adyacencia A, donde A_{ij} = 1 si existe un enlace del nodo j hacia el nodo i (invertido la conexión porque se desea saber quién recibe el enlace), y 0 en caso contrario.

PageRank define la puntuación para cada uno de los nodos mediante la siguiente expresión: PR(i) = \alpha \sum_{j \in B_i} \frac{PR(j)}{L(j)} + \frac{1 - \alpha}{n} donde:

  • PR(i): valor de PageRank del nodo i,
  • B_i: conjunto de nodos que enlazan hacia i,
  • L(j)[latex]: número de enlaces salientes del nodo [latex]j,
  • \alpha: factor de amortiguación o damping factor (generalmente 0,85),
  • \frac{1 - \alpha}{n}: probabilidad de "teletransportarse" a un nodo aleatorio.

Este modelo representa el comportamiento de un navegante que sigue enlaces con probabilidad \alpha, pero que con probabilidad 1 - \alpha decide ir a una página cualquiera.

Desde el punto de vista matricial, esta fórmula equivale a encontrar el vector propio principal de una matriz estocástica derivada de la matriz de adyacencia. El valor de PageRank es el vector \mathbf{r} que satisface: \mathbf{r} = \alpha M \mathbf{r} + (1 - \alpha)\mathbf{v} donde:

  • M: matriz de transición (normalizada por columnas),
  • \mathbf{v}: vector de personalización, usualmente uniforme (\mathbf{v} = \frac{1}{n}).

Este sistema converge iterativamente y garantiza una solución única bajo ciertas condiciones (como que la red sea fuertemente conectada o se utilice el damping).

Diferencias entre PageRank y la centralidad de autovector

Tanto PageRank como la centralidad de autovector (eigenvector centrality) se basan en la intuición de que un nodo es importante si está conectado a otros nodos importantes. Sin embargo, existen diferencias clave entre ambos métodos:

  1. Direccionalidad:
    • La centralidad de autovector puede aplicarse tanto a redes dirigidas como no dirigidas.
    • PageRank fue diseñado específicamente para redes dirigidas.
  2. Propagación de la importancia:
    • En la centralidad de autovector, la influencia de los vecinos se transmite directamente, sin ajustar por cuántos enlaces emiten.
    • PageRank divide su influencia entre todos los enlaces salientes, es decir, distribuye su importancia.
  3. Factor de amortiguación (\alpha):
    • PageRank introduce este parámetro, que permite modelar la posibilidad de “saltar” a cualquier nodo de forma aleatoria.
    • La centralidad de autovector no tiene este mecanismo, por lo que puede presentar problemas de estabilidad en redes muy grandes o dispersas.
  4. Estabilidad en redes grandes:
    • PageRank es más robusto en redes con muchas conexiones y estructuras complejas.
    • La centralidad de autovector puede verse afectada por pequeños cambios en la red.

Debido a estas diferencias, PageRank es más estable cuando se trabaja con redes grandes en las que los nodos pueden recibir enlaces de diferentes partes del sistema, como ocurre en la web. En cambio, la centralidad de autovector es más útil en redes donde la influencia está distribuida de manera más uniforme y no depende tanto de un nodo de inicio particular.

En resumen, las diferencias entre ambas métricas se pueden ver en la siguiente tabla

MétricaTipo de redConsidera importancia de enlacesFactor de amortiguación
AutovectorDirigidas y no dirigidasSíNo
PageRankDirigidasSíSí

Publicidad


Implementación en igraph con page_rank()

Para calcular PageRank en R, utilizamos la librería igraph, que proporciona la función page_rank() para estimar la importancia de cada nodo en una red dirigida. A continuación, presentamos un ejemplo básico y uno aplicado a red web simulada.

Ejemplo básico en R

En primer lugar, creamos un grafo dirigido con seis nodos (A, B, C, D, E, F) y aristas que representan relaciones entre ellos. Luego, aplicamos la función page_rank() para obtener la importancia relativa de cada nodo según su posición en la estructura de la red.

library(igraph)

# Crear un grafo dirigido
g <- graph(edges = c("A", "B", "A", "C", "B", "D", "B", "E", "C", "F", "E", "F", "D", "E", "C", "D"), directed = TRUE)

# Calcular el PageRank con factor de amortiguación de 0.85
pr <- page_rank(g, damping = 0.85)

# Mostrar los valores de PageRank de cada nodo
pr$vector

En este código:

  • Se define un grafo dirigido mediante el vector de aristas.
  • Se calcula el PageRank de cada nodo con un factor de amortiguación de 0.85, que representa la probabilidad de seguir un enlace en lugar de saltar aleatoriamente a otro nodo.
  • Finalmente, se imprimen los valores obtenidos, que indican la relevancia de cada nodo en la red.

Obteniendo como resultado los siguientes valores:

         A          B          C          D          E          F 
0.07084927 0.10096021 0.10096021 0.15666544 0.24692298 0.32364189

Lo que indica que el nodo F es el más importante, seguido del nodo E.

Para interpretar mejor estos resultados, es útil visualizar el grafo, ajustando el tamaño de cada nodo de acuerdo con su valor de PageRank. Esto permite identificar rápidamente los nodos más influyentes visualmente.

# Escalar el tamaño de los nodos según su PageRank
V(g)$size <- pr$vector * 190

# Ajustar el tamaño de las etiquetas y las flechas
V(g)$label.cex <- 1.2
E(g)$arrow.size <- 0.5

# Colorear los nodos según su valor de PageRank
V(g)$color <- heat.colors(length(V(g)))[rank(-pr$vector)]

# Dibujar la red con los valores de PageRank
plot(g,
     edge.width = 2,
     main = "PageRank en la Red")

Aquí:

  • Se escala el tamaño de cada nodo proporcionalmente a su valor de PageRank.
  • Se utilizan colores cálidos (de heat.colors) para reflejar visualmente la influencia de cada nodo.
  • Se ajustan detalles gráficos como el tamaño de las etiquetas y flechas para una visualización más clara.
Figura en la que se muestra un grafo con el tamaño de los nodos proporcionales al valor del PageRank obtenido.
Grafo de la red en la que el tamaño de los nodos es proporcional a su PageRank.

Esta gráfica hace más sencilla la identificación de los nodos más importantes en la red. Por ejemplo, si un nodo tiene muchos enlaces entrantes desde otros nodos importantes, su PageRank será alto y aparecerá más grande y colorido en el grafo. Lo que sucede en el nodo F y en menor grado en el E.

Publicidad


Ejemplo con una red web simulada

Para ilustrar un caso más realista, simulamos una red en la que los nodos representan páginas web y las aristas los enlaces entre ellas.

# Crear una red dirigida donde los nodos representan páginas web
web <- graph(edges = c("Inicio", "Contacto",
                       "Inicio", "Blog",
                       "Blog", "Articulo1",
                       "Blog", "Articulo2",
                       "Articulo1", "Contacto",
                       "Articulo2", "Contacto",
                       "Articulo2", "Inicio"),
             directed = TRUE)

# Calcular el PageRank de las páginas web
pr_web <- page_rank(web, damping = 0.85)

# Mostrar los valores de PageRank de cada nodo
pr_web$vector

En este ejemplo:

  • La red está compuesta por nodos como "Inicio", "Blog", "Contacto" y artículos específicos.
  • Los enlaces reflejan navegación típica entre secciones de un sitio web.
  • Se calcula el PageRank de cada nodo usando el mismo principio que antes.

El resultado indica que el nodo más importante es la página "Contacto”, ya que los resultados son:

   Inicio  Contacto      Blog Articulo1 Articulo2 
0.1593625 0.3625498 0.1593625 0.1593625 0.1593625

Visualizamos la red aplicando los mismos criterios de estilo para resaltar la relevancia de cada página:

# Escalar tamaño de nodos según PageRank
V(web)$size <- pr_web$vector * 290

# Ajustes visuales para mejorar la presentación
V(web)$label.cex <- 1.2
E(web)$arrow.size <- 0.5
V(web)$color <- heat.colors(length(V(web)))[rank(-pr_web$vector)]

# Mostrar la red simulada
plot(web,
     edge.width = 2,
     main = "PageRank en una Red Web Simulada")
Figura en la que se muestra un grafo de la red Web simulada con el tamaño de los nodos proporcionales al valor del PageRank obtenido.
Grafo de la red Web simulada en la que el tamaño de los nodos es proporcional a su PageRank.

La visualización revela qué páginas web tienen mayor relevancia dentro del sitio. En este caso, "Contacto" tiene un alto PageRank al recibir enlaces desde páginas clave como "Inicio", "Articulo1" y "Articulo2". Esto ilustra cómo PageRank no solo mide la cantidad de enlaces entrantes, sino también su calidad: un enlace desde una página importante vale más que muchos de páginas menos relevantes.

Conclusión

El algoritmo PageRank sigue siendo una herramienta fundamental para evaluar la importancia estructural de los nodos en una red dirigida. Su enfoque va más allá del simple conteo de enlaces entrantes: pondera cada enlace en base a la importancia del nodo emisor, lo que permite capturar la dinámica de influencia acumulada.

En R, su uso mediante la función page_rank() de igraph es sencillo, permitiendo obtener resultados numéricos y visualizaciones intuitivas que hacen más accesible el análisis de redes complejas.

Las aplicaciones de PageRank abarcan desde: Motores de búsqueda (como su uso original en Google), hasta análisis de redes sociales (para identificar usuarios influyentes) o la detección de anomalías en redes de fraude o ciberseguridad.

En la próxima publicación, exploraremos otras métricas clave de centralidad, como la centralidad de autoridad y de prestigio, que complementan a PageRank al captar distintas dimensiones del poder relacional en una red.

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

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 0 / 5. Votos emitidos: 0

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicidad


Publicaciones relacionadas

  • Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo
  • ¿Está concentrado el MSCI World? Un análisis con Gini, Lorenz y leyes de potencia
  • Curiosidad: ¿Por qué usamos p < 0.05? Un umbral que cambió la historia de la ciencia
  • Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)
  • La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento
  • Cómo abrir una ventana de Chrome con tamaño y posición específicos desde la línea de comandos en Windows
  • Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte
  • Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)
  • Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

Publicado en: R Etiquetado como: Análisis de redes, igraph

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

octubre 23, 2025 Por Daniel Rodríguez

Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)

octubre 21, 2025 Por Daniel Rodríguez

Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte

octubre 16, 2025 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Hoja de cálculo para repartir los escaños en base al método D’Hont Aplicar el método D’Hondt en Excel publicado el abril 14, 2021 | en Herramientas
  • Cómo solucionar problemas de red en VirtualBox: Guía completa publicado el junio 11, 2025 | en Herramientas
  • Cómo calcular el tamaño de la muestra para encuestas publicado el septiembre 9, 2025 | en Ciencia de datos
  • La tabla de la web finalmente importada en Excel Importar tablas desde la web en Excel publicado el octubre 21, 2020 | en Herramientas
  • pandas Pandas: Cómo iterar sobre las filas de un DataFrame en Pandas publicado el septiembre 13, 2021 | en Python

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.5 (10)

Diferencias entre var y let en JavaScript

Publicidad

Comentarios recientes

  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • CARLOS ARETURO BELLO CACERES en Justicio: La herramienta gratuita de IA para consultas legales
  • Piera en Ecuaciones multilínea en Markdown
  • Daniel Rodríguez en Tutorial de Mypy para Principiantes

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2025 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto