Introducción

La conexión selectiva entre vértices de acuerdo con sus características se denomina mezcla asortativa (assortative mixing).

La homofilia se refiere a que nodos similares tienen a relacionarse entre sí.

Los coeficientes de asortatividad miden el nivel de homofilia (homophily) del grafo, basándose en las etiquetas o valores asignados a los vértices.

Los coeficientes de asortatividad son positivos si vértices similares tienden a conectarse entre ellos, y negativo en caso contrario.

Si el coeficiente es alto, significa que los vértices conectados tienden a tener las mismas etiquetas o valores asignados similares.

Características categóricas

Cada vértice de un grafo \(G=(V,E)\) se puede etiquetar de acuerdo con una de \(M\) categorías. En este caso, el coeficiente de asortividad (assortativity coefficient) se define como \[ r_a = \frac{\sum_{i=1}^n f_{i,i} - \sum_{i=1}^n f_{i\bullet}f_{\bullet i}}{1 - \sum_{i=1}^n f_{i\bullet}f_{\bullet i}} \] donde:

  • \(f_{i,j}\): fracción de aristas que unen un vértice de la \(i\)-ésima categoría con un vértice de la \(j\)-ésima categoría.
  • \(f_{i\bullet} = \sum_{j=1}^n f_{i,j}\).
  • \(f_{\bullet j} = \sum_{i=1}^n f_{i,j}\).

Propiedades:

  • Se tiene que \(-1\leq r_a \leq 1\).
  • \(r_a=0\) cuando la conexión selectiva no es diferente de la obtenida mediante una asignación aleatoria de aristas que conserva la distribución de los grados (modelo de configuración).
  • \(r_a=1\) cuando hay una conexión selectiva asortativa perfecta (i.e., las aristas solo conectan vértices de la misma categoría).
  • \(r_a\) no es necesariamente igual a \(-1\) cuando hay una conexión selectiva desasortativa perfecta (i.e., las aristas solo conectan vértices de categorías diferentes).

Ver assortativity_nominal en igraph.

Características numéricas

Si la característica es discreta, se trabaja con las frecuencias relativas observadas y se aplica directamente la fórmula del coeficiente de asortatividad para el caso categórico.

Si la característica es continua, existen dos alternativas:

  • La primera consiste en discretizarla en un número determinado de clases y proceder como en el caso discreto.

  • La segunda consiste en tomar cada arista \(e=\{u,v\}\) y registrar los valores \((x_e,y_e)\), donde \(x_e\) y \(y_e\) son los valores de la característica en los extremos de la arista. A partir de estos pares, el coeficiente de asortatividad se calcula como la correlación de Pearson entre los valores observados en ambos extremos. Si \(m=|E|\) es el número de aristas, entonces \[ r_a= \frac{\frac{1}{m}\sum_{e\in E}(x_e-\bar{x})(y_e-\bar{y})} {\sigma_x\sigma_y}, \] donde \[ \bar{x}=\frac{1}{m}\sum_{e\in E} x_e, \qquad \bar{y}=\frac{1}{m}\sum_{e\in E} y_e, \] \[ \sigma_x^2=\frac{1}{m}\sum_{e\in E}(x_e-\bar{x})^2, \qquad \sigma_y^2=\frac{1}{m}\sum_{e\in E}(y_e-\bar{y})^2. \]

Comúnmente, se toma el grado o la fuerza como característica de referencia.

Ver assortativity y assortativity_degree en igraph.

Ejemplo: Interacciones proteína-proteína

Red de interacción de proteínas de levadura.

Las interacciones proteína-proteína prometen revelar aspectos del sistema regulatorio que subyace a la función celular.

Los nodos corresponden a proteínas y solo se consideran aquellas interacciones que tienen una confianza “moderada” y “alta”.

Una descripción completa de los datos se puede encontrar aquí.

Disponible en el paquete igraphdata de R.

Von Mering, C., Krause, R., Snel, B., Cornell, M., Oliver, S. G., Fields, S., & Bork, P. (2002). Comparative assessment of large-scale data sets of protein–protein interactions. Nature, 417(6887), 399-403.

# librerías
suppressMessages(suppressWarnings(library(igraph)))
suppressMessages(suppressWarnings(library(igraphdata)))
# datos
data(yeast)
yeast <- upgrade_graph(yeast)
# la representación de datos internos a veces cambia entre versiones
# orden
vcount(yeast)
## [1] 2617
# tamaño
ecount(yeast)
## [1] 11855
# dirigida?
is_directed(yeast)
## [1] FALSE
# ponderada?
is_weighted(yeast)
## [1] FALSE
# clases
table(V(yeast)$Class)
## 
##   A   B   C   D   E   F   G   M   O   P   R   T   U 
##  60 109 148 261  99 200 101 295 193 256  48 249 558
sum(table(V(yeast)$Class))
## [1] 2577
# hay NAs?
table(is.na(V(yeast)$Class))
## 
## FALSE  TRUE 
##  2577    40
# clase P: desempeñan un papel en la síntesis de proteínas
v.types <- (V(yeast)$Class == "P") + 1
v.types[is.na(v.types)] <- 1
table(v.types)
## v.types
##    1    2 
## 2361  256
# asortatividad nominal
assortativity_nominal(graph = yeast, types = v.types, directed = F)
## [1] 0.5232879
# asortatividad grado
assortativity_degree(yeast)
## [1] 0.4610798

Ejemplo: Interacciones sociales

Red de interacciones sociales entre los miembros de un club de karate.

Estos datos fueron recolectados para estudiar la fragmentación que sufrió el club en dos clubes diferentes debido a una disputa entre el director y el administrador.

\(y_{i,j} = 1\) si los miembros \(i\) y \(j\) tuvieron una interacción social en el club y \(y_{i,j} = 0\) en otro caso.

Una descripción completa de los datos se puede encontrar aquí.

Disponible en el paquete igraphdata de R.

Zachary, W. W. (1977). An information flow model for conflict and fission in small groups. Journal of anthropological research, 33(4), 452-473.

# datos
data(karate)
karate <- upgrade_graph(karate)
# la representación de datos internos a veces cambia entre versiones
Y <- as.matrix(as_adjacency_matrix(graph = karate, names = F))
# orden
vcount(karate)
## [1] 34
# tamaño
ecount(karate)
## [1] 78
# dirigida?
is_directed(karate)
## [1] FALSE
# ponderada?
is_weighted(karate)
## [1] TRUE
# visualización
par(mfrow = c(1,1), mar = c(4, 3, 3, 1))
set.seed(123)
plot(karate, layout = layout_with_dh, vertex.size = 10, vertex.frame.color = "black", vertex.label.color = "black", main = "")

# clase
v.types <- V(karate)$Faction
# asortatividad nominal
assortativity_nominal(graph = karate, types = v.types, directed = F)
## [1] 0.7434211
# asortatividad grado
assortativity_degree(karate)
## [1] -0.4756131

Ejemplo: Trabajo colaborativo

Red de relaciones de trabajo colaborativo entre los miembros de una firma de abogados (SG&R).

Estos datos fueron recolectados para estudiar la cooperación entre los actores de una organización.

\(y_{i,j} = 1\) si los miembros \(i\) y \(j\) trabajaron juntos en al menos un caso y \(y_{i,j} = 0\) en otro caso.

Una descripción completa de los datos se puede encontrar aquí.

Disponible en el paquete sand de R.

Lazega, E. (2001). The collegial phenomenon: The social mechanisms of cooperation among peers in a corporate law partnership. Oxford University Press on Demand.

# install.packages("sand")
suppressMessages(suppressWarnings(library(sand)))
# datos
lazega <- graph_from_data_frame(d = elist.lazega, directed = "F", vertices = v.attr.lazega)
V(lazega)$label <- sub("V", "", V(lazega)$name)
# simple?
is_simple(lazega)
## [1] TRUE
# ponderado?
is_weighted(lazega)
## [1] FALSE
# orden
vcount(lazega)
## [1] 36
# tamaño
ecount(lazega)
## [1] 115

# asortatividad nominal
assortativity(graph = lazega, values = V(lazega)$Office)
## [1] 0.2823909
assortativity(graph = lazega, values = V(lazega)$Practice)
## [1] 0.2409241
assortativity(graph = lazega, values = V(lazega)$School)
## [1] -0.06008441
# asortatividad continua
assortativity(graph = lazega, values = V(lazega)$Years)
## [1] -0.07569942
# asortatividad grado
assortativity(graph = lazega, values = degree(lazega))
## [1] -0.1681201
assortativity_degree(graph = lazega, directed = F)
## [1] -0.1681201