Graficos Aleatorios
Graficos Aleatorios
Adrian Hinojosa
Departamento de Estatística, Universidade Federal de Minas Gerais
Sumário
Capítulo 1. Introdução 5
Capítulo 2. Introdução aos Grafos: tipos de grafos e propriedades 7
1. Tipos de grafos 8
2. Análise descritiva dos grafos 16
3. Usando R 23
3
CAPíTULO 1
Introdução
Estas notas tem por objetivo discutir os conceitos básicos de rede ou grafo aleatório
e das aplicações ao estudo das redes sociais. Modelos probabilísticos de redes aleató-
rias. Estatísticas descritivas das redes aleatórias: grau, subgrafos, conetividade, etc .
Estimadores de máxima verosimilhança e Bayesianos assim como a implementação no
software R.
Usaremos alguns algoritmos dos programas igraph, network, ergm e bergm. para
serem utilizados em alguns exemplos.
Os objetivos deste trabalho são:
• Introdução aos Grafos, tipos de grafos, propriedades.
• Análises Descritivas dos grafos.
• Modelos de grafos Aleatórios, Grafos Aleatórios Exponenciais.
• Estimadores de Máxima Verosimilhança para grafos aleatórios.
• Estimadores Bayesianos para grafos aleatórios.
• Tópicos de regressão linear e previsão. Outros Tópicos.
Estas notas estão baseadas no livro Statistical Analysis of Network Data: Methods
and Models, do Kolaczyk, Eric D., ver [7].
5
CAPíTULO 2
1. Tipos de grafos
Um grafo não dirigido é aquele em que os vértices não são ordenados, o seja, as
arestas não possuem orientação. Assim, por exemplo, se suprimimos no grafo anterior
as direciones, então obtemos:
1. TIPOS DE GRAFOS 9
Este grafo é um exemplo de um multigrafo com loops, isto é, vértices com múltiplas
arestas e arestas que conectam o mesmo vértice. A seguir vamos considerar apenas
grafos que não tem estas características. Para isso vamos definir um grafo simples
como aquele grafo que não tem loops ou arestas múltiplas, em particular vamos também
considerar nestas notas somente grafos não dirigidos.
No caso dos grafos simples com n vértices, vale que o número destes grafos é:
n
|Gn | = 2( 2 ) , pois o número de possíveis pares de vértices é n2 e o número de sub-
n
conjuntos deste conjunto de pares é 2( 2 ) ; lembre que um grafo é um subconjunto de
pares. Vamos a definir o grau d(i) de um vértice i ∈ V como o número de vértices
conectados com este vértice por médio de uma aresta que pertence ao grafo.
X
d(i) = 1.
j:(i,j)∈E
Assim no grafo da Figura 4 temos que, d(1) = 2, d(2) = 2, etc. Podemos representar
esta função por médio do seguinte 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
Observe que esta matriz A é simétrica pois o grafo G é simples, logo não é dirigido.
12 2. INTRODUÇÃO AOS GRAFOS: TIPOS DE GRAFOS E PROPRIEDADES
> 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
Figura 8. Laplaciano L
> 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 é um grafo completo, K5 , é dizer que cada vértice tem uma aresta
ligando com todos os outros vértices. Os grafos completos tem a característica de que
14 2. INTRODUÇÃO AOS GRAFOS: TIPOS DE GRAFOS E PROPRIEDADES
cada par de vértices tem uma aresta que os une. Finalmente, observe nestes exemplos
que um grafo com n vértices e k-regular não podemos ter n e k impares, um deles tem
que ser par (use a relação (1.1)).
Um caminho é um conjunto de vértices v1 , . . . , vk ∈ V tal que o conjunto de
arestas (v1 , v2 ), (v2 , v3 ), . . . , (v`−1 , v` ), (v` , v`+1 ), . . . , (vk−1 , vk ) está em E; uma ge-
odésica entre dos vértices é o caminho de menor tamanho entre eles. Um grafo é
chamado de grafo conexo o conectado se todo par de vértices do grafo pode unir-se
por um caminho. O grafo da Figura (4) é conexo:
> is.connected(G)
[1] TRUE
Mais, se removemos as arestas (1, 5) e (2, 3), obtemos um grafo desconexo:
> Espectro
[1] 0.0 0.0 0.5 1.5 1.5 1.5 2.0
Figura 14. Espectro de L
Uma árvore é um grafo que não contem ciclos será k-árvore se for k-regular. Por
exemplo:
> 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
e a distribuição do grau é:
18 2. INTRODUÇÃO AOS GRAFOS: TIPOS DE GRAFOS E PROPRIEDADES
como podemos observar existem 2 vértices com grau 4, que é o máximo. Estos
dois vértices são os mais conectados.
Outra medida central para vértices é a centralidade por proximidade:
1
cC (v) = P , v∈V (2.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
A Figura (21) mostra que os vértices 9 e 14 são os que estão mais próximos aos
demais vértices.
Agora, podemos considerar que um vértice é central usando a media de todos os
caminhos que usam esse vértice, a centralidade por mediação está definida como:
X σ(s, t|v)
cM (v) = , v ∈ V. (2.3)
σ(s, t)
s6=u6=v∈V
Onde σ(s, t|v) é o número de geodésicas entre sPe t que passam por v e σ(s, t) é
uma constante normalizadora definida por σ(s, t) = v σ(s, t|v).
Os valores da mediação para G1 são:
> 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
graficamente:
20 2. INTRODUÇÃO AOS GRAFOS: TIPOS DE GRAFOS E PROPRIEDADES
Aqui, observamos que os vértices 9 e 14 são os que tem um papel central maior
que os demais vértices.
Estas duas definições de centralidade podem ser estendidas para arestas e ainda
existe uma noção de centralidade usando o espectro.
3τK3 (G)
cl(G) = . (2.4)
τS2 (G)
Claramente o grafo G1 é menos agregado, pois tem más vértices e porque entre
estes vértices extras tem más 2-estrelas que não são triângulos.
K
X ∗
2
mod (V) = fk,k − fk,k (2.5)
k=1
∗
PK PK
Onde fi,j = fk,+ f+,k e fk,+ = j=1 fk,j , f+,k = i=1 fi,k . Observe que num
grafo simples, isto é, não dirigido, vale que fk,+ = f+,k . Esta seleção de f ∗ corresponde
a um grafo com o mesmo grau que o grafo original, mas com as arestas colocadas
aleatoriamente, sem levar em consideração a partição V. O problema consiste agora
em encontrar entre todas as partições V, com um número fixo K de elementos, aquela
que minimiza mod (V).
Segue um exemplo, considere o grafo G1 do exemplo da seguinte Figura (24):
22 2. INTRODUÇÃO AOS GRAFOS: TIPOS DE GRAFOS E PROPRIEDADES
3. Usando R
Nesta seção descrevemos os comandos do R que foram utilizados para representar
as figuras desta seção Observe que é necessário carregar a libraria do pacote igraph do
R para poder usar os comandos.
(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 = "grau(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:
24 2. INTRODUÇÃO AOS GRAFOS: TIPOS DE GRAFOS E PROPRIEDADES
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)
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)
θi θi (1 − θ)
Pθ (Gi) = P8 = , i = i = 1, . . . , 8, θ ∈ R+ .
k=1 θ
k θ(1 − θ7 )
5
θ (1−θ)
Assim P(G5) = θ(1−θ 7 ) . Observe que se θ < 1 então os grafos mais densos (G8
Observe que o evento {η = 2} está formado pelos grafos com dois arestas e que nosso
espaço amostral tem agora somente 3 grafos.
Poderíamos também escolher outras características η como o número de triângulos,
o grau, etc. e fixar este número.
1.1. Modelos Clássicos. Nesta seção descrevemos quatro modelos: Uniforme,
Erdös-Rényi, Conexão Preferencial e Exponencial.
1.1.1. Modelo Uniforme. Neste modelo todos los grafos tem igual probabilidade:
1
PU (Gi) = .
|Gn |
Para este modelo η é uma Variável Aleatória com função de distribuição de
probabilidade:
#{G ∈ Gn , η(G) ≤ t}
Fη,Gn (t) = ,
|Gn |
onde #{·} é a cardinalidade de um conjunto e 0 ≤ t ∈ R. Esta Variável Aleatória
consiste em que vamos à observar esta característica η para cada grafo de Gn e medimos
que tão provável é ela.
Exemplo 1.3. Considere o espaço amostral G3 dos grafos com três vértices. Neste
caso é fácil ver que:
1
PU (Gi) = , i = 1, . . . , 8
8
Por outro lado, observe que η(G) = |E(G)| = 0, 1, 2, 3 é uma variável aleatória
discreta com distribuição:
1 3
P(η = 0) = , P(η = 1) = ,
8 8
30 3. GRAFOS ALEATÓRIOS: MODELOS E INFERÊNCIA
3 1
P(η = 2) = P(η = 3) = .
8 8
Em geral, suponha que o número de vértices é fixo, |V | = n e que também
fixamos o número de arestas, |E| = m. Definimos o modelo Uniforme com m arestas,
G(n, m), como a distribuição de probabilidades que atribui igual probabilidade aos
grafos pertencentes à Gn,m = {G = (E, V ) : |V | = n, |E| = m}, isto é:
1
P(G) = N
, G ∈ Gn,m ,
m
n
Observe que o número de arestas neste modelo é aleatório, em media é E|E| =
2 p. Assim na figura (4) o número médio de arestas é:
Ep=0.3 |E| = 13.5, Ep=0.5 |E| = 22.5 e Ep=0.7 |E| = 31.5
1.1.3. Modelo Conexão Preferencial. Esta família de modelos é uma das mais im-
portantes na literatura de modelos de redes, pois representa de maneira aproximada o
comportamento de redes como a internet. Este é um modelo dinâmico, no sentido de
que o número de vértices não é fixo, neste modelo vamos dinamicamente adicionando
arestas e vértices com um mecanismo que descreveremos a continuação.
Uma das propriedades importantes deste modelo é que a distribuição do grau ‘decai’
como uma lei de potencias, (lembre que nossos grafos são aleatórios logo o grau dos
vértices de cada grafo não é fixo), isto é, se d(vk ) é o grau do k-essimo vértice, quando
os graus estão ordenados em forma crescente, então:
1
d(vk ) ≈ α .
k
Este fenômeno é chamado de escala libre (scale-free), e significa que com probabi-
lidade pequena, não nula, existem vértices com um grau muito grande, isto é, vértices
32 3. GRAFOS ALEATÓRIOS: MODELOS E INFERÊNCIA
que estão conectados com uma grande quantidade de outros vértices. Este fenômeno
é conhecido como ‘mundo pequeno’ (small-world), pois significa que usando caminhos
pequenos é possível conectar a todos os vértices. Em estúdios empíricos, tem-os en-
contrado que o tamanho desses caminhos é 6, como consequência nas redes sociais
necessitamos apenas 6 pessoas para conectarnos com qualquer outra pessoa.
A seguir veremos um modelo de grafos que possuiem estas características, é o
modelo de ‘Barabási–Albert’, ou modelo BA. A ideia é criar vértices que estejam co-
nectados aos vértices com grau maior:
d(j)
P((in , j) ∈ V (Gn+1 )) = P , j ∈ V (Gn ).
k∈V (Gn ) d(k)
Pk
θi ·ηi (G)
e i=1
PΘ (G) = , G ∈ Gn ,
Z(Θ)
onde Θ = (θ1 , . . . , θk ) são os parâmetros e Z(Θ) é uma constante normalizadora
chamada função de partição:
X Pk
θi ·ηi (G)
Z(Θ) = e i=1 .
G∈Gn
eθ·|E(G)|
PΘ (G) = , G ∈ Gn .
Z(θ)
34 3. GRAFOS ALEATÓRIOS: MODELOS E INFERÊNCIA
Observe que η(g) = |E(G)|. Neste caso, é fácil achar o valor da constante norma-
lizadora: Z(θ) = (1 + eθ )n . Assim, temos que a probabilidade de ter uma aresta é
eθ
p = 1+e θ.
> transitivity(G1)
[1] 0.2
> transitivity(G2)
[1] 0.9060403
X Pk
θi ·ηi (G)
Z(Θ) = e i=1 .
G∈Gn
2
A soma tem 2n termos. Por isto existem algoritmos aproximados para encontrar
Z(Θ), vamos a explicar brevemente em que consiste um deles.
Neste algoritmo usamos a Lei de los grandes números para encontrar Z(Θ), usando
o fato de que podemos simular com facilidade grafos de Erdös-Rényi, com p = 0, 5,
estes grafos correspondem à Θ0 = (0, . . . , 0).
36 3. GRAFOS ALEATÓRIOS: MODELOS E INFERÊNCIA
Como o modelo pertence à família exponencial, então, o EMV θ̂ satisfaz a relação (2.6),
Eθ̂ η(X) = η(Go ).
O programa ergm do R implementa esta solução. Veja o seguinte exemplo.
==========================
Summary of model fit
==========================
Iterations: 2 out of 20
O valor do EMV é θ̂ = (0.0197, 0.3822). A estimação não foi boa (p-valor para θ1
é 0.994, muito alto, e p-valor para θ2 é 0.334, baixo, mais não aceitável, pois aceitamos
valores menores que 0.025), isto era esperado pois, estamos utilizando uma aproximação
bastante regular para a verosimilhança. Podemos ver que utilizando técnicas Bayesianas
podemos melhorar o resultado.
Avaliamos a estimação usando a distribuição de outras características: grau, arestas
comuns e geodésicas de um conjunto de grafos simulados com os parâmetros estimados.
gofG2 <- gof(theta_est)
par(mfrow=c(1,3))
par(oma=c(0.5,2,1,0.5))
plot(gofG2)
o resultado é dado por:
onde c é uma constante. Existem dois métodos para encontrar uma expressão para a
a posteriori. O primeiro consiste em encontrar uma distribuição que tenha a mesma
expressão que a posteriori, neste caso dizemos que ambas, a priori e a posteriori são
conjugadas, o que em general não ocorre.
O segundo método, mais general, consiste em encontrar um mecanismo que nos
permite simular m observações da posteriori: θ1 , . . . , θm , θi ∼ π(θ|X ). Dependendo
˜
do mecanismo de simulação (usualmente simulamos um processo estocástico) vale que:
m
1 X
π(θ|X ) ≈ Fm (θ|X ) := δθ (θ),
˜ ˜ m i=1 i
isto é, que a cadeia modificada, com probabilidade de transição k(θ0 |θ), é ‘reversível’
para π(θ|X ). Então, temos necessariamente que π(θ|X ) é a única distribuição estaci-
˜ ˜
onaria para k(θ0 |θ). Esta é uma propriedade das cadeias de Markov muito utilizada na
simulação de processos.
Usando as ideias anteriores o algoritmo de Metropolis-Hastings, que nos permite
simular os θ’s necessários para encontrar a distribuição empírica Fm (·), resume-se aos
seguintes passos:
Passo 1 Simulamos θ0 da distribuição a priori π(θ),
Passo 2 Supondo que tenhamos simulado θn , simulamos um candidato θ∗ usando
q(θ, θn ).
Passo 3 Avaliamos:
bergm.output(theta_post)
e os resultados são:
Overall posterior density estimate:
theta1 (edges) theta2 (triangle)
Post. mean 3.377747 -0.02407964
Post. sd 5.224419 0.73015466
4. Usando R
Neste capitulo utilizamos os programas do R: igraph, intergraph, network, ergm e
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)
4. USANDO R 43
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)
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 e 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 e 8:
44 3. GRAFOS ALEATÓRIOS: MODELOS E INFERÊNCIA
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),
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=’grau(G1)’,
xlim = c(0,10),ylim = c(0,7))
hist(degree(g2),main=’’, xlab=’grau(G2)’,
xlim = c(0,10),ylim = c(0,7))
CAPíTULO 4
1.1. Regressão Linear. No caso mais simples, não aleatório, temos um conjunto
de pontos (x1 , y1 ), . . . , (xn , yn ) no plano e queremos encontrar uma reta Y = α̂ + β̂X
cujos pontos minimizam a distância ao conjunto de pontos observados. α̂ é chamado
o interceptor e β̂ a inclinação.
Encontrar (α̂, β̂) corresponde a resolver o problema de minimização:
Para verificar que tanto coincidem os valores dos vértices vamos a contar as coin-
cidências em cada vértice:
Observe que valores próximos a 1 (cor amarelo) tem uma frequência alta de coinci-
dência, isto é, poucos dos vértices que tem valor perto de zero são amarelos em ppi.CC.
(o mesmo acontece para (ICSC)i = 0 em ppi.CC). Vejamos qual a porcentagem de
mal classificados:
#### %de error: não 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
P
eα+β j∈Ni xj
Pα,β (Xi = 1|XNi = xNi ) = P .
1 + eα+β j∈Ni xj
A porcentagem de não coincidências neste caso é de 20%, que é mais baixa que
do modelo de vizinhos próximos.
1. MODELOS DE REGRESSÃO OU PREVISÃO PARA GRAFOS 51
Exemplo 1.3. Vamos usar a regressão local para predizer os valores de ICSC no
grafo ppi.CC . Primeiro, vejamos a distribuição dos f (γi ):
2. Outros Tópicos
Entre inúmeros tópicos sobre aplicações em grafos aleatórios podemos mencionar
a análise de fenômenos como os grafos de escala-libre, como é o comportamento dos
diferentes modelos de previsão, nos exemplos só temos considerado grafos finitos e
relativamente pequenos, embora que é conhecido que a medida que os grafos aumentam
de tamanho, fenômenos tais como: degeneração, transição de fase o criticalidade são
relevantes, isto é, algumas das características mudam completamente.
Um dos tópicos que discutiremos é o efeito do uso de um grafo aleatório na disper-
são de alguma doença. A continuação discutimos o modelo de infeção SIR. A seguir
vamos usar o exemplo e os códigos de R do libro de [7] para este modelo.
Para construir o processo, que descreve a evolução no gráfico, considere uma po-
pulação de N + 1 indivíduos, e digamos que em qualquer instante essa população
decompõe-se em três tipos: Susceptíveis (S), Infectados (I) e Recuperados (R), assim
teríamos que: N + 1 = NS (t) + NI (t) + NR (t), onde NS (t) (resp.NI (t) NR (t)) é o
número de Susceptíveis (resp. Infectados, Recuperados) no instante t.
No instante inicial NI (0) = 1 e NS (0) = N , a evolução subsequente é governada
por uma cadeia de Markov à tempo contínuo, isto é, por um processo estocástico que
tem mudanças somente em certos tempos aleatórios, as mudanças estão governados
2. OUTROS TÓPICOS 55
3. Usando R
Utilizamos neste capitulo os programas do R: sand, ngspatial, kernlab e sir.
(1) Figura 1:
###datos
set.seed(42)
library(sand)
data(ppi.CC)
3. USANDO R 57
ppi.CC<-upgrade_graph(ppi.CC)
summary(ppi.CC)
### 10 primeros vertices
V(ppi.CC)$ICSC[1:10]
###visualizacion
V(ppi.CC)[ICSC == 1]$color <- "yellow"
V(ppi.CC)[ICSC == 0]$color <- "blue"
graphics.off()
plot(ppi.CC, vertex.size=5, vertex.label=NA)
(2) Figura 2:
####vizinhos proximos
clu <- clusters(ppi.CC)
ppi.CC.gc <- induced.subgraph(ppi.CC,
clu$membership==which.max(clu$csize))
nn.ave <- sapply(V(ppi.CC.gc),
function(x) mean(V(ppi.CC.gc)[nei(x)]$ICSC))
class(nn.ave)
###grafo predecido
nn<-ppi.CC.gc
nn$ICSC<-nn.ave
V(nn)[ICSC == 1]$color <- "yellow"
V(nn)[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(nn, vertex.size=5, vertex.label=NA, xlab="Grafo ppi.CC.nn ")
(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 com ICSC",
main="Vertices com ICSC")
hist(nn.ave[V(ppi.CC.gc)$ICSC == 0], col="blue",
ylim=c(0, 30), xlab="Proporcion de Vecinos com 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 com ICSC",
main="Vertices com ICSC")
hist(mrf1.pred[V(ppi.CC.gc)$ICSC == 0], col="blue",
ylim=c(0, 30), xlab="Proporcion de Vecinos com 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)
#####
3. USANDO R 59
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,
vertex.size=v2.size, vertex.label=NA, xlab=c("(n-1) mayor autovector"))
plot(ppi.CC.gc, layout=l3, vertex.color=v3.colors,
vertex.size=v3.size, vertex.label=NA, xlab=c("(n-2) mayor autovector"))
(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 com ICSC",
main="Vertices com ICSC")
hist(m1.svm.fitted[V(ppi.CC.gc)$ICSC == 0], col="blue",
ylim=c(0, 30), xlab="Proporcion de Vecinos com ICSC",
main="Vertices sin ICSC")
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",
xlab="tiempo", main="Barabasi")
plot(sim$ws, color="pink", median_color="red",
quantile_color="red",xlab="tiempo",
main="Watts-Strogatz")
Referências
[1] J. Besag. Spatial Interaction and the Statistical Analysis of Lattice Systems. Journal
of the Royal Statistical Society Series B (Methodological), 36, 1974.
[2] S. Chatterjee and P. Diaconis. Estimating and understanding exponential random
graph models. Ann. Statist., 41(5):2428–2461, 2013.
[3] R. Diestel. Graph theory. Graduate Texts in Mathematics. Springer, 3rd edition,
2006.
[4] O. Frank and D. Strauss. Markov Graphs. Journal of the American Statistical
Association, 81, 09 1986.
[5] P. W. Holland and S. Leinhardt. A Method for Detecting Structure in Sociometric
Data. American Journal of Sociology, 76, 11 1970.
[6] X. Jiang, E. D. Kolaczyk, N. Nariai, M. Steffen, and S. Kasif. Integration of
relational and hierarchical network information for protein function prediction. BMC
Bioinformatics, 9, 12 2008.
[7] E. D. Kolaczyk. Statistical Analysis of Network Data: Methods and Models. Sprin-
ger Series in Statistics. Springer, 2009.
[8] P. D. L. Saloff-Coste. What Do We Know about the Metropolis Algorithm? Journal
of Computer and System Sciences, 57, 1998.
61