Análise de Redes Usando R

Introdução à Análise de Redes Usando R

ARS
r
Redes Sociais
igraph
sand
Este tutorial é uma introdução à análise de redes usando R.
Author

Wellington Santos Souza

Published

Sunday, 11 February 2024

Este artigo foi reescrito em Domingo, 11 de Fevereiro de 2024.

Gráfico

Introdução

A análise de redes sociais (ARS) é uma abordagem teórico-metodológica que tem como objetivo estudar as relações sociais entre atores. A ARS tem sido amplamente utilizada em diversas áreas do conhecimento, tais como sociologia, antropologia, psicologia, administração, economia, ciência política, entre outras. A ARS tem como base teórica a teoria dos grafos, que é um ramo da matemática que estuda as relações entre os objetos de um conjunto. A teoria dos grafos é uma ferramenta poderosa para a análise de redes sociais, pois permite a representação e a análise de redes sociais de forma rigorosa e sistemática.A análise de redes sociais permite a identificação de padrões de relações sociais, tais como centralidade, coesão, densidade, entre outros.

Objetivos

O tutorial tem como objetivo apresentar os conceitos básicos da análise de redes sociais, bem como as principais ferramentas e técnicas para a análise de redes sociais usando R.

Começando

Para começar nossa analise precisamos instalar alguns pacotes, para isso vamos usar o comando install.packages para instalar os pacotes igraph e sand.

Code
if(!require(igraph)) install.packages("igraph")
if(!require(sand)) install.packages("sand")
if(!require(ggraph)) install.packages("ggraph")
if(!require(tidyverse)) install.packages("tidyverse")
if(!require(tidygraph)) install.packages("tidygraph")
if(!require(viridis)) install.packages("viridis")
if(!require(patchwork)) install.packages("patchwork")
if(!require(hrbrthemes)) install.packages("hrbrthemes")
if(!require(networkD3)) install.packages("networkD3")
if(!require(kableExtra))install.packages("kableExtra")
if(!require(summarytools))install.packages("summarytools")

Na sequência vamos carregar os pacotes que acabamos de instalar.

Code
library(igraph)
library(sand)
library(ggraph)
library(tidyverse)
library(tidygraph)
library(viridis)
library(patchwork)
library(hrbrthemes)
library(networkD3)
library(kableExtra)
library(summarytools)

Agora que já instalamos e carregamos os pacotes, vamos começar a nossa análise. Para isso precisamos de um conjunto de dados, para isso vamos usar o conjunto de dados aidsblog que está disponível no pacote sand.

Code
# help(aidsblog)

# Evitando menssagens de erro...
aidsblog <- upgrade_graph(aidsblog)

Visualizando o Grafo

Plotandoo Grafo

Code
plot(aidsblog)

Esse grafo ficou um pouco confuso, vamos tentar melhorar a visualização.

Primeiro vamos remover os labels dos vértices.

Code
plot(aidsblog, vertex.label=NA)

Ainda assim está confuso, vamos tentar melhorar a visualização.

Vamos reduzir o tamanho dos vértices e mudar o layout do grafo para Kamala Kawai

Code
plot(aidsblog, vertex.label=NA, vertex.size=5, layout=layout.kamada.kawai)

Melhrou, mas mesmo assim ainda está confuso. Vamos tentar melhorar a visualização. Agora vamos diminuir o tamanho das setas.

Code
plot(aidsblog, vertex.label=NA, vertex.size=5, layout=layout.kamada.kawai, edge.arrow.size=0.3)

Agora sim, a visualização está bem melhor.

Melhorando a visualização com o pacote ggraph

Podemos melhorar um pouco mais com o pacote ggraph.

Code
grafo <- as_tbl_graph(aidsblog)

ggraph(grafo, layout = "kk") +
  geom_edge_link(colour ="#666666") +
  geom_node_point(colour ="#69b3a2", size = 5) +
  theme_void()

Ficou legal, mas vamos melhorar essa visualização.

Code
grafo_data <- as_long_data_frame(aidsblog)
simpleNetwork(grafo_data,     
        Source = 1,                 
        Target = 2,                
        height = 880,               
        width = 1980,
        linkDistance = 100,         
        charge = -4,              
        fontSize = 5,              
        fontFamily = "serif",       
        linkColour = "#666",        
        nodeColour = "#69b3a2",     
        opacity = 0.9,              
        zoom = T                    
        )
Warning: It looks like Source/Target is not zero-indexed. This is required in
JavaScript and so your plot may not render.

Métricas de Rede

Code
data.frame(Métrica = c("Número de nós",
                       "Número de relacões",
                       "Número de componentes",
                       "Densidade",
                       "Distancia geodésica média",
                       "Diâmetro",
                       "Transitividade global",
                       "Transitividade local"
),Valor = c(round(gorder(aidsblog),1),
          round(gsize(aidsblog),1),
          round(components(aidsblog)$no,2),
          round(edge_density(aidsblog),2),
          round(mean_distance(aidsblog),2),
          round(diameter(aidsblog),2),
          round(transitivity(aidsblog, type = "global"),2),
          round(transitivity(aidsblog, type = "localaverage"),2)
)
)%>%
  kbl(caption = "Métricas da Rede") %>%
  kable_classic(full_width = T, html_font = "Cambria") 
Métricas da Rede
Métrica Valor
Número de nós 146.00
Número de relacões 187.00
Número de componentes 1.00
Densidade 0.01
Distancia geodésica média 2.89
Diâmetro 6.00
Transitividade global 0.02
Transitividade local 0.25
Code
nos <- as.data.frame(V(aidsblog))

# Centralidade de grau
nos$grau <- degree(aidsblog)

# grau de intermediação
nos$intermediacao <- betweenness(aidsblog)

# grau de proximidade
nos$proximidade <- closeness(aidsblog, normalized = TRUE)

# Excentricidade
nos$excentricidade <- eccentricity(aidsblog)

# Centralidade de autovetor
nos$autovetor <- eigen_centrality(aidsblog)$vector

# Criando tabela com métricas
(metricas_ind <- nos %>%
    select(grau, intermediacao, proximidade, excentricidade, autovetor) %>%
    descr(stats = c("min", "q1", "med", "mean", "sd", "q3", "max"), transpose = TRUE))
Descriptive Statistics  
nos  
N: 146  

                        Min     Q1   Median    Mean   Std.Dev     Q3      Max
-------------------- ------ ------ -------- ------- --------- ------ --------
           autovetor   0.00   0.03     0.07    0.09      0.12   0.11     1.00
      excentricidade   3.00   5.00     5.00    5.09      0.62   5.00     6.00
                grau   1.00   1.00     1.00    2.56      5.85   1.00    43.00
       intermediacao   0.00   0.00     0.00   10.07     51.32   0.00   423.75
         proximidade   0.23   0.29     0.44    0.53      0.31   0.78     1.00

Referências

S. Gopal, The evolving social geography of blogs. In Societies and Cities in the Age of Instant Access, ed. by H. Miller (Springer, Berlin, 2007), 139 pp. 275-294.

Back to top