L’obiettivo è studiare la centralità degli attori di una rete sociale di delfini appartenenti ad una comunità che vive nel fiordo di Doubtful Sound in Nuova Zelanda. Le condizioni inusuali di questo fiordo, con acqua relativamente fredda e con uno strato di acqua dolce in superficie, hanno limitato le uscite di esemplari e l’arrivo di nuovi delfini nel gruppo, facilitando una intensa relazione sociale tra i delfini della comunità. La rete è un grafo indiretto che contiene 62 nodi delfini e 159 connessioni tra coppie di delfini. Due delfini sono associati da un arco se, nel periodo di osservazione durato dal 1994 al 2001, essi sono stati avvistati assieme più frequentemente di quanto il caso avrebbe voluto. E’ noto il sesso di quasi tutti gli esemplari.

Preliminari

Avviare R da un terminale con l’omonimo comando e, se non già fatto, installare il pacchetto:

install.packages(c("igraph", "rgl", "scales", "lsa", "ineq", "moments"))

Quindi caricare i pacchetti installati:

library(igraph)
library(rgl)
library(scales)
library(lsa)
library(ineq)
library(moments)

e leggere la rete dolphin.gml:

g = read.graph(file="dolphin.gml", format="gml")

Notate che i nodi hanno tre attributi: id (un identificatore numerico), label (il nome del delfino), e sex (il sesso, M per maschio, F per femmina, U per sconosciuto).

Visualizzazione della rete

Visualizzare il numero di nodi e il numero di archi del grafo. Calcolare la densità del grafo (numero di archi del grafo fratto numero massimo di archi del grafo). Il grafo è sparso o denso? Contare il numero di esemplari maschi e femmine e la relativa percentuale.

Visualizzare la rete con il metodo di Fruchterman e Reingold (layout.fruchterman.reingold) usando come etichette dei nodi il nome del delfino, oppure il suo identificatore numerico, oppure nessuna etichetta. Visualizzare i nodi femmina in rosa e i nodi maschi in blu. Visualizzare il sottografo delle femmine e quello dei maschi. Provare altre visualizzazioni: casuale (layout.random), circolare (layout.circle) e sferica (layout.sphere).

Visualizzare la rete in 3D con il metodo di Fruchterman e Reingold usando come etichette dei nodi il nome del delfino.

Scrivere in Shiny una applicazione che visualizza la rete dei delfini. L’utente:

  1. sceglie il layout di visualizzazione;
  2. sceglie se evidenziare con un colore i nodi dei delfini maschi, femmina, o di sesso non noto.

L’applicazione visualizza la rete in base alle scelte dell’utente.

Misure di centralità

Fare lo stesso per la centralità per autovettore. A cosa corrisponde il picco più a destra nella distribuzione della centralità? Identificare nella rete i nodi con massima centralità. Notate qualcosa di peculiare? Qual è la centralità media delle femmine e dei maschi?

Ripetere le analisi per la centralità per vicinanza. A cosa corrispondono i due picchi nella distribuzione della centralità? Identificare nella rete i delfini con massima e minima centralità. Come sono posizionati rispetto agli altri?

Ripetere le analisi per la centralità per intermediazione. Identificare nella rete il delfino con massima centralità. Come è posizionato rispetto agli altri?

Studiare la correlazione tra le centralità usando il coefficiente di correlazione di Pearson e i grafici di dispersione.

Scrivere in Shiny una applicazione che visualizza le misure di centralità calcolate sui nodi di una rete generica. L’utente:

  1. sceglie il formato e il file che contiene il grafo;
  2. sceglie una misura di centralità e gli eventuali parametri.

L’applicazione visualizza la rete con i nodi di grandezza proporzionale al rispettivo valore della misura di centralità scelta. Il nodo con massimo valore di centralità viene visualizzato in rosso.

Il paradosso degli amici

Il paradosso degli amici è il fenomeno osservato per la prima volta dal sociologo Scott L. Feld in base al quale, in media:

Ho meno amici di quanti ne hanno i miei amici.

Interpretato su una rete (sociale), formalmente il paradosso afferma che la media dei gradi dei nodi

\[\mu_1 = \frac{\sum_i k_i}{n}\]

è sempre minore o uguale alla media dei gradi dei vicini dei nodi (o media dei gradi dei nodi sugli archi):

\[\mu_2 = \frac{\sum_{i,j} a_{i,j} k_j}{\sum_i k_i}\]

Mostrare, empiricamente, che la disuguaglianza \(\mu_1 \leq \mu_2\) vale sulla rete sociale dei delfini.

Dimostrare formalmente la disuguaglianza \(\mu_1 \leq \mu_2\) e dire quando vale l’uguaglianza. Suggerimento: esprimere \(\mu_2\) in termini della media quadratica dei nodi e ricordare che la varianza di una distribuzione è la differenza tra la media quadratica e il quadrato della media della distribuzione. Spiegare intuitivamente perché vale il paradosso degli amici.

Similarità e comunità

Calcolare le misure di similarità locali basate sul coseno e sul coefficiente di correlazione di Pearson, nonché la misura di similarità globale, usando la rete sociale dei delfini. Identificare le coppie di delfini più simili rispetto alle misure calcolate. Studiare la correlazione tra le misure di similarità calcolate usando il coefficiente di correlazione e i grafici di dispersione.

Calcolare le comunità sulla rete dei delfini usando gli algoritmi leading.eigenvector.community, fastgreedy.community e edge.betweenness.community. Visualizzare le comunità nel grafo e identificare eventuali differenze tra i vari algoritmi. Calcolare le comunità usando l’algoritmo ottimo optimal.community. Calcolare la modularità delle soluzioni. Quale algoritmo approssimato fornisce la soluzione che si avvicina di più all’ottimo? Calcolare un clustering gerarchico con la funzione hclust usando il coseno come misura di similarità tra i nodi e visualizzare il relativo dendrogramma.

Scrivere in Shiny una applicazione che visualizza le comunità di una rete generica. L’utente:

  1. sceglie il formato e il file che contiene il grafo;
  2. sceglie il metodo per rivelare le comunità (tra quelli dispobibili in igraph).

L’applicazione visualizza la rete con le comunità evidenziate e la modularità della soluzione.

Struttura della rete

Verificare che la rete è connessa. Calcolare le componenti biconnesse. Calcolarne il numero e isolare la più grande. Visualizzare il grafo con i nodi della bicomponente gigante colorati in rosso. Quali nodi rimangono fuori?

Trovare il grado di separazione (distanza media tra due nodi) e il diametro (distanza massima tra due nodi) del grafo. Visualizzare il grafo con i nodi e gli archi del diametro colorati in rosso. Produrre un istogramma con le distanze tra i nodi del grafo. Come sono distribuite le distanze?

Studiare la distribuzione dei gradi dei nodi. Come si pone la media rispetto alla mediana e agli altri quartili? Calcolare l’indice di asimmetria (skewness) e di Gini della distribuzione. Studiare la concentrazione delle connessioni con la curva di Lorenz. Calcolare e visualizzare la CCDF in scala bi-logaritmica. Possiamo dire che la rete sociale dei delfini è scale-free?

Trovare il coefficiente di transitività della rete.

Calcolare l’assortatività della rete per sesso e per grado.

Scrivere in Shiny una applicazione che prova diverse strategie di rimozione di nodi da una rete al fine di determinare qual è la più efficace nello scottenntere la rete (percolazione). Le strategie di rimozione sono: casuale, per grado, per autovettore, per vicinanza, per intermediazione. L’utente:

  1. sceglie il formato e il file che contiene il grafo;
  2. sceglie una strategia di percolazione e il numero di nodi da rimuovere.

L’applicazione visualizza la rete risultante dopo aver rimosso un numero di nodi pari a quello specificato scelti in modo casuale oppure corrispondenti ai nodi più centrali rispetto alla misura scelta, evidenziando anche il numero di componenti connesse e la dimensione della componente più grande del grafo.