Assortatividade

Assortatividade é a tendência de um nó de se conectar com outros nós de grau parecido. A assortatividade pode ser avaliada através da correlação entre graus de nós vizinhos.

Redes assortativas e disassortativas

Cálculo de assortatividade

Carregando o banco de dados

tabela <- read.csv('base_gta.csv', fileEncoding="WINDOWS-1252", 
                   sep=';', as.is=T)
tabela <- tabela[ tabela$Especie == 'Bovinos', ]
tabela$animais <- tabela$Machos + tabela$Femeas
tabela$data <- as.Date(tabela$Data, format= "%d/%m/%Y")
library(epinemo, quietly = TRUE)
banco <- CreateUniqueIds(tabela, from = 'Codigo_Propriedade_Origem' ,
                         to = 'Codigo_Propriedade_Destino')

Preparando a matriz de adjacências

Após carregar o banco de dados, prepara-se a matriz de vizinhos da rede:

library(Matrix)
matriz <- sparseMatrix(i = banco$movements$From, j=banco$movements$To,
          dims = rep(max(banco$movements$From, banco$movements$To) , 2))

Cálculo do grau

Calculamos então o grau (de vizinhos) de cada nó:

matriz_nao_direcionada <- matriz + t(matriz)
matriz_vizinhos_nao_direcionada <- ((matriz_nao_direcionada > 0) * 1)
ktotal <- rowSums(matriz_vizinhos_nao_direcionada)

Cálculo do grau médio de vizinhos

Calculamos então o grau médio de vizinhos de cada nó:

knn_medio <- colSums(ktotal * matriz_vizinhos_nao_direcionada) / ktotal

Assortatividade

Para avaliar a assortatividade, podemos fazer um gráfico que apresenta, para cada valor de grau, um boxplot contendo a distribuição do grau médio de vizinhos dos nós com aquele grau (Figura ):

boxplot(knn_medio ~ as.factor(ktotal), 
        xlab='Grau', ylab='Grau médio dos vizinhos', 
        names= as.character(sort(unique(ktotal))), 
        las=2, cex.axis=0.5)
Boxplots do grau médio de vizinhos

Boxplots do grau médio de vizinhos

Outra maneira de avaliar a assortatividade é calcular a média do grau médio de vizinhos para cada categoria de grau. Ou seja, estamos tirando a média de cada boxplot do gráfico anterior (Figura ):

knn_rede <- tapply(X = knn_medio, INDEX = ktotal, FUN = mean)
plot(knn_rede~names(knn_rede), 
     ylab='Média do grau médio de vizinhos', xlab='Grau')
Média do grau médio de vizinhos

Média do grau médio de vizinhos

A Figura é muito afetada pela presença de um outlier. O código abaixo produz um novo gráfico, sem o outlier. Ainda, é ajustada uma reta (regressão linear simples) aos pontos do gráfico, produzindo a Figura :

plot(knn_rede~names(knn_rede), 
     ylab='Média do grau médio de vizinhos', xlab='Grau', 
     xlim=c(0,100))
outliers <- as.numeric(names(knn_rede))<100
abline(lm(knn_rede[ outliers] ~ as.numeric(names(knn_rede))[ outliers] ) )
Média do grau médio de vizinhos (zoom) com reta ajustada

Média do grau médio de vizinhos (zoom) com reta ajustada