• 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
    • Estadística
      • Calculadora del Tamaño Muestral en Encuestas
      • Calculadora de estadísticos descriptivos
      • Test de normalidad
      • Calculadora de contrastes de hipotesis
      • Calculadora de tamano del efecto
      • Simulador de Regresión Lineal con Ruido
      • Visualizador de PCA
      • Visualizador de Series Temporales
      • Simulador de Regresión Logística
      • Simulador de K-Means
      • Simulador de DBSCAN
      • Detector de la Ley de Benford
    • Probabilidad
      • Calculadora de Probabilidad de Distribuciones
      • Calculadora de Probabilidades de Lotería
      • Simulador del Problema de Monty Hall
      • Simulador de la Estrategia Martingala
    • Finanzas
      • Calculadora de Préstamos e Hipotecas
      • Conversor TIN ↔ TAE
      • Calculadora DCA con ajuste por inflación
      • Calculadora XIRR con Flujos Irregulares
      • Simulador FIRE (Financial Independence, Retire Early)
    • Negocios
      • CLV
      • Scoring
    • Herramientas
      • Formateador / Minificador de JSON
      • Conversor CSV ↔ JSON
      • Comparador y Formateador de Texto y JSON
      • Formateador y Tester de Expresiones Regulares
      • Inspector de JWT
      • Generador y verificador de hashes
      • Codificador / Decodificador Base64 y URL
      • Conversor de bases numericas
      • Conversor de Timestamp Unix
      • Conversor de colores
      • Generador de UUIDs
    • Juegos
      • Tres en Raya
      • Nim con Q-Learning
    • Más
      • Método D’Hondt
      • Generador de Contraseñas Seguras
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad

Analytics Lane

Ciencia e ingeniería de datos aplicada

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

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.

1200 publicaciones en Analytics Lane
En Analytics Lane
1200 publicaciones en Analytics Lane

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).

Publicidad


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í

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?

Publicaciones relacionadas

  • 1200 publicaciones en Analytics Lane
  • Analytics Lane lanza su Conversor TIN ↔ TAE: la herramienta definitiva para entender el coste real de depósitos, préstamos e hipotecas
  • Analytics Lane lanza su Conversor de Bases Numéricas: entiende cómo trabajan los ordenadores a nivel de bits
  • Analytics Lane lanza su Visualizador de Series Temporales: entiende tendencia, estacionalidad y ruido de forma visual e interactiva
  • Analytics Lane lanza un nuevo Formateador y Tester de Expresiones Regulares para desarrolladores
  • Analytics Lane lanza un Conversor CSV ↔ JSON para transformar datos en tiempo real
  • Analytics Lane lanza la versión 1.1 del laboratorio con nuevas suites de CLV y Scoring
  • Analytics Lane lanza una Calculadora de Rentabilidad con Flujos Irregulares basada en TIR (XIRR)
  • ¡Analytics Lane cumple ocho años!

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

Ley de Benford: cómo detectar datos manipulados con ejemplos reales

mayo 28, 2026 Por Daniel Rodríguez

Subplots en Matplotlib: cómo organizar múltiples gráficos en una sola figura

mayo 26, 2026 Por Daniel Rodríguez

Síndrome del objeto brillante en ciencia de datos: el error simétrico a los costes hundidos

mayo 21, 2026 Por Daniel Rodríguez

Publicidad

Es tendencia

  • pandas Pandas: Contar los valores nulos en DataFrame publicado el agosto 12, 2021 | en Python
  • Error: No se puede cargar el archivo porque la ejecución de scripts está deshabilitada en este sistema Solución a los problemas de ejecución de scripts en Windows 11 cuando se da el mensaje: “No se puede cargar el archivo porque la ejecución de scripts está deshabilitada en este sistema” publicado el febrero 14, 2024 | en Herramientas
  • Mejorando la calidad de las imágenes en Jupyter Notebook: Un enfoque completo publicado el marzo 6, 2024 | en Herramientas, Python
  • ¿Cómo eliminar columnas y filas en un dataframe pandas? publicado el marzo 25, 2019 | en Python
  • Truco Python: eliminar los valores duplicados de una lista en Python publicado el junio 29, 2020 | 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.1 (11)

Aplicar el método D’Hondt en Excel

Comentarios recientes

  • bif en JSON en bases de datos: cuándo es buena idea y cuándo no
  • bif en Cómo desinstalar Oracle Database 19c en Windows
  • M. Pilar en Cómo eliminar las noticias en Windows 11 y recuperar tu concentración
  • 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

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-2026 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto