Loading [MathJax]/jax/output/HTML-CSS/jax.js

1 Redes sociales

Una red social o simplemente red es una colección de objetos interconectados.

Un grafo G=(V,E) es una estructura que consiste de un conjunto de vértices (nodos) V y de un conjunto de enlaces (aristas o arcos) E, que permiten representar relaciones entre los elementos del conjunto, donde los elementos de E son parejas de la forma e={u,v} con u,vV.

El número de vértices y el número de aristas se conocen como orden y tamaño del grafo, respectivamente.

2 Tipos de relaciones

2.1 No dirigidas y dirigidas

Una relación no dirigida (simétrica) tiene uno y solo un valor por díada. Por otro lado, una relación dirigida (asimétrica) tiene dos valores por díada, un valor que representa la perspectiva de cada miembro de la pareja.

Se dice que una red es una red no dirigida si todas las relaciones en ella no están dirigidas, y se denomina red dirigida o dígrafo en caso contrario.

Ejemplos de relaciones no dirigidas:

  • Amistades de una red social on-line.
  • Cantidad de tiempo que personas pasan juntas.

Ejemplos de relaciones dirigidas:

  • Amistades autoinformadas.
  • Número de correos electrónicos enviados entre compañeros de trabajo.

2.2 Binarias y ponderadas

Una relación binaria (dicotómica) únicamente asume dos valores, a saber, ausencia o presencia de la relación. Mientras que una relación ponderada (numérica) toma más de dos valores para caracterizar las relaciones entre las díadas.

Ejemplos de relaciones binarias:

  • Presencia de un conflicto militar entre países.
  • Presencia de una alianza estratégica entre compañías.

Ejemplos de relaciones ponderadas:

  • Número de veces que congresistas apoyan un proyecto de ley juntos.
  • Distancia geográfica entre ciudades.

2.3 Ejemplo: Trabajo colaborativo

Red de relaciones de trabajo colaborativo entre miembros de una firma de abogados (SG&R) disponible en el paquete sand de R y en este enlace.

Un enlace indica que los miembros de la firma han trabajado juntos en al menos un caso.

# paquetes
suppressMessages(suppressWarnings(library(igraph)))
suppressMessages(suppressWarnings(library(sand)))
suppressMessages(suppressWarnings(library(corrplot)))
# datos: relaciones de trabajo colaborativo
head(elist.lazega)
##   V1  V2
## 1 V1 V17
## 2 V2  V7
## 3 V2 V16
## 4 V2 V17
## 5 V2 V22
## 6 V2 V26
# clase de objeto
class(elist.lazega)
## [1] "data.frame"
# grafo
g <- graph_from_data_frame(d = elist.lazega, directed = "F")
# clase de objeto
class(g)
## [1] "igraph"
# dirigida?
is_directed(g)
## [1] FALSE
# ponderada?
is_weighted(g)
## [1] FALSE
# orden
(n <- vcount(g))
## [1] 34
# tamaño
(s <- ecount(g))
## [1] 115
# visualización
igraph_options(vertex.label = 1:vcount(g), vertex.size = 9, vertex.frame.color = 1, vertex.color = 0, vertex.label.color = "black", edge.color = "blue4")
par(mfrow = c(1,2))
# diseño circular
plot(g, layout = layout_in_circle)
# diseño de Fruchterman y Reingold: Graph Drawing by Force-directed Placement
set.seed(1234)
plot(g, layout = layout_with_fr)

3 Matriz de adyacencia

La matriz de adyacencia Y=[yi,j] asociada con una red binaria de n vértices es una matriz binaria de n×n tal que yi,j=1 si {i,j}E y yi,j=0 si {i,j}E.

La diagonal principal de una matriz de adyacencia está llena de ceros estructurales.

La matriz de adyacencia de un grafo no dirigido es necesariamente simétrica. Mientras que la matriz de adyacencia de un grafo dirigido es posiblemente asimétrica.

3.1 Ejemplo: Trabajo colaborativo (cont.)

# matriz de adyacencia
Y <- as.matrix(get.adjacency(graph = g, names = F))
# clase de objeto
class(Y)
## [1] "matrix" "array"
# dimensión
dim(Y)
## [1] 34 34
# simétrica?
isSymmetric(Y)
## [1] TRUE
# visualización
igraph_options(vertex.label = 1:vcount(g), vertex.size = 9, vertex.frame.color = 1, vertex.color = 0, vertex.label.color = "black", edge.color = "blue4")
par(mfrow = c(1,2))
# grafo
set.seed(1234)
plot(g, layout = layout_with_fr)
# matriz de adyacencia
corrplot(corr = Y, col.lim = c(0,1), method = "color", tl.col = "black", tl.cex = 1.4, addgrid.col = "gray90", cl.pos = "n")

4 Grado

Un vértice vV es incidente en una arista eE si e={v,u} para algún uV.

El grado dv de un vértice vV corresponde al número de aristas indicentes en v.

Se define fd como la fracción de vértices vV tales que dv=d. La colección {fd} se denomina distribución de grado de G.

4.1 Ejemplo: Trabajo colaborativo (cont.)

# grados
(d <- degree(g))
##  V1  V2  V3  V4  V5  V6  V7  V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 V19 V20 V21 
##   1   6   3   9   6   5   2   3   5   1   9   2   6  11  13  15   8  10   4   1 
## V22 V24 V25 V26 V28 V29 V30 V31 V32 V33 V34 V35 V36 V27 
##   9   9   5  12  13   9   4  13  12   5   6   7   3   3
# grados ordenados descendentemente
d[order(d, decreasing = T)]
## V17 V16 V28 V31 V26 V32 V15 V19  V4 V12 V22 V24 V29 V18 V35  V2  V5 V14 V34  V6 
##  15  13  13  13  12  12  11  10   9   9   9   9   9   8   7   6   6   6   6   5 
## V10 V25 V33 V20 V30  V3  V9 V36 V27  V7 V13  V1 V11 V21 
##   5   5   5   4   4   3   3   3   3   2   2   1   1   1
# distribución de grado
dg <- table(factor(d, levels = 0:n))/n
round(dg, 3)
## 
##     0     1     2     3     4     5     6     7     8     9    10    11    12 
## 0.000 0.088 0.059 0.118 0.059 0.118 0.118 0.029 0.029 0.147 0.029 0.029 0.059 
##    13    14    15    16    17    18    19    20    21    22    23    24    25 
## 0.088 0.000 0.029 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 
##    26    27    28    29    30    31    32    33    34 
## 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
# distribución de grado
round(degree_distribution(g), 3)
##  [1] 0.000 0.088 0.059 0.118 0.059 0.118 0.118 0.029 0.029 0.147 0.029 0.029
## [13] 0.059 0.088 0.000 0.029

# visualización
igraph_options(vertex.label.color = "black", edge.color = "blue4", layout = layout_with_fr)
par(mfrow = c(1,2))
# grafo
set.seed(1234)
plot(g, vertex.label = 1:vcount(g), vertex.size = 9, vertex.frame.color = 1, vertex.color = 0)
# gra
set.seed(1234)
plot(g, vertex.label = NA, vertex.size = degree(g), vertex.frame.color = "gold", vertex.color = adjustcolor("gold",0.1))

5 Densidad

La densidad de una red no dirigida se define como la frecuencia relativa de las aristas observadas respecto al potencial de aristas.

La densidad de una red no dirigida se calcula como den(G)=|E||V|(|V|1)/2.

5.1 Ejemplo: Trabajo colaborativo

# densidad
round(s/(n*(n-1)/2), 3)
## [1] 0.205
# densidad
round(sum(Y)/(n*(n-1)), 3)
## [1] 0.205
# densidad
round(edge_density(g), 3)
## [1] 0.205

6 Transitividad

Los estados triádicos no dirigidos son:

Una tripla está constituida por tres nodos conectados por dos (tripla abierta) o tres (tripla cerrada) aristas no dirigidas.

La transitividad se cuantifica por medio del coeficiente de agrupamiento que se calcula como cl(G)=no. triplas cerradasno. triplas=3×no. triángulosno. triplas=3τ(G)τ3(G), donde τ(G) es el número de triángulos y τ3(G) es el número de triplas.

6.1 Ejemplo: trabajo colaborativo

# numero de triángulos
sum(count_triangles(g))
## [1] 360
# conteos de estados triádicos
(mot <- motifs(g, size = 3))
## [1]  NA  NA 566 120
# coeficiente de agrupamiento (transitividad)
round(3*mot[4]/(mot[3] + 3*mot[4]), 3)
## [1] 0.389
# coeficiente de agrupamiento (transitividad)
round(transitivity(g), 3)
## [1] 0.389

7 Asortatividad

La asortatividad se refiere a la tendencia de los vértices a conectarse con otros vértices que tienen características similares (homofilia).

La asortatividad se mide a través de coeficientes que indican el grado de similitud o disimilitud entre los nodos conectados.

Un coeficiente popular para cuantificar la asortatividad es el coeficiente de asortatividad de grado que para redes no dirigidas se calcula como r=1s2qj,kjk(ej,kqjqk), donde ej,k es la fracción de aristas que conectan vértices de tipo j y k, qj=kej,k y sq es la desviación estándar de los qj.

Este coeficiente compara los grados de los nodos que están conectados entre sí.

El coeficiente de asortatividad de grado varía entre 1 y 1. Si el coeficiente es positivo, indica que existe una tendencia hacia la conexión de nodos con grados similares (asortatividad). Si el coeficiente es negativo, indica una preferencia por la conexión de nodos con grados diferentes (disortatividad).

7.1 Ejemplo: trabajo colaborativo

# coeficiente de asortatividad de grado
round(assortativity_degree(g), 3)
## [1] -0.168
# assortativity_degree usa el grado como valores de vértice y llama assortativity
round(assortativity(g, types1 = degree(g)), 3)
## [1] -0.168

Referencias