6  Introducción al Análisis de Redes Sociales

El Análisis de Redes Sociales (SNA) es una disciplina con una base sólida de Matemática Aplicada, fundamentada en la Teoría de Grafos y la Matemática Discreta [@wasserman1994; @newman2010]. En computación, es esencial para modelar y comprender sistemas complejos, desde arquitecturas de software y dependencias hasta patrones de comunicación organizacional.

Esta disciplina está íntimamente ligada al Álgebra Lineal: gran parte de los algoritmos de búsqueda modernos, como el PageRank de Google, se basan en la teoría de autovalores y autovectores.

Figura 6.1: Ilustración del algoritmo PageRank y la centralidad de autovectores en una red asimétrica.

6.1 ¿Por qué SNA?

El objetivo principal es describir las relaciones entre los elementos de una red y extraer conocimiento acerca de las estructuras sociales o técnicas que existen en ella [@barabasi2002]. Como reza el axioma del análisis de redes: “En una red, los actores no intervienen aislados” (por ejemplo: la propensión de una persona a comprar un producto o a contraer un virus no puede explicarse solo por sus atributos individuales, sino por su posición y conexiones dentro del entramado social).

Existen aplicaciones industriales muy destacadas para el análisis y visualización de redes. Herramientas como Gephi (gephi.org) proporcionan un entorno de código abierto ideal para el análisis exploratorio y la manipulación de grafos en tiempo real. Por otro lado, plataformas como Cytoscape (cytoscape.org), originalmente diseñadas para bioinformática, se han convertido en el estándar para visualizar redes complejas en múltiples dominios.

6.2 SNA en el ecosistema R

R es una herramienta extremadamente potente para SNA debido a su capacidad para Reproducible Research, superando a las aplicaciones como como Gephi, Pajek o NodeXL del tipo GUI (Graphical User Interface) cuando se requiere automatización y rigor.

6.2.1 Arquitectura Modular

Para un flujo de trabajo profesional, adoptamos un ecosistema modular donde cada herramienta cumple una función específica dentro del pipeline analítico. En la base se encuentra igraph [@csardi2006], el motor de cálculo computacional cuyo núcleo en C le permite procesar grafos de gran escala con extrema eficiencia. Sobre él, tidygraph [@pedersen2024tidygraph] ofrece una capa de abstracción que permite manipular redes como si fueran tablas ordenadas (tibbles), integrándose perfectamente con dplyr. Finalmente, ggraph [@pedersen2024ggraph] extiende la gramática de gráficos de ggplot2 para la visualización declarativa, desacoplando la estética de los algoritmos de disposición espacial.

Ejemplo: queremos analizar una pequeña red social de oficina. Fíjate cómo pasamos de la potencia de cálculo a la limpieza de datos y terminamos en el dibujo artístico:

# 1. CARGAR LAS LIBRERÍAS
library(igraph)    # El motor
library(tidygraph) # El puente (tablas)
library(ggraph)    # El artista

# 2. CREAR LA RED (Responsabilidad de igraph/creación)
# Creamos un grafo de "estrella" simple como ejemplo
red_base <- play_islands(3, 10, 0.5, 1)

# 3. MANIPULAR LOS DATOS (Responsabilidad de tidygraph)
# Aquí tratamos la red como si fuera un Excel (tibble)
red_limpia <- as_tbl_graph(red_base) %>%
  activate(nodes) %>%
  mutate(importancia = centrality_degree()) %>% # Cálculo matemático
  filter(importancia > 1)                       # Filtramos nodos aislados

# 4. VISUALIZAR (Responsabilidad de ggraph)
# Aquí solo nos centramos en que se vea profesional
ggraph(red_limpia, layout = "nicely") + 
  geom_edge_link(alpha = 0.2, color = "grey") + # Dibujamos líneas
  geom_node_point(aes(size = importancia, color = importancia)) + # Dibujamos puntos
  theme_graph() + # Quitamos ejes y fondo feo de R
  labs(title = "Análisis de Red Profesional",
       subtitle = "Estructura procesada con la pila igraph-tidygraph-ggraph")

6.3 Fundamentos Teóricos

6.3.1 Definiciones Clave

Un grafo \(G = (V, E)\) es una estructura matemática compuesta por dos conjuntos fundamentales: los Nodos (o vértices, \(V\)), que representan a los actores o entidades del sistema, y las Aristas (o enlaces, \(E\)), que modelan las conexiones o relaciones entre ellos.

La distinción entre grafos dirigidos (asimétricos, como “seguir” en X/Twitter, donde tú sigues a alguien pero esa persona no tiene por qué seguirte a ti) y no dirigidos (simétricos, como “amistad” en Facebook, donde ambas partes deben estar de acuerdo) es fundamental, ya que afecta directamente al cálculo de todas las métricas estructurales.

IGRAPH f596a9d DN-- 5 7 -- 
+ attr: name (v/c), color (v/c), frame.color (v/c), label.color (v/c),
| label.font (v/n), size (v/n), color (e/c), width (e/n), arrow.size
| (e/n), curved (e/n)
+ edges from f596a9d (vertex names):
[1] Ana   ->Carlos Carlos->Ana    Elena ->Ana    David ->Ana    Carlos->David 
[6] David ->Elena  Maria ->Elena 
+ 5/5 vertices, named, from f596a9d:
[1] Ana    Carlos Elena  David  Maria 
+ 7/7 edges from f596a9d (vertex names):
[1] Ana   ->Carlos Carlos->Ana    Elena ->Ana    David ->Ana    Carlos->David 
[6] David ->Elena  Maria ->Elena 
Figura 6.2: Ejemplo de red dirigida: 5 usuarios de Instagram. Los Nodos (\(V\)) son los usuarios y las Aristas con flechas (\(E\)) representan quién sigue a quién. Nótese la asimetría: David sigue a Elena, pero Elena no sigue a David

6.3.2 Representaciones Computacionales

La elección de la estructura de datos determina qué algoritmos podemos aplicar con éxito. La Matriz de Adyacencia (\(N \times N\)) es óptima para el álgebra lineal y grafos densos, indicando en cada celda \(A_{i,j}\) la existencia de una conexión. Para grafos dispersos o importación de datos, la Lista de Aristas (Edge List) es el estándar, almacenando un vector de pares conectados.

En el flujo de trabajo moderno, preferimos el Paradigma Tidy (tbl_graph), que representa la red como dos tablas vinculadas (nodos y aristas) con sus propios atributos.

6.3.3 Comparativa de Representaciones

Representación Foco Conceptual Función R Clave Ventaja Computacional Base Teórica
Matriz Conexiones \(N \times N\) as_adjacency_matrix() Óptima para álgebra lineal y estructuras densas. Operadores lineales.
Edge List Aristas (\(E \times Attr\)) as_data_frame() Eficiencia en grafos dispersos. Formato relacional.
tbl_graph Nodos + Aristas as_tbl_graph() Manipulación declarativa con dplyr. Tidy Data Paradigm.

Para ilustrar estos conceptos con el grafo de la figura anterior (g_ejemplo), veamos cómo se ven sus diferentes representaciones computacionales:

1. Matriz de Adyacencia

as_adjacency_matrix(g_ejemplo, sparse = FALSE)
       Ana Carlos Elena David Maria
Ana      0      1     0     0     0
Carlos   1      0     0     1     0
Elena    1      0     0     0     0
David    1      0     1     0     0
Maria    0      0     1     0     0

2. Lista de Aristas (Edge List)

as_data_frame(g_ejemplo, what = "edges")
    from     to  color width arrow.size curved
1    Ana Carlos gray50     2        0.8    0.1
2 Carlos    Ana gray50     2        0.8    0.1
3  Elena    Ana gray50     2        0.8    0.1
4  David    Ana gray50     2        0.8    0.1
5 Carlos  David gray50     2        0.8    0.1
6  David  Elena gray50     2        0.8    0.1
7  Maria  Elena gray50     2        0.8    0.1

3. Objeto tbl_graph (Paradigma Tidy)

library(tidygraph)
as_tbl_graph(g_ejemplo) %>%
  activate(edges) %>%
  mutate(
    from_name = .N()$name[from],
    to_name = .N()$name[to]
  )
# A tbl_graph: 5 nodes and 7 edges
#
# A directed simple graph with 1 component
#
# Edge Data: 7 × 8 (active)
   from    to color  width arrow.size curved from_name to_name
  <int> <int> <chr>  <dbl>      <dbl>  <dbl> <chr>     <chr>  
1     1     2 gray50     2        0.8    0.1 Ana       Carlos 
2     2     1 gray50     2        0.8    0.1 Carlos    Ana    
3     3     1 gray50     2        0.8    0.1 Elena     Ana    
4     4     1 gray50     2        0.8    0.1 David     Ana    
5     2     4 gray50     2        0.8    0.1 Carlos    David  
6     4     3 gray50     2        0.8    0.1 David     Elena  
7     5     3 gray50     2        0.8    0.1 Maria     Elena  
#
# Node Data: 5 × 6
  name   color     frame.color label.color label.font  size
  <chr>  <chr>     <chr>       <chr>            <dbl> <dbl>
1 Ana    lightblue white       black                2    35
2 Carlos lightblue white       black                2    35
3 Elena  lightblue white       black                2    35
# ℹ 2 more rows

6.4 Arquitectura de Paquetes R para SNA: igraph, tidygraph y ggraph

Figura 6.3: La Revolución del Análisis de Redes en R: Ecosistema 2025-2026

El análisis de redes en R se basa en un diseño modular que separa las responsabilidades algorítmicas, de manipulación de datos y de visualización, lo que se considera una práctica de ingeniería de software robusta.

6.4.1 igraph: El Motor de Alto Rendimiento

igraph [@csardi2006] es la capa fundamental de cálculo algorítmico, o backend. Es una biblioteca rápida y de código abierto cuyo núcleo está escrito en C. Esta implementación en C es la razón principal de su alta eficiencia y rendimiento, permitiendo la ejecución de algoritmos complejos de manera optimizada, lo que es vital para el análisis de redes muy grandes.

igraph ofrece un conjunto exhaustivo de funciones de bajo nivel, desde la creación de grafos (e.g., make_graph()) hasta el análisis estructural (dfs, decompose). No obstante, la carga de igraph en R puede introducir conflictos al enmascarar objetos de otros paquetes, como union de base:: o decompose y spectrum de stats::.

6.4.2 tidygraph: La Abstracción Tidy para Redes

A pesar del poder de igraph, la naturaleza compleja de sus objetos de red hacía que su manipulación fuera laboriosa dentro del ecosistema Tidyverse de R. El paquete tidygraph [@pedersen2024tidygraph], desarrollado por Thomas Lin Pedersen, aborda este desafío.

La solución técnica que propone tidygraph es la estructura tbl_graph, una abstracción que representa la red no como un objeto monolítico, sino como dos tablas ordenadas (tibbles): una para los nodos y sus atributos, y otra para las aristas y sus atributos. Esto permite la manipulación de la red utilizando los verbos familiares del paquete dplyr (e.g., mutate, filter), facilitando la curva de aprendizaje y aumentando la legibilidad del código.

La sinergia entre los dos paquetes se logra mediante la función as_tbl_graph(). Esta función transforma el objeto igraph complejo, que es el resultado de las operaciones de alto rendimiento en C, en un objeto tbl_graph manipulable por el Tidyverse. Esta conversión representa la transición del paradigma, permitiendo al usuario heredar la velocidad del motor de igraph mientras trabaja con la sintaxis predictiva de dplyr. tidygraph actúa como una capa de interfaz y manipulación de datos (middleware).

6.4.3 ggraph: Visualización Declarativa de Grafos

El tercer componente de esta arquitectura modular es ggraph, el paquete de visualización. ggraph extiende la “Gramática de Gráficos” de ggplot2 al dominio de las redes. La visualización de redes se estructura en tres componentes esenciales: Nodos, Aristas y Layout (el algoritmo que determina la posición espacial de los nodos).

Dado que ggraph está construido sobre tidygraph como su estructura de datos central, existe una compatibilidad nativa y profunda. Esto significa que cualquier clase de red que pueda ser convertida a tbl_graph mediante un método as_tbl_graph() será soportada automáticamente por ggraph. Esta arquitectura modular que separa el cálculo (igraph), la manipulación de datos (tidygraph) y la presentación (ggraph) es un patrón de diseño que garantiza la eficiencia, la mantenibilidad y la reproducibilidad del código.


6.5 Glosario de Conceptos Clave

Antes de entrar en los capítulos técnicos, consolidamos la terminología fundamental que encontrarás en todos los recursos y artículos del área:

Concepto Definición técnica Función en R
Nodos / Vértices Entidades del sistema (personas, servidores, documentos) V(g) en igraph; tabla nodes en tidygraph
Aristas / Arcos Relaciones entre entidades; pueden tener peso y dirección E(g) en igraph; tabla edges en tidygraph
Medidas de centralidad Cuantifican la importancia de un nodo: degree, betweenness, closeness, PageRank centrality_*() en tidygraph
Detección de comunidades Partición de la red en grupos densamente interconectados group_louvain(), group_infomap()
Visualización de redes Representación espacial de nodos y aristas según un algoritmo de layout ggraph() + geom_node_* + geom_edge_*
Redes egocéntricas Subgrafo formado por un nodo ego y sus vecinos directos (alters) make_ego_graph() en igraph

6.6 Recursos y Lecturas Adicionales

Los siguientes recursos externos son útiles para complementar los contenidos de este bloque, ordenados de menor a mayor especialización:

6.6.1 Nivel introductorio

  • Documentación oficial de igraph: igraph.org — referencia completa de funciones, tutoriales y ejemplos. Es el punto de partida indispensable para cualquier análisis de redes en R [@csardi2006].
  • GeeksforGeeks — SNA en R: artículo que ofrece una visión general de los conceptos básicos de SNA y su implementación práctica en R, ideal como primera toma de contacto.
  • ResearchGate — SNA Overview: revisión académica que sitúa el SNA en su contexto disciplinar y describe las herramientas de R disponibles [@wasserman1994].

6.6.2 Nivel práctico

  • R-bloggers — SNA en R: demostración práctica paso a paso que cubre visualización y medidas de centralidad en R, con código reproducible. Útil para consolidar los conceptos de este capítulo.
  • Documentación de tidygraph: tidygraph.data-imaginist.com — guía de referencia del paradigma tidy para redes [@pedersen2024tidygraph].
  • Documentación de ggraph: ggraph.data-imaginist.com — galería de layouts y geometrías disponibles [@pedersen2024ggraph].

6.6.3 Nivel especializado

  • Analytics Vidhya — Ego Networks en R: introducción específica a las redes egocéntricas y cómo crearlas y analizarlas en R con igraph. Excelente complemento a la sección de Ego Networks del capítulo de Métricas.

6.6.4 Libros de referencia

Estos libros ofrecen distintos niveles de profundidad y enfoques complementarios:

Libro Autores Enfoque Nivel
R for Data Science [@wickham2017r4ds] Wickham & Grolemund Fundamentos de R y tidyverse; base para usar tidygraph Introductorio
Social Network Analysis for Startups [@krut2013sna] Tsvetovat & Kouznetsov SNA práctico con aplicaciones de negocio: recolección, análisis y visualización Intermedio
A User’s Guide to Network Analysis in R [@luke2015networkR] Luke Manual práctico con igraph — centralidad, comunidades y ejemplos reales Intermedio
Statistical Analysis of Network Data with R [@kolaczyk2020statistical] Kolaczyk & Csárdi Enfoque estadístico avanzado: ERGMs, modelos de grafos, redes a gran escala Avanzado
Networks: An Introduction [@newman2010] Newman Teoría de grafos, escalas libres, Small-World, modelos probabilísticos Avanzado
Nota💡 Recomendación de estudio

Si es tu primer contacto con SNA, empieza con R for Data Science para asentar las bases de R/tidyverse, luego pasa al libro de Luke para la práctica con igraph, y finalmente a Newman para la teoría. El material de Analytics Vidhya sobre Ego Networks es especialmente relevante para el capítulo de métricas avanzadas.