tnet : package R pour l’analyse de réseaux valués

La plupart des packages disponibles dans R permettent l’analyse de réseaux booléens (1 s’il existe une relation entre deux sommets i et j, 0 sinon) mais, si l’on souhaite étudier des réseaux valués (l’intensité des liens est variable entre les sommets), le choix est plus restreint. tnet est un package R maintenu par Tore Opsahl permettant l’analyse de réseaux valués simples et celle de réseaux bipartis et longitudinaux non valués. Le package est bien documenté, le site de Tore Opsahl est riche (http://toreopsahl.com/tnet/), cela méritait donc un billet un peu détaillé. Précision liminaire : tnet permet l’analyse mais non la visualisation des graphes, en effet, les objets manipulés par tnet sont de simples data.frame.

Je suppose pour la suite que R et le package tnet sont installés sur vos machines (voir les billets consacrés à R sur ce blog ou la foultitude de documentation disponible en français et en ligne sur le sujet).

Format des données et importation

Plusieurs jeux de données, classiques (le fameux Davis’ Southern Women Club) ou plus récents, sont disponibles dans tnet (voir la description détaillée sur la page http://toreopsahl.com/datasets/). Qu’on souhaite s’entraîner avec ou pas, il est intéressant d’y jeter un œil pour comprendre la structure des données. Elle est on ne peut plus simple : 3 colonnes origine – destination – intensité. Les attributs des sommets seront importés dans un fichier séparé. Si le réseau one-mode est non orienté, les liens devront être entrés deux fois (i-j et j-i). Les codes des sommets doivent être numériques et commencer par 1. La fonction as.tnet(jeu-de-données) permet de contrôler que la structure des données est correcte. Enfin, pour éviter la prise en compte des sommets isolés, la fonction compress_ids les supprime avant calcul.

Les fonctions se terminant par _w permettent l’analyse des réseaux valués (weighted), celles se terminant par _tm l’analyse des graphes bipartis (two-mode) et celles terminées par _l l’étude des réseaux longitudinaux.

Analyse des graphes valués one-mode

Le principe des mesures disponibles est simple : on fait varier un paramètre entre 0 – pas de prise en compte de l’intensité des liens – et 1 – prise en compte complète de l’intensité des liens. Il n’y a pas de recette miracle pour choisir le bon seuil et tout dépend de l’étendue des intensités : plus celle-ci  est grande, plus le paramètre devra être proche de zéro. Le petit graphe ci-dessous servira d’exemple pour cette partie :

tnet1

Pour le créer directement dans R :

rm(list=ls())
 library(tnet)
g <- rbind(c(1,2,3), c(2,1,3),
           c(1,3,4), c(3,1,4),
           c(2,3,1), c(3,2,1),
           c(3,4,2), c(4,3,2),
           c(4,5,1), c(5,4,1))

En pratique, mieux vaut évidemment importer ses données…

Les principales fonctions disponibles sont les suivantes :

degree_w(g) fournit un tableau à 3 colonnes : identifiant du sommet, degré et sommes des intensités des liens adjacents. Si je contrôle sur la figure, je vois par exemple que le sommet 3 a trois liens adjacents (degré) et que la somme des valeurs de ces trois liens est bien égale à 7 (4 + 2 + 1).

node degree output
 [1,] 1    2    7
 [2,] 2    2    4
 [3,] 3    3    7
 [4,] 4    2    3
 [5,] 5    1    1

closeness_w fournit un tableau de 3 colonnes : identifiant du sommet, centralité de proximité et centralité de proximité normalisée. La centralité mesurée ne repose pas sur le nombre de liens comme c’est le cas habituellement en analyse de réseau mais sur la somme des valeurs des liens parcourus. En d’autres termes, chaque intensité est assimilée à un coût et l’objectif est de trouver les chemins entre sommets minimisant ces coûts.

clustering_local_w et clustering_w fournissent lesifyustering coefficient't de prrcal_ va clmse.e de=    strong>cl« am  strong>cl« gm  strong>cl« m e strong>cl« ma e strong>cl« b e strong>nr uns hla squo;estensité elr"liens parsquo;y t les d 2 ils/ée. Lp>

Ltyle="text-align: justify">twche yustboefficient'tde prrobal-ct l&ral_wmais, l est inrmam-3t lensaclclpe-pstrong>cl.tnet(jstrong>cl .tnet(jeu-de-données)<,ype="t e ighted fo8211;1;ermet de contrôler qu foructure des données. /p>

clsponda bm f c( cam>ifustering coefficient'tde prrobal-ct(trong>clustering cm f t l&rcam>ifustering coefficient'tde prrcal_wl(trong>clustering cmcal_w- f Les uncereopleeux vaut él="e : rsquo;y out wps doticles pa ifpriseiende prrrty=es enu chane rert imsasu(rasucereop ?)h lchxures dimme ues3t leils/ée.

An8230;

Ltyle="text-align: justify">cloupwth l)ue ihnntenduedentifian qus chrinonisxuril=onibsleauch li squo;estprcoion:.h li ns de enre 2 auchmmets s. Ayt ce unanejr lee rensa(reant anermamienté ede liesquo;estlyse des gr eaux vangitudinaux.<, 2 vonntefè : rerasumsquo;estnt r pars leant c8230;

Ltyle="text-align: justify">nr unpotene:r vopensaclifckages disvidelopp ech htiena>). oéantifckages

 /p>

Le /p>

lass="enc-i <

>iumseure-hypotheses")nrtc-nk">iums +ef="http:///f-w.fank">iumsom/shareArAy=ee pitle=tnet+%3A+package+R++pour+l%E2%80%99analyse+de+r%C3%A9seaux+valu%C3%A9s&uramp;l fttp%3A%2F%2Fgroupefmr.hypotheses.org%2F3201";&nimirue"; ti>038;for=gsrc='t="https:/f-0.andvaserom/shdvaser/ca3d92e5ed3fef82ed"933a12faab578?s=0w,038;fod=ank">038;for=g 2x'lass="e'dvasereantser0" 0riho shreght=" '" 0'idth="1'" 0'iv ctiv class="me-imout-author.coxt">Rizle> bargin-toft=":1px;} m> iclef="https:/f-oupefmr.hypotheses.org/acthor-broupefmr" title='C urent Beauguitte ip/a>p/ap/aclef="https:/f-oupefmr.hypotheses.org/acthor-broupefmr" title='C Me Opre debya ce deneauguitte" '>Me OpPe di>Foow.j Me:

v cti>v ct stay=ee p!-- #brre 201 po>