Adrian Hinojosa1
Departamento de Estadística, Universidade Federal de Minas Gerais
Capítulo 1. Introducción 5
Capítulo 2. Introducción a los Grafos: tipos de grafos y propiedades 7
1. Introducción 7
2. Tipos de grafos 8
3. Análisis Descriptiva de los Grafos 16
4. Usando R 22
Capítulo 3. Grafos Aleatorios: Modelos e Inferencia 27
1. Modelos de Grafos Aleatorios 27
2. Estimadores de Máxima Verosimilitud (ERGM) 36
3. Estimadores Bayesianos (ERGM) 39
4. Usando R 42
Capítulo 4. Modelos de Regresión para Grafos, Modelos Dinámicos 45
1. Modelos de Regresión o Previsión para Grafos 45
2. Otros Tópicos 54
3. Usando R 56
Referencias 61
3
Capítulo 1
Introducción
Estas notas tienen por objetivo discutir los conceptos básicos de red o grafo
aleatorio y de las aplicaciones al estudio de las redes sociales. Modelos Probabi-
lísticos de redes aleatorias. Estadísticas descriptivas de las redes aleatorias: grado,
subgrafos, conectividad, etc . Estimadores de máxima verosimilitud y Bayesianos
así como su implementación en el software R. Usaremos algunos algoritmos de los
programas igraph, network, ergm y bergm. para trabajar los ejemplos.
Los contenidos presentados incluyen:
1. Aula 1
Introducción a los Grafos, tipos de grafos, propiedades.
Análisis Descriptiva de los grafos.
2. Aula 2
Modelos de grafos Aleatorios, Grafos Aleatorios Exponenciales.
Estimadores de Máxima Verosimilitud para grafos aleatorios.
Estimadores Bayesianos para grafos aleatorios.
3. Aula 3
Tópicos de regresión linear y previsión. Otros Tópicos.
5
Capítulo 2
1. Introducción
Un famoso problema histórico de la matemática, que se volvió una leyenda po-
pular conocida como los siete puentes de Königsberg. Cortada por el río Prególia,
la ciudad de Königsberg (territorio de Prusia) poseía dos grandes islas que, jun-
tas, formaban un complejo que en esa época contenía siete puentes. Se discutía la
posibilidad de atravesar todos los puentes sin repetir ningún puente. En 1736, el
matemático Leonhard Euler probó de forma simple que no existía un camino que
permitiese tales condiciones. Creando el primer grafo de la historia, Euler transfor-
mó los caminos en rectas y sus intersecciones en puntos.
2. Tipos de grafos
Un grafo no dirigido es aquel en que los vértices no son ordenados, o sea, las
aristas no poseen dirección. Así por ejemplo, si suprimimos en el grafo anterior las
direcciones, entonces obtenemos:
2. TIPOS DE GRAFOS 9
n
En este caso vale que |Gn | = 2( 2 ) , pues el número de posibles pares de vértices
n
es n2 y el número de subconjuntos de este conjunto de pares es 2( 2 ) ; recuerde que
10 2. INTRODUCCIÓN A LOS GRAFOS: TIPOS DE GRAFOS Y PROPIEDADES
X
d(i) = 1
j:(i,j)∈E
Así en el grafo de la figura (4) tenemos que d(1) = 2, d(2) = 2, etc. Podemos
representar esta función por medio de un gráfico:
> A
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 0 1 1 0 0 0 0
[2,] 1 0 0 0 0 1 0
[3,] 1 0 0 0 1 0 1
[4,] 0 0 0 0 1 1 0
[5,] 0 0 1 1 0 0 1
[6,] 0 1 0 1 0 0 0
[7,] 0 0 1 0 1 0 0
> L
1 4 5 2 3 7 6
1 2 -1 -1 0 0 0 0
4 -1 2 0 0 0 -1 0
5 -1 0 3 0 -1 0 -1
2 0 0 0 2 -1 -1 0
3 0 0 -1 -1 3 0 -1
7 0 -1 0 -1 0 2 0
6 0 0 -1 0 -1 0 2
> L
1 4 5 2 3 7 6
1 1.0000000 -0.5 -0.4082483 0.0000000 0.0000000 0.0 0.0000000
4 -0.5000000 1.0 0.0000000 0.0000000 0.0000000 -0.5 0.0000000
5 -0.4082483 0.0 1.0000000 0.0000000 -0.3333333 0.0 -0.4082483
2 0.0000000 0.0 0.0000000 1.0000000 -0.4082483 -0.5 0.0000000
3 0.0000000 0.0 -0.3333333 -0.4082483 1.0000000 0.0 -0.4082483
7 0.0000000 -0.5 0.0000000 -0.5000000 0.0000000 1.0 0.0000000
6 0.0000000 0.0 -0.4082483 0.0000000 -0.4082483 0.0 1.0000000
> Espectro
[1] 0.00 0.34 0.53 1.20 1.39 1.62 1.91
Figura 10. Espectro de L
Este grafo es un grafo completo, K5 , es decir que cada vértice tiene una arista
ligando con todos los otros vértices. Los grafos completos tienen la característica de
14 2. INTRODUCCIÓN A LOS GRAFOS: TIPOS DE GRAFOS Y PROPIEDADES
que cada par de vértices tienen una arista que los une. Finalmente, observe en estos
ejemplos que un grafo con n vértices y k-regular no podemos tener n y k impares,
uno de ellos tiene que ser par (use a relación (2.1)).
Un camino es un conjunto de vértices v1 , . . . , vk ∈ V tal que el conjunto
de aristas (v1 , v2 ), (v2 , v3 ), . . . , (v`−1 , v` ), (v` , v`+1 ), . . . , (vk−1 , vk ) están en E; una
geodésica entre dos vértices es el camino de menor tamaño entre ellos. Un grafo
es llamado de grafo conexo o conectado si todo par de vértices del grafo pueden
unirse por un camino. El grafo de la figura (4) es conexo:
> is.connected(G)
[1] TRUE
pero si removemos las aristas (1, 5) y (2, 3) obtenemos un grafo disconexo:
> Espectro
[1] 0.0 0.0 0.5 1.5 1.5 1.5 2.0
Figura 14. Espectro de L
> degree(G)
6 7 1 8 9 4 10 5 12 11 13 14 15 17 18 16 2 19 3 20
3 2 2 3 4 2 1 3 2 1 1 3 2 4 2 1 1 1 0 0
como vemos hay 2 vértices con grado 4, que es el máximo. Estos dos vértices
son los mas conectados.
Otra medida central para vértices es la centralidad por cercanía:
1
cC (v) = P , v∈V (3.2)
u∈V d(v, u)
> closeness(G)
6 7 1 8 9 4 10
0.01923077 0.01612903 0.01851852 0.02325581 0.02380952 0.02000000 0.01515152
5 12 11 13 14 15 17
0.01886792 0.01538462 0.01265823 0.01492537 0.02380952 0.02173913 0.02222222
18 16
0.01351351 0.01136364
o gráficamente:
3. ANÁLISIS DESCRIPTIVA DE LOS GRAFOS 19
Vemos que los vértices 9 y 14 son los que están más próximos a los demás
vértices.
Ahora, podemos considerar que un vértice es central usando la media de todos
los caminos que usan ese vértice, la centralidad por mediación está definida
como:
X σ(s, t|v)
cM (v) = , v∈V (3.3)
σ(s, t)
s6=u6=v∈V
> betweenness(G)
6 7 1 8 9 4 10
47.0000000 26.0000000 0.3333333 23.5000000 31.5000000 0.0000000 0.0000000
5 12 11 13 14 15 17
38.0000000 14.0000000 0.0000000 0.0000000 54.3333333 50.0000000 45.3333333
18 16
14.0000000 0.0000000
o gráficamente:
20 2. INTRODUCCIÓN A LOS GRAFOS: TIPOS DE GRAFOS Y PROPIEDADES
Vemos que los vértices 9 y 14 son los que intermedian más que los demás
vértices.
estas dos nociones de centralidad son extendidas para aristas y existe una noción
de centralidad usando el espectro.
3τK3 (G)
cl(G) = (3.4)
τS2 (G)
K
X
∗ 2
mód (V) = [fk,k − fk,k ] (3.5)
k=1
∗
PK PK
Donde fi,j = fk,+ f+,k y fk,+ = j=1 fk,j , f+,k = i=1 fi,k . Observe que en
un grafo simples, esto es no dirigido, vale que fk,+ = f+,k . Esta elección de f ∗
corresponde a un grafo con el mismo grado que el grafo original pero con las aristas
colocadas aleatoriamente, sin llevar en consideración la partición V. El problema
consiste ahora en encontrar entre todas las particiones V, con un numero fijo K de
elementos, aquella que minimiza mód (V).
Veamos un ejemplo, considere el grafo G1 del último ejemplo:
22 2. INTRODUCCIÓN A LOS GRAFOS: TIPOS DE GRAFOS Y PROPIEDADES
4. Usando R
En esta sección describimos los comandos de R que fueron usados para repre-
sentar las figuras de esta sección.
4. USANDO R 23
Observe que necesita cargar la librería del paquete igraph de R para poder
usar los comandos usados abajo.
1. Figura 2:
G <- graph.formula(1-+4, 1-+5, 2-+3, 2-+7, 3-+6, 4-+1,
4-+7, 5-+6, 5-+3, 7-+7,simplify = FALSE)
plot(G,edge.color="black",layout=layout.fruchterman.reingold)
2. Figura 3:
G <- graph.formula(1-4, 1-5, 2-3, 2-7, 3-6, 4-1,
4-7, 5-6, 5-3, 7-7,simplify = FALSE)
plot(G,edge.color="black",layout=layout.fruchterman.reingold)
3. Figura 4:
G <- graph.formula(1-4, 1-5, 2-3, 2-7, 3-6, 4-1,
4-7, 5-6, 5-3)
plot(G,edge.color="black",layout=layout.fruchterman.reingold)
4. Figura 5:
G <- graph.formula(1-4, 1-5, 2-3, 2-7, 3-6, 4-1,
4-7, 5-6, 5-3)
degree(G)
plot(V(G),degree(G))
5. Figura 6:
G <- graph.formula(1-4, 1-5, 2-3, 2-7, 3-6, 4-1,
4-7, 5-6, 5-3)
degree_distribution(G)
max(degree(G))
degree_distribution(G)
plot(0:max(degree(G)),degree_distribution(G),
xlab = "grado(G)",ylab = "frecuencia")
6. Figura 7:
G <- graph.formula(1-4, 1-5, 2-3, 2-7, 3-6, 4-1,
4-7, 5-6, 5-3)
A<-as_adj(G, type = "both", attr = NULL,edges = FALSE,
names = FALSE, sparse =FALSE)
A
7. Figura 8:
G <- graph.formula(1-4, 1-5, 2-3, 2-7, 3-6, 4-1,
4-7, 5-6, 5-3)
L<-laplacian_matrix(G, normalized = FALSE, weights = NULL,
sparse = FALSE)
L
8. Figura 9:
G <- graph.formula(1-4, 1-5, 2-3, 2-7, 3-6, 4-1,
4-7, 5-6, 5-3)
L<-laplacian_matrix(G, normalized = TRUE, weights = NULL,
sparse = FALSE)
L
9. Figura 10:
G <- graph.formula(1-4, 1-5, 2-3, 2-7, 3-6, 4-1, 4-7, 5-6, 5-3)
L<-laplacian_matrix(G, normalized = TRUE, weights = NULL,
sparse = FALSE)
24 2. INTRODUCCIÓN A LOS GRAFOS: TIPOS DE GRAFOS Y PROPIEDADES
Espectro<-sort(round(eigen(L)$values,2))
Espectro
10. Figura 11:
G<-sample_k_regular(5, 2, directed = FALSE, multiple = FALSE)
plot(G)
11. Figura 12:
G<-sample_k_regular(5, 4, directed = FALSE, multiple = FALSE)
plot(G)
12. Figura 13:
G <- graph.formula(1-4, 2-7, 3-6, 4-1, 4-7, 5-6, 5-3)
plot(G,edge.color="black",layout=layout.fruchterman.reingold,
vertex.size=20,edge.arrow.size=20)
13. Figura 15:
g <- sample_bipartite(3,4, type = "gnp", p=0.5, directed = FALSE)
27
28 3. GRAFOS ALEATORIOS: MODELOS E INFERENCIA
θi θi (1 − θ)
Pθ (Gi) = P8 = , i = 1, 7, θ ∈ R+
k=1 θ
k θ(1 − θ7 )
5
Así P(G5) = θθ(1−θ
(1−θ)
7 ) . Observe que si θ < 1 entonces los grafos mas densos (G8
Observe que el evento {η = 2} esta formado por los grafos con dos aristas y que
nuestro espacio muestral tiene ahora solo 3 grafos.
Podríamos también escoger otras características η como el número de triángu-
los, el grado, etc. y fijar este número.
1.1. Modelos Clásicos. En esta sección describiremos cuatro modelos: Uni-
forme, Erdös-Rényi, Conexión Preferencial y Exponencial.
1.1.1. Modelo Uniforme. En este modelo todos los grafos tienen igual proba-
bilidad:
1
PU (Gi) =
|Gn |
Para este modelo η es una Variable Aleatoria con función de distribución de
probabilidad:
#{G ∈ Gn , η(G) ≤ t}
Fη,Gn (t) =
|Gn |
Donde #{·} es la cardinalidad de un conjunto y 0 ≤ t ∈ R. Esta Variable Aleatoria
consiste en que vamos a observar esta característica η para cada grafo de Gn y
medimos que tan probable es ella.
Ejemplo 1.3. Considere el espacio muestral G3 de los grafos con tres vértices.
En este caso es fácil ver que:
1
PU (Gi) = , i = 1, . . . , 8
8
Por otra parte observe que η(G) = |E(G)| = 0, 1, 2, 3 es una variable aleatoria
discreta con distribución:
1 3
P(η = 0) = , P(η = 1) =
8 8
30 3. GRAFOS ALEATORIOS: MODELOS E INFERENCIA
3 1
P(η = 2) = P(η = 3) =
8 8
En general, suponga que el número de vértices es fijo, |V | = n y que también
fijamos el número de aristas, |E| = m. Definimos el modelo Uniforme con m aristas,
G(n, m), como la distribución de probabilidades que asigna igual probabilidad a los
grafos pertenecientes a Gn,m = {G = (E, V ) : |V | = n, |E| = m}, esto es:
1
P(G) = N
, G ∈ Gn,m
m
Para simular grafos del modelo G(n, m) podemos usar el programa R. Un ejem-
plo, simulado, de un grafo aleatorio Uniforme con |V | = 30 y |E| = 100 fijo:
Observe
que el número de aristas en este modelo es aleatorio, en media es
E|E| = n2 p. Así en la figura (4) el número medio de aristas es:
Ep=0,3 |E| = 13,5, Ep=0,5 |E| = 22,5 y Ep=0,7 |E| = 31,5
1.1.3. Modelo Conexión Preferencial. Esta familia de modelos es una de las
más importantes en la literatura de modelos de redes, pues representa de manera
aproximada el comportamiento de redes como la internet. Este es un modelo diná-
mico, en el sentido de que el número de vértices no es fijo, en este modelo vamos
dinámicamente adicionando aristas y vértices con un mecanismo que describiremos
a seguir.
Una de las propiedades importantes de este modelo es que la distribución del
grado ‘decae’ como una ley de potencias, (recuerde que nuestros grafos son aleatorios
luego el grado de los vértices de cada grafo no es fijo), esto es, si d(vk ) es el grado
del k-esimo vértice, cuando los grados están ordenados en orden creciente, entonces:
1
d(vk ) ≈ α
k
32 3. GRAFOS ALEATORIOS: MODELOS E INFERENCIA
d(j)
P((in , j) ∈ V (Gn+1 )) = P , j ∈ V (Gn )
k∈V (Gn ) d(k)
G∈Gn
eθ·|E(G)|
PΘ (G) = , G ∈ Gn
Z(θ)
34 3. GRAFOS ALEATORIOS: MODELOS E INFERENCIA
Observe que aquí η(g) = |E(G)|. En este caso es fácil hallar el valor de la constante
normalizadora: Z(θ) = (1 + eθ )n . En este caso tenemos que la probabilidad de tener
eθ
una arista es p = 1+e θ.
y p2 = 0,73)
Usando el programa ‘ergm’ de R obtenemos los grafos G1 (θ1 = −1, θ2 = 0,3)
y G1 (θ1 = −1, θ2 = 0,3):
> transitivity(G1)
[1] 0.2
> transitivity(G2)
[1] 0.9060403
X Pk
θi ·ηi (G)
Z(Θ) = e i=1
G∈Gn
2
La suma tiene 2n términos, en computación matemática es lo que se conoce
como un problema NP. Por esto existen algoritmos aproximados para encontrar
Z(Θ), vamos a explicar brevemente en que consiste uno de ellos.
Este algoritmo usa la Ley de los grandes números para hallar Z(Θ), usando
que podemos simular con facilidad grafos de Erdös-Rényi, con p = 0,5, estos grafos
corresponden a Θ0 = (0, . . . , 0).
36 3. GRAFOS ALEATORIOS: MODELOS E INFERENCIA
==========================
Summary of model fit
==========================
Iterations: 2 out of 20
par(mfrow=c(1,3))
par(oma=c(0.5,2,1,0.5))
plot(gofG2)
el resultado es:
Figura 10. Bondad del ajuste (goodness of fit: gof) para el valor
estimado θ̂ = (0,0197, 0,3822)
Podemos observar que estas otras características del grafo G2 (la linea más
obscura de los gráficos para grado, aristas comunes y geodésicas) están dentro de
los valores esperados de las simulaciones (las lineas grises de los gráficos).
Donde c es una constante. Existen dos métodos para encontrar una expresión para
la aposteriori. El primero consiste en encontrar una distribución que tenga la misma
expresión que la aposteriori, en este caso decimos que ambas, apriori y aposteriori
son conjugadas, lo que en general no ocurre.
El segundo método, más general, consiste en encontrar un mecanismo que nos
permita simular m observaciones de la aposteriori: θ1 , . . . , θm , θi ∼ π(θ|X ). Depen-
˜
diendo del mecanismo de simulación (usualmente simulamos un proceso estocástico)
vale que:
m
1 X
π(θ|X ) ≈ Fm (θ|X ) := δθ (θ)
˜ ˜ m i=1 i
Donde δa (x) = 1 si a = x y δa (x) = 0 caso contrario. La función Fm () es lla-
mada distribución empírica. Usualmente la relación anterior es consecuencia de la
ergodicidad del proceso (esto es unicidad de la distribución estacionaria).
Un método que nos permite simular los θ’s es el método de Metropolis-Hastings,
que consiste en usar una cadena de Markov que sea fácil de simular y, digamos, que
tenga probabilidad de transición q(θ0 |θ), entonces el objetivo consiste en perturbar
esta cadena de modo tal que la nueva cadena tenga la distribución estacionaria
deseada, esto es la distribución aposteriori. Suponga que la nueva cadena tiene
probabilidad de transición k(θ0 |θ) = q(θ0 |θ)α(θ0 |θ). Si vale que:
5. Volvemos al paso 2.
Los pasos son iterados hasta que los θ’s estén ‘estacionarios’. Este algoritmo
fue llamado de ‘la revolución computacional’ por Persi Diaconis en un trabajo de
2006.
3.0.8. Estimadores Bayesianos (ERGM). Ahora consideramos un grafo ob-
servado Go que sigue el modelo ERGM con verosimilitud:
eθ·η(Go )
L(θ, Go ) = Pθ (Go ) =
Z(θ)
y distribución apriori π(θ) queremos encontrar la distribución aposteriori π(θ|Go )
usando el algoritmo de Metropolis-Hastings. Suponga que los θ’s serán generados
usando una cadena de Markov simétrica: q(θ, θ0 ) = q(θ0 , θ). Entonces, para evaluar
el α(θ0 |θ) del algoritmo tenemos que evaluar:
∗
L(θ∗ , Go )π(θ∗ ) π(θ∗ )e(θ −θn )·η(Go ) Z(θn )
=
L(θn , Go )π(θn ) π(θn ) Z(θ∗ )
Como podemos ver la dificultad de implementar esto está en evaluar Z(θn )/Z(θ∗ )
y como vimos, eso da origen a un error muy grande. Caimo et. al. en un trabajo
de 2012 modificaron este algoritmo, usando una simulación auxiliar para θ, vamos
a ver en un ejemplo este resultado.
Ejemplo 3.1. Usaremos como ejemplo el grafo G2 simulado a partir de un
ERGM con estadísticas: el número de vértices η1 (G) = |E| y η1 (G) = |triángulos(G)|
con θ = (θ1 , θ2 ) = (1, 0,3); en lugar de procurar θ̂, vamos a suponer que, ‘apriori’,
este valor es representado por una distribución, apriori, π(θ1 , θ2 ) ∼ Uniforme en
[0, 2] × [0, 1] y queremos la distribución empírica de la aposteriori π((θ1 , θ2 )|Go ).
Para eso usaremos el programa bregm de R.
library("ergm")
library("bergm")
g.sim <- simulate(network(10,,density=0.1,directed=FALSE) ~ edges + triangle,
coef=c(0, 0))
Figura 11. Distribución aposteriori y convergencia del proceso (θ1 (n), θ2 (n))
4. Usando R
Usamos en este capitulo los programas de R: igraph, intergraph, network, ergm
y bergm.
1. Figura 1:
G1 <- graph.formula(1,2,3)
G2 <- graph.formula(1--2,3)
G3 <- graph.formula(1,2--3)
G4 <- graph.formula(1--3,2)
G5 <- graph.formula(1--2--3)
G6 <- graph.formula(1--3--2)
G7 <- graph.formula(2--1--3)
G8 <- graph.formula(1--2--3,3--1)
graphics.off()
par(mfrow=c(3,3))
plot(G1, xlab=’G1’,vertex.size=55,layout=layout_in_circle)
plot(G2, xlab=’G2’,vertex.size=55,layout=layout_in_circle)
plot(G3, xlab=’G3’,vertex.size=55,layout=layout_in_circle)
plot(G4, xlab=’G4’,vertex.size=55,layout=layout_in_circle)
plot(G5, xlab=’G5’,vertex.size=55,layout=layout_in_circle)
plot(G6, xlab=’G6’,vertex.size=55,layout=layout_in_circle)
plot(G7, xlab=’G7’,vertex.size=55,layout=layout_in_circle)
4. USANDO R 43
plot(G8, xlab=’G8’,vertex.size=55,layout=layout_in_circle)
plot(5,5,type="n",axes=FALSE,ann=FALSE,xlim=c(0,10),
ylim =c(0,10))
2. Figura 2:
graphics.off()
par(mfrow=c(1,3))
plot(G5, xlab=’G5’,vertex.size=35,layout=layout_in_circle)
plot(G6, xlab=’G6’,vertex.size=35,layout=layout_in_circle)
plot(G7, xlab=’G7’,vertex.size=35,layout=layout_in_circle)
3. Figura 3:
G<-erdos.renyi.game(30, 100, type ="gnm", directed = FALSE,
loops = FALSE)
plot(G)
4. Figura 4:
G1<-erdos.renyi.game(10, 0.3, type ="gnp", directed = FALSE,
loops = FALSE,)
G2<-erdos.renyi.game(10, 0.5, type ="gnp", directed = FALSE,
loops = FALSE,)
G3<-erdos.renyi.game(10, 0.7, type ="gnp", directed = FALSE,
loops = FALSE)
graphics.off()
par(mfrow=c(1,3))
plot(G1,xlab=’G1’)
plot(G2,xlab=’G2’)
plot(G3,xlab=’G3’)
5. Figuras 5 y 6:
graphics.off()
G1 <- sample_pa(500, power=0.1,directed = FALSE)
G2 <- sample_pa(500, power=0.001,directed = FALSE)
graphics.off()
par(mfrow=c(1,2))
plot(G1,vertex.label=NA,vertex.size=3)
plot(G2,vertex.label=NA,vertex.size=3)
graphics.off()
par(mfrow=c(1,2))
par(mfrow=c(1,2))
hist(degree(G1),main=’’)
hist(degree(G2),main=’’)
6. Figuras 7 y 8:
library("ergm")
g.sim <- simulate(network(10,,density=0.1,directed=FALSE)
~ edges + triangle, coef=c(0, 0))
summary(g.sim ~ edges + triangle)
G1 <- simulate( ~ edges + triangle, coef=c(-1, 0.3),
directed=FALSE,nsim=1,basis=g.sim,seed=234,
control=control.simulate(
MCMC.burnin=10000,
MCMC.interval=100))
summary(G1 ~ edges + triangle)
G2 <- simulate( ~ edges + triangle, coef=c(1, 0.3),
44 3. GRAFOS ALEATORIOS: MODELOS E INFERENCIA
directed=FALSE,nsim=1,basis=g.sim,seed=786,
control=control.simulate(
MCMC.burnin=10000,
MCMC.interval=100))
summary(G2 ~ edges + triangle)
g1<-asIgraph(G1)
g2<-asIgraph(G2)
par(mfrow=c(1,2))
plot(g1,vertex.label=NA,vertex.size=25,xlab=’G1’)
plot(g2,vertex.label=NA,vertex.size=25,xlab=’G2’)
par(mfrow=c(1,2))
hist(degree(g1),main=’’, xlab=’grado(G1)’,
xlim = c(0,10),ylim = c(0,7))
hist(degree(g2),main=’’, xlab=’grado(G2)’,
xlim = c(0,10),ylim = c(0,7))
Capítulo 4
Veamos un ejemplo;
Para verificar que tanto coinciden vamos a contar las coincidencias en cada
vértice:
Observe que valores cercanos a 1 (amarillo) tienen una frecuencia alta de coin-
cidencia, esto es pocos de los que tiene valor cerca de cero son amarillos en ppi.CC.
(lo mismo ocurre para (ICSC)i = 0 en ppi.CC). Veamos que porcentaje de mal
clasificados existe:
#### %de error: no coincidencias
nn.pred <- as.numeric(nn.ave > 0.5)
mean(as.numeric(nn.pred != V(ppi.CC.gc)$ICSC))
[1] 0.2598425
X X
U (x) = αxi + βxi xj
i∈V (i,j)∈E
Es posible provar que en ese caso la especificación local, del Modelo Auto-
logístico, es:
P
eα+β j∈Ni xj
Pα,β (Xi = 1|XNi = xNi ) = P
1 + eα+β j∈Ni xj
Por esta propiedad es posible hacer una regresión lineal para las especificaciones
locales.
Ejemplo 1.2. Continuando con el ejemplo de las interacciones con las pro-
teínas, vamos a usar el modelo auto-logístico para predecir los valores de ICSC
en el grafo ppi.CC y luego comparar los resultados con el grafo realmente observa-
do,primero tenemos que hallar α y β, para eso usamos el programa ngspatial de
estadística espacial de R , usando el comando autologistic obtenemos:
Luego los coeficientes son α = 0,2 y β = 1,13 una comparación gráfica de los
grafos:
50 4. MODELOS DE REGRESIÓN PARA GRAFOS, MODELOS DINÁMICOS
Ejemplo 1.3. Vamos a usar esta regresión local para predecir los valores de
ICSC en el grafo ppi.CC . Primero veamos la distribución de los f (γi ):
2. Otros Tópicos
Entre innúmeros otros tópicos sobre aplicaciones en grafos aleatorios podría-
mos mencionar el análisis de fenómenos como los grafos de escala-libre, como es el
comportamiento de los diferentes modelos de previsión, en los ejemplos solo hemos
considerado grafos finitos y relativamente pequeños, sin embargo es sabido que a
medida que los grafos aumentan de tamaño fenómenos como transición de fase o
criticalidad son relevantes, esto es, algunas de las características cambian comple-
tamente.
Uno de los tópicos que discutiremos es el efecto del uso de un grafo aleatorio
en la dispersión de alguna enfermedad. Vamos a continuación a discutir el modelo
de infección SIR. En lo que sigue vamos a usar el ejemplo y los códigos de R del
libro de [3] para este modelo.
2.1. Modelos Dinámicos. Uno de los modelos patrón de la Epidemiología
es el proceso SIR, Susceptibles-Infectados-Recuperados. En este proceso ob-
servamos a lo largo del tiempo la evolución de una enfermedad, primero el número
de infectados en la población crece, para luego ir decreciendo a medida que van
quedando menos personas susceptibles de ser infectadas pues se han inmunizado
después de la recuperación, como esta descrito esquemáticamente en el siguiente
gráfico:
estocástico que tiene cambios solo en ciertos tiempos aleatorios, los cambios están
gobernados por las siguientes probabilidades de transición:
βMi (x)δt
si xi = 0 y x0i = 1
P(X(t + δt) = x0 |X(t) = x) = γδt si xi = 1 y x0i = 2 (2.10)
1 − [βMi (x) + γ]δt si xi = 2 y x0i = 2
3. Usando R
Usamos en este capitulo los programas de R: sand, ngspatial, kernlab y sir.
1. Figura 1:
###datos
set.seed(42)
library(sand)
data(ppi.CC)
ppi.CC<-upgrade_graph(ppi.CC)
summary(ppi.CC)
### 10 primeros vertices
V(ppi.CC)$ICSC[1:10]
###visualizacion
3. USANDO R 57
3. Figura 3:
#### porcentage de coincidencias
par(mfrow=c(2,1))
hist(nn.ave[V(ppi.CC.gc)$ICSC == 1], col="yellow",
ylim=c(0, 30), xlab="Proporcion de Vecinos con ICSC",
main="Vertices con ICSC")
hist(nn.ave[V(ppi.CC.gc)$ICSC == 0], col="blue",
ylim=c(0, 30), xlab="Proporcion de Vecinos con ICSC",
main="Vertices sin ICSC")
4. Figura 4:
##### campos markovianos
set.seed(42)
library(sand)
data(ppi.CC)
#### grafo G aqui corresponde a ppi.CC
ppi.CC<-upgrade_graph(ppi.CC)
V(ppi.CC)[ICSC == 1]$color <- "yellow"
V(ppi.CC)[ICSC == 0]$color <- "blue"
library(ngspatial)
#####prediccion
mrf1.pred <- as.numeric((m1.mrf$fitted.values > 0.5))
####comparacion
mrf1<-ppi.CC.gc
mrf1$ICSC<-mrf1.pred
V(mrf1)[ICSC == 1]$color <- "yellow"
V(mrf1)[ICSC == 0]$color <- "blue"
graphics.off()
par(mfrow=c(1,2))
plot(ppi.CC, vertex.size=5, vertex.label=NA,xlab="Grafo ppi.CC ")
plot(mrf1, vertex.size=5, vertex.label=NA, xlab="Grafo mrf1 ")
5. Figura 5:
par(mfrow=c(2,1))
hist(mrf1.pred[V(ppi.CC.gc)$ICSC == 1], col="yellow",
ylim=c(0, 30), xlab="Proporcion de Vecinos con ICSC",
main="Vertices con ICSC")
hist(mrf1.pred[V(ppi.CC.gc)$ICSC == 0], col="blue",
ylim=c(0, 30), xlab="Proporcion de Vecinos con ICSC",
main="Vertices sin ICSC")
6. Figura 6:
###### autovectores mayores
e.vec1 <- e.L$vectors[, (nv-1)]
v1.colors <- character(nv)
v1.colors[e.vec1 >= 0] <- "red"
v1.colors[e.vec1 < 0] <- "blue"
v1.size <- 15 * sqrt(abs(e.vec1))
l1 <- layout.fruchterman.reingold(ppi.CC.gc)
#####
e.vec2 <- e.L$vectors[, (nv-2)]
v2.colors <- character(nv)
v2.colors[e.vec2 >= 0] <- "red"
v2.colors[e.vec2 < 0] <- "blue"
v2.size <- 15 * sqrt(abs(e.vec2))
l2 <- layout.fruchterman.reingold(ppi.CC.gc)
plot(ppi.CC.gc, layout=l2, vertex.color=v2.colors,
vertex.size=v2.size, vertex.label=NA, xlab=c("(n-1) mayor autovector"))
#####
e.vec3 <- e.L$vectors[, (nv-3)]
v3.colors <- character(nv)
v3.colors[e.vec3 >= 0] <- "red"
v3.colors[e.vec3 < 0] <- "blue"
v3.size <- 15 * sqrt(abs(e.vec3))
l3 <- layout.fruchterman.reingold(ppi.CC.gc)
#####
graphics.off()
par(mfrow=c(1,3))
plot(ppi.CC.gc, layout=l1, vertex.color=v1.colors,
vertex.size=v1.size, vertex.label=NA, xlab=c("(n) mayor autovector"))
plot(ppi.CC.gc, layout=l2, vertex.color=v2.colors,
3. USANDO R 59
7. Figura 7:
library(kernlab)
K1.tmp <- e.L$vectors %*% diag(f.e.vals) %*%
t(e.L$vectors)
K1 <- as.kernelMatrix(K1.tmp)
m1.svm <- ksvm(K1, X, type="C-svc")
m1.svm.fitted <- fitted(m1.svm)
####comparación
knl<-ppi.CC.gc
knl$ICSC<-m1.svm.fitted
V(knl)[ICSC == 1]$color <- "yellow"
V(knl)[ICSC == 0]$color <- "blue"
graphics.off()
par(mfrow=c(1,2))
plot(ppi.CC, vertex.size=5, vertex.label=NA,xlab="Grafo ppi.CC ")
plot(knl, vertex.size=5, vertex.label=NA, xlab="Grafo knl ")
8. Figura 8:
par(mfrow=c(2,1))
hist(m1.svm.fitted[V(ppi.CC.gc)$ICSC == 1], col="yellow",
ylim=c(0, 30), xlab="Proporcion de Vecinos con ICSC",
main="Vertices con ICSC")
hist(m1.svm.fitted[V(ppi.CC.gc)$ICSC == 0], col="blue",
ylim=c(0, 30), xlab="Proporcion de Vecinos con ICSC",
main="Vertices sin ICSC")
9. Figura 11:
#########modelo SIR con grafos
####simulacion de grafos
library(sir)
gl <-list()
gl$ba<- barabasi.game(250, m=5, directed=FALSE)
gl$er<- erdos.renyi.game(250, 1250, type=c("gnm"))
gl$ws<- watts.strogatz.game(1, 100, 12, 0.01)
######tasas de infeccion y recuperacion
beta <- 0.5
gamma <- 1
#### numero de simulaciones
ntrials <- 100
######simulacion de SIR
sim <- lapply(gl, sir, beta=beta, gamma=gamma,
no.sim=ntrials)
#####porcentajes de infectados
graphics.off()
par(mfrow=c(3,1))
plot(sim$er, xlab="tiempo", main="Erdos")
plot(sim$ba, color="palegoldenrod",
median_color="gold", quantile_color="gold",
60 4. MODELOS DE REGRESIÓN PARA GRAFOS, MODELOS DINÁMICOS
xlab="tiempo", main="Barabasi")
plot(sim$ws, color="pink", median_color="red",
quantile_color="red",xlab="tiempo",
main="Watts-Strogatz")
Referencias
61