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.
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')
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))
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)
Calculamos então o grau médio de vizinhos de cada nó:
knn_medio <- colSums(ktotal * matriz_vizinhos_nao_direcionada) / ktotal
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
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
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