require(igraph) set.seed(2) # definindo uma semente g1=erdos.renyi.game(100, 0.05, type = "gnp") #fazendo uma rede aleatoria coords <- layout_on_sphere(g1) #definindo um layout pra desenhar a rede E(g1)$color="red" #definindo cores para as arestas/links #desenhando a rede para ver: plot(g1, vertex.label= NA, edge.arrow.size=0.02,vertex.size = 2, layout=coords) plot(g1, vertex.label= NA, edge.arrow.size=0.02,vertex.size = 2) ################################################################ ######### Algumas representacoes e calculos em redes: ######### ################################################################ set.seed(2) # fazendo rede aleatoria con 20 nos e estabelecendo links com p=0.2: g=erdos.renyi.game(20, 0.2, type = "gnp") coords <- layout_on_sphere(g) plot(g, edge.arrow.size=0.02,vertex.size = 10, layout=coords) nlinks=ecount(g) #numero de links nlinks nnodes=vcount(g) #numero de nos nnodes #Representacoes: g #grafo plot(g, edge.arrow.size=0.02,vertex.size = 10) #forma de grafo matriz=as_adjacency_matrix(g, type = "both",names = TRUE, sparse=FALSE) #matriz de adjacencias matriz # representacao da matriz de adjacencia lista=as_edgelist(g,names = TRUE) #lista de arestas/interacoes lista #Calculo do grau dos nos e plot da distribuicao dos graus: graus=degree(g) #usando a funcao que conta as arestas graus graus.linhas=rowSums(matriz) #usando a soma nas linhas da matriz de adjacencias graus.linhas graus.colunas=colSums(matriz) #usando a soma nas colunas da matriz de adjacencias graus.colunas densidade.links=2*nlinks/(nnodes*(nnodes-1)) #densidade de links ou conectancia densidade.links graus.histograma <- as.data.frame(table(graus)) #fazendo tabela resumida dos graus graus.histograma[,1] <- as.numeric(graus.histograma[,1]) #transformando em dado do tipo numerico graus.histograma # vendo a tabela resumida hist(graus, xlab="Grau", ylab="Frequencia", freq=FALSE, main="DistribuiĆ§Ć£o do grau", col="coral") # desenhando o histograma menores.caminhos=shortest.paths(g, v=V(g), to=V(g)) #calculando os menores caminhos entre todos os pares de nos menores.caminhos # vendo o resumo dos remores caminhos diameter(g) # maior menor caminho plot(g) vizinhos=neighbors(g,17) #pegando os vizinhos do no 13 sub.rede=induced_subgraph(g,vizinhos) #fazendo a subrede induvida a partir desses dos nos vizinhos de 13 V(sub.rede)$label=vizinhos #dando os mesmos nomes da rede original plot(sub.rede, label=TRUE) # desenhando a subrede induzida arestas.entreviz=ecount(sub.rede) #contando links entre os vizinhos de 13 numero.viz=vcount(sub.rede) # numero de vizinhos de 13 (ou o grau do no 13) clustering=2*arestas.entreviz/(numero.viz*(numero.viz-1)) # calculando o coeficiente de agregacao clustering # coef. de agregacao transitivity(g,"local") # calculo de todos os coef de agregacao para a rede original #Giant component dados=data.frame(matrix(ncol = 2, nrow = 0)) for(p in seq(0.00001,0.001,by=0.00001)){ #variando o p de 0.00001 a 0.001 a cada 0.00001 set.seed(2) #usando uma mesma semente g=erdos.renyi.game(10000, p, type = "gnp") #fazendo a rede aleatoria com 10000 nos e com prob p giant=max(components(g)$csize) #tamanho do maior componente da rede cs=giant/10000 # fracao do tamanho do maior componente da rede dados=rbind(dados,c(p,cs)) #junto dados de p e fracao do tamanho do maior componente da rede } colnames(dados)=c("p", "size") dados plot(dados$size~dados$p, pch=16,col="coral", xlab="p", ylab="Fracao do tamanho do componente gigante")