Réseaux bipartites

Initiation à l’analyse de réseaux, 1 au 6 juillet 2019, Nice

Introduction

Les articles sur les réseaux bipartites insistent sur la richesse, pour la compréhension du social, de ce type d’objets mathématiques et regrettent le manque d’algorithmes et métriques permettant de les analyser.

Voici trois phrases extraites de l’introduction de trois articles différents parus au cours des 10 dernières années :

« Many large real-world networks actually have a two-mode nature »

« Some real-world datasets have natural bipartite structure »

« As a new frontier of complex network, multi-mode network has been shown to better represent reality according to its heterogeneous attributes »

Deux éléments posent problème dans ces affirmations :

  1. la volonté d’analyser des réseaux « multi-mode », de tenir compte des effets de multi-appartenance et de multiplexité n’est pas une volonté nouvelle en analyse de réseaux sociaux.
  2. le réseau qu’il soit « one-mode », « two-mode », « three-mode » etc. n’est pas quelque chose que l’on trouve tel quel dans la réalité. Les « faits sociaux » n’ont pas « par nature » telle ou telle « structure mathématique » qu’il faudrait que nous expliquions.

À l’appui de cela, considérons un extrait de l’article de Narciso Pizarro «Appartenances, places et réseaux de places : La reproduction des processus sociaux et la génération d’un espace homogène pour la définition des structures sociales», paru en 2000 :

« Nous voulons souligner une caractéristique, à nos yeux, essentielle, des rapports sociaux en tant que faits à expliquer : c’est qu’ils ne sont en aucun cas des faits bruts, des données bêtement livrées en pâture aux chercheurs par une quelconque nature du social. Et donc, que toute construction ultérieure, à partir de ces données, est une construction sur une construction. »

Afin de rediscuter ces affirmations et mieux comprendre les enjeux associés à l’analyse des réseaux bipartites, faisons un petit détour historique dans le champ de l’analyse des réseaux sociaux. Ce détour permettra d’expliquer pourquoi l’analyse de réseaux bipartites est longtemps restée associée, en analyse des réseaux sociaux, à l’analyse des « réseaux d’appartenance », en anglais « membership networks » ou « affiliation networks ».

Ensuite, nous verrons quelques indicateurs et méthodes développées pour analyser des graphes bipartites avec le package R igraph. Nous verrons comment projeter des graphes bipartites en graphe unimode avec le package R tnet et les choix méthodologiques associés à cette étape de projection. Nous finirons en explorant les possibilités du package R bipartite en matière de visualisation, d’indicateurs et de partitionnement. Tout au long de cette intervention, un exemple sera traité, celui d’un réseau de liens professionnels (avoir été collègues dans une même institution) entre spécialistes de l’analyse de réseaux sociaux. Il est tiré d’un travail de Linton Freeman (1980) réalisé à partir d’une enquête assez célèbre sur l’amitié entre spécialistes de l’analyse de réseaux sociaux à la fin des années 1970.

Définition et brève histoire du graphe bipartite

Qu’appelle-t-on graphe bipartite ? Les graphes bipartites permettent de formaliser les relations existantes entre deux populations distinctes (deux ensembles distincts de sommets). On trouve parfois pour les désigner les termes de réseaux two-mode, hypernetworks, et dual networks.

Selon la nature des ensembles de sommets considérés, les sociologues anglophones distinguent les affiliations network (ex. appartenance d’individus à des associations ou des organisations) et les actors-events network (ex. participation d’individus à des événements).

L’exemple classique dans la littérature sociologique porte sur la présence de femmes à des évènements sociaux (Davis et al., 1941). Ronald Breiger s’appuie sur les données de cette étude dans un article paru en 1974 pour proposer une approche qu’il nomme membership network analysis. À partir de là, l’étude des réseaux bipartis reste associée, en sociologie, à la distinction conceptuelle entre relation d’appartenance et relation sociale.

Il s’agit d’interroger l’influence qu’exercent les appartenances et les évènements sur l’activation et la stabilité des relations sociales. Tout un ensemble de travaux se développe autour de ces questions. Ils traitent notamment de la co-présence des dirigeants à des conseils d’administration. L’objectif est d’en déduire la structure des relations sociales entre dirigeants. On parle pour qualifier cette catégorie de réseaux de corporate interlocks.

Intéressé par ces questions, le sociologue Narciso Pizarro insiste sur la nécessité d’analyser non seulement les relations entre individus obtenues à partir du réseau bipartite mais aussi le réseau des relations entre “places” occupées par ces individus, places que l’on peut déduire de leurs positions dans le réseau bipartite. Narciso Pizarro ne considère pas qu’il y ait une différence de nature entre relation d’appartenance et relation inter-individuelle. Pour lui, la relation inter-individuelle est déterminée par la position occupée par les individus dans un réseau de “places”.

Récemment, avec le développement de l’analyse de réseaux appliquée aux grandes bases de données disponibles en ligne, de nouvelles méthodes d’analyse et de nouveaux types de réseaux bipartites sont analysés. Par exemple, à partir du site internet imdb, il est aisé de générer et d’analyser le graphe de co-présence des acteurs dans des films. Les graphes de co-occurences de mots dans des livres et de participation à des forums en ligne font également partie des exemples donnés pour l’analyse de grands graphes bipartites par Mathieu Latapy et al. (2008).

Traditionnellement, les écologues sont également intéressés par l’étude des graphes bipartites. Ils s’intéressent aux relations entre plantes et polinisateurs ainsi qu’aux relations de prédation entre espèces différentes. Des packages R ont été développé spécialement pour analyser ce type de réseau, le package bipartite et le package bmotif. Le premier s’appuie en partie sur les options développées par Tore Opsahl dans le package tnet, mais il propose aussi une série de mesures adaptées aux recherches en écologie. Un moyen de visualisation est aussi proposé que nous testerons dans la partie pratique de la séance. Le second permet de détecter et d’analyser les motifs présents dans le graphe (sous-graphes).

En bibliométrie, l’analyse de réseaux a toujours occupé une place importante. Les corpus documentaires peuvent être analysés sous différents angles : liens entre mots, auteurs, affiliations, revues, disciplines etc. Souvent, l’information bibliographique est structurée de telle sorte que l’on part de la relation entre les articles d’un côté et de l’autre, les mots ou auteurs ou revues qui se rattachent à ces articles.

Caractéristiques du graphe bipartite

Mathématiquement, un graphe bipartite se définit comme un triplet G=(V1,V2,E), avec V1 et V2 des ensembles disjoints de sommets, et EV1×V2, l'ensemble des liens entre V1 et V2.

Si le graphe bipartite décrit les relations entre deux ensembles distincts, il ne prend pas en compte les relations à l’intérieur de ces deux ensembles. Par ailleurs, si les relations au sein d’un graphe bipartite sont généralement non orientées, elles peuvent par contre être valuées.

L’exemple du réseau analysé par Linton Freeman

L’originalité du graphe bipartite tiré de l’article de Linton Freeman est d’avoir été généré à partir d’un réseau one-mode selon une méthode quelque peu oubliée aujourd’hui qu’il est possible de retrouver dans l’article.

Applications sur le logiciel R

Charger les packages

library("igraph")
library("tnet")

Nous chargerons le package bipartite plus tard pour éviter un bug lié à l’incompatibilité entre le package sna, sur lequel s’appuie le package bipartite, et le package igraph.

Charger les données

#ouvrir le fichier contenant la matrice
mat<-read.csv(file="freeman_friendship.csv", header=T, sep=";")

#remplacer les cases vides par des zéros
mat<-as.matrix(mat[,2:20])

mat[is.na(mat)] = 0

#transformer la matrice en objet igraph
g<-graph_from_incidence_matrix(as.matrix(mat), directed = FALSE, multiple = FALSE, 
                            weighted = NULL, add.names = NULL)
g
## IGRAPH c86bb16 U--B 48 45 -- 
## + attr: type (v/l)
## + edges from c86bb16:
##  [1]  2--41  2--42  2--43  3--40  3--42  3--44  3--45  4--32  4--33  5--46
## [11]  6--41  8--45  9--35  9--36 10--44 11--36 11--48 12--47 13--31 13--37
## [21] 13--38 13--48 14--34 15--30 15--37 16--30 17--43 18--46 19--37 19--38
## [31] 19--39 20--31 20--32 20--35 21--37 21--38 21--40 23--47 24--39 25--33
## [41] 25--34 26--38 28--41 28--42 29--45

Paramètres

Les paramètres du graphe créé s’affichent. Ce graphe est “U–B”, U pour “Undirected” et B pour“Bipartite” ce qui veut dire que ce graphe est non dirigé et bipartite.

48 correspond au nombre de sommets et 45 au nombre de liens.

Changer les noms des sommets en fonction de leur type

#l'attribut "type" permet de différencier les deux ensembles de sommets

#numéroter les membres du réseau

V(g)[V(g)$type == 0]$name<-1:29

#numéroter les évènements

V(g)[V(g)$type == 1]$name<-paste("E",1:19, sep="" )

vertex_attr(g, "label") <- V(g)$name

Représenter le réseau bipartite

#symboliser les évènements par des carrés et les individus par des cercles

V(g)[V(g)$type == 1]$shape <- "square"
V(g)[V(g)$type == 0]$shape <- "circle"

#choisir deux gammes de couleur pour bien distinguer les deux ensembles de sommets

col <- c("steelblue", "orange")

#suppression des isolés
g1 <- delete.vertices(g, V(g)[degree(g)==0])

plot(g1,
  vertex.color = col[as.numeric(V(g1)$type)+1],
  vertex.label.cex=0.6,
  main= "Réseaux acteurs-évènements",
  sub= "Les isolés ne sont pas représentés"
  ,layout=layout.fruchterman.reingold(g1, niter=10000) #layout_as_bipartite
)

Indicateurs

#mesurer le degré de l'ensemble des sommets
V(g)$degre <- degree(g)

#degré des évènements : combien d'individus ont participé à chaque évènement ?
V(g)[V(g)$type == 1]$degre
##  [1] 2 2 2 2 2 2 2 4 4 2 2 3 3 2 2 3 2 2 2
#degré des individus : à combien d'évènements ont participé chaque individu ?
V(g)[V(g)$type == 0]$degre
##  [1] 0 3 4 2 1 1 0 1 2 1 2 1 4 1 2 1 1 1 3 3 3 0 1 1 2 1 0 2 1
#extraire la liste des composantes connexes
comp <- components(g)

#repérer l'identifiant de la composante principale

cp <- which(comp$csize %in% max(comp$csize))

#associer aux sommets du graphe, le vecteur d'appartenance à une composante 

V(g)$membership<-comp$membership

#compter le nombre d'individus dans la composante principale
vcount(induced.subgraph(g,V(g)[V(g)$type == 0 & V(g)$membership == cp]))
## [1] 21
#compter le nombre d'évènements dans la composante principale
vcount(induced.subgraph(g,V(g)[V(g)$type == 1 & V(g)$membership == cp]))
## [1] 17

Le Package tnet

Dans le cadre de sa thèse, Tore Opsahl a mis au point de nombreux indicateurs pour l’analyse des réseaux bipartites, valués, et longitudinaux. Les fonctions permettant de calculer ces indicateurs sont implémentées dans le package tnet qu’il a développé. Pour utiliser ce package, il faut transformer le graphe à analyser en une liste de liens.

#transformer le graphe en liste de liens pour appliquer les fonctions du package tnet

net<-get.edgelist(g,names=F)

# calculer la matrice des plus courts chemins entre individus

mat_pcc<-distance_tm(as.tnet(net), projection.method="sum")

La matrice obtenue donne la valeur des plus courts chemins entre les 21 individus compris dans la composante principale du graphe bipartite. De plus amples informations sont disponibles sur son site.

#trouver la longueur du plus long des plus courts chemins

max(mat_pcc[,1:21], na.rm=T)
## [1] 8.467742

Projection vers un réseau one-mode

Dans la majorité des recherches portant sur les réseaux bipartites, tant en sciences sociales qu’en écologie, l’option privilégiée consiste à transformer le réseau bipartite en réseau one-mode, plus aisé à analyser.

Dans le cas d’un réseau “individus-évènement” comme celui que l’on manipule ici, cela revient à s’intéresser uniquement aux relations entre individus, ou uniquement aux relations entre évènements. Ces relations sont déduites du réseau bipartite et il existe plusieurs moyens de les pondérer.

Dans sa thèse Tore Opsahl a réfléchi aux effets des choix de projection. Il en a retenu trois qu’il est possible d’appliquer à l’aide du package tnet. De plus amples informations sont disponibles sur son site.

Il distingue trois méthodes :

  • La méthode “binary”

Elle permet de passer d’un réseau bipartite à un réseau one-mode non valué. Dans le cas d’un réseau “individus-évènements”, cela revient à relier les individus ayant participé aux mêmes évènements sans tenir compte du nombre d’évènements partagés. - La méthode “sum”

Elle permet de passer d’un réseau bipartite à un réseau one-mode valué. Dans le cas d’un réseau “individus-évènements” non pondéré, cela revient à relier les individus ayant participé aux mêmes évènements en tenant compte du nombre d’évènements partagés. Dans le réseau que nous prenons ici pour exemple, pratiquement tous les individus n’ont qu’un seul évènement en commun. Seuls les évènements E8 et E9 ont été partagés par les mêmes individus (13, 19 et 21). Dans ce cas, les liens unissant ces trois individus prendront pour valeur 2, soit le nombre d’évènements partagés.

Le réseau bipartite de départ peut-être valué, par exemple si l’on considère un réseau entre acheteurs et produits puisqu’il est possible que les acheteurs achètent plusieurs fois le même produit. Dans ce cas là, le réseau one-mode obtenu est un réseau à liens multiples. Si deux individus A et B ont acheté le même produit mais que A l’a acheté en 4 exemplaires et B en 6 exemplaires alors, dans le réseau unipartite obtenu, le lien dirigé allant de A vers B vaudra 4 et le lien dirigé allant de B vers A vaudra 6.

  • La méthode “Newman”

Cette méthode permet de pondérer les relations en fonction du nombre de participants aux évènements. L’idée sousjacente est que la valeur du lien dyadique entre deux individus est d’autant plus forte qu’ils sont peu nombreux à avoir participé au même évènement. Si tous les individus du réseau ont participé au même évènement, l’importance des relations dyadiques que l’on peut déduire de la participation à cet évènement est plus faible.

Ce type de pondération a été proposé par M. Newman (2001) pour étudier des réseaux de collaboration entre chercheurs à partir d’un réseau bipatite de co-signature d’articles (auteurs-articles). L’idée est que l’importance du lien de collaboration entre deux auteurs varie en fonction du nombre d’auteurs ayant participé à l’écriture des articles qu’ils ont co-signés.

Ce type de pondération est volontiers utilisé par les écologues pour étudier des réseaux de type plantes-polinisateurs. Appliqué à ces réseaux, cela revient à dire que deux plantes ayant été visitées par un nombre très important d’espèces de polinisateurs partagent une moins forte relation que deux plantes ayant été visitées par un petit nombre d’espèces de polinisateurs (Padron et al., 2011).

La pondération proposée par M. Newman a été pensée afin que le degré pondéré de chaque sommet dans le réseau one-mode soit égal au nombre de sommets auquel il était relié dans le réseau two-mode.

Il existe une variante de cette pondération que j’utilise dans mon travail sur les réseaux de collaboration scientifique entre villes (Maisonobe et al., 2016). Dans cette variante, ce n’est pas le degré pondéré de chaque sommet qui permet de retrouver le nombre d’articles co-signés, mais c’est la somme de la valeur de l’ensemble des liens du réseau qui permet de retrouver le nombre total d’articles considérés pour obtenir le réseau. Cela permet d’éviter les doubles comptes lorsque l’on somme l’ensemble des relations et qu’on analyse le réseau dans sa globalité.

Plutôt que de fractionner les liens par le nombre de sommets impliqués dans l’évènement moins un (1/(Np1)), cette méthode revient à fractionner les liens par le nombre exact de sommets impliqués dans l’évènement (1/Np).

#différentes méthodes de projection

#obtenir le réseau des individus non-valué

onemode1<-projecting_tm(net, method="binary")

#obtenir le réseau des individus valué en fonction du nombre d'évènements partagés

onemode2<-projecting_tm(net, method="sum")

#obtenir le réseau des individus valué en fonction du nombre d'évènements partagés 
#et pondéré en fonction du nombre de participants à chaque évènement
#l'hypothèse sous-jacente étant que moins il y a de monde dans un évènement, 
#plus il y a de chance que les participants se soient parlés

onemode3<-projecting_tm(net, method="Newman")

Indices de centralité

  • La centralité de degré

Tore Opshal propose une fonction degré appelée degree_tm qui est adaptée aux réseaux 2-mode. Elle donne un vecteur spécifiant le degré de l’un des deux ensembles de sommets du graphe. Appliquée à notre exemple, cette mesure indique pour chaque individu le nombre d’évènements auxquels il s’est connecté et pour chaque évènement, le nombre de participants qu’ils ont accueillis. Nous l’avons déjà calculé avec le package igraph.

  • Le clustering coefficient

Calculer le clustering coefficient n’a pas de sens dans un réseau 2-mode puisque par définition, il ne peut pas y avoir de triangles dans un réseau 2-mode. Toutefois, plusieurs variantes ont été imaginées dont celle de Robins et Alexander (2004). Ces derniers ont défini un coefficient de clustering qui fait le ratio entre le nombre de 4-cycles (le plus petit cycle possible dans un réseau 2-mode) et le nombre de chemin de longueur 3. Dans le cas d’un réseau “acteur-évènement”, cela revient à mesurer la tendance pour les couples d’individus ayant participé à un évènement en commun, d’avoir participé à un second évènement en commun. Cette mesure est appelé “reinforcement” dans le package tnet.

Considérant que cette proposition s’éloignait trop du principe initial du clustering coefficient, Tore Opshal a proposé une mesure de clustering coefficient pour les réseaux 2-mode qu’il jugeait plus en adéquation avec celle du clustering coefficient pour les réseaux one-mode (nombre de triangles fermés/nombre de triangles possibles). Ce coefficient fait le ratio entre le nombre de chemin de longueur 4 fermés par des 6-cycles sur le nombre de chemins de longueur 4 possibles. Une version de ce coefficient a été imaginée pour les réseaux 2-mode valués. Cette mesure permet de mesurer la connectivité du graphe par rapport à une connectivité possible.

#différents indices de centralité

#calcul du degré des individus

degree_tm <- degree_tm(net, measure="degree")

#calcul du coefficient de reinforcement

reinforcement_tm(net)
## [1] 0.1568627
#calcul du clustering coefficient

clustering_tm(net)
## [1] 0

Le coefficient de reinforcement donne une mesure globale de connectivité du graphe bipartite. Le clustering coefficient adapté aux réseaux 2-mode est nul pour l’exemple présent car il n’y a pas de 6-cycle dans le réseau que nous analysons. - Centralités de proximité et intermédiarité

Les indicateurs de centralité de proximité (closeness) et d’intermédiarité (betweenness) proposés par Tore Opshal pour l’analyse des réseaux 2-mode sont en fait calculés à partir de projections du réseau 2-mode en réseau one-mode. Puisque cela nous ramène à un problème d’analyse de réseau one-mode, nous ne les traitons pas ici.

  • Astuce

On aura remarqué que les indices de centralité locaux s’appliquent par défaut à un seul des deux ensembles du graphe bipartite, en l’occurrence celui qui correspond aux individus. Si l’on souhaite plutôt travailler sur le second ensemble, en l’occurence celui qui correspond aux évènements, il suffira d’inverser les colonnes de la liste de liens.

net2 <- net[,2:1]

Le package bipartite

Charger le package et les données

library("bipartite")

#ouvrir le fichier contenant la matrice
mat<-read.csv(file="freeman_friendship.csv", header=T, sep=";")

#transformer en objet de type matrice
mat<-as.matrix(mat[1:29,2:20])

#renommer les colonnes (évènements)
colnames(mat)<- paste("E",1:19, sep="" )

#remplacer les cases vides par des zéros
mat[is.na(mat)] = 0

#représenter l'information
plotweb(mat)

Indicateurs

Le package bipartite dispose d’une fonction permettant d’obtenir toute une batterie d’indicateurs adaptés à l’étude des réseaux bipartites en écologie.

#mesures
networklevel(mat)
##                       connectance                     web asymmetry 
##                      9.473684e-02                     -1.363636e-01 
##                 links per species            number of compartments 
##                      1.022727e+00                      3.000000e+00 
##             compartment diversity               cluster coefficient 
##                      1.636938e+00                      8.000000e-02 
##                        nestedness                              NODF 
##                      2.895399e+01                      5.590941e+00 
##               weighted nestedness                     weighted NODF 
##                     -5.929449e-02                      0.000000e+00 
##    interaction strength asymmetry          specialisation asymmetry 
##                      0.000000e+00                      1.684896e-01 
##                   linkage density              weighted connectance 
##                      2.444444e+00                      5.555556e-02 
##                      Fisher alpha                 Shannon diversity 
##                      8.589935e+09                      3.806662e+00 
##              interaction evenness      Alatalo interaction evenness 
##                      6.176323e-01                      1.000000e+00 
##                                H2              number.of.species.HL 
##                      0.000000e+00                      1.900000e+01 
##              number.of.species.LL mean.number.of.shared.partners.HL 
##                      2.500000e+01                      1.754386e-01 
## mean.number.of.shared.partners.LL            cluster.coefficient.HL 
##                      1.166667e-01                      1.022222e-01 
##            cluster.coefficient.LL   weighted.cluster.coefficient.HL 
##                      1.228070e-01                      0.000000e+00 
##   weighted.cluster.coefficient.LL                  niche.overlap.HL 
##                      0.000000e+00                      6.812865e-02 
##                  niche.overlap.LL                   togetherness.HL 
##                      5.388889e-02                      4.358118e-02 
##                   togetherness.LL                        C.score.HL 
##                      2.977778e-02                      8.903103e-01 
##                        C.score.LL                        V.ratio.HL 
##                      9.130093e-01                      2.133333e-01 
##                        V.ratio.LL                    discrepancy.HL 
##                      5.940594e-01                      3.600000e+01 
##                    discrepancy.LL               extinction.slope.HL 
##                      3.300000e+01                      1.558035e+00 
##               extinction.slope.LL                     robustness.HL 
##                      2.316145e+00                      6.086831e-01 
##                     robustness.LL     functional.complementarity.HL 
##                      6.984789e-01                      3.402716e+01 
##     functional.complementarity.LL              partner.diversity.HL 
##                      3.431452e+01                      8.974664e-01 
##              partner.diversity.LL                     generality.HL 
##                      7.242549e-01                      2.555556e+00 
##                  vulnerability.LL 
##                      2.333333e+00

Les 18 premiers indicateurs sont des indicateurs globaux (qui concernent l’ensemble du réseau). Les indicateurs suivants portent sur chacune des deux populations du graphes. “HL”signifie “Higher level” et désigne la population en colonne, en l’occurence les évènements. “LL” signifie “Lower level” et désigne la population en ligne, en l’occurence les individus. On trouve la définition de chaque indicateur dans la documentation du package.

Une fonction du même type permet de mesurer des indicateurs portant non pas sur les sommets mais sur les liens du graphes.

#mesures
indices_link<-linklevel(mat)

Les résultats sont stockés dans des matrices.

La fonction ND permet de calculer le degré normalisé par le nombre d’éléments de chaque population.

#calculer le degré normalisé
ND(mat, normalised = T )
## $lower
##          1          2          3          4          5          6          7 
## 0.00000000 0.15789474 0.21052632 0.10526316 0.05263158 0.05263158 0.00000000 
##          8          9         10         11         12         13         14 
## 0.05263158 0.10526316 0.05263158 0.10526316 0.05263158 0.21052632 0.05263158 
##         15         16         17         18         19         20         21 
## 0.10526316 0.05263158 0.05263158 0.05263158 0.15789474 0.15789474 0.15789474 
##         22         23         24         25         26         27         28 
## 0.00000000 0.05263158 0.05263158 0.10526316 0.05263158 0.00000000 0.10526316 
##         29 
## 0.05263158 
## 
## $higher
##         E1         E2         E3         E4         E5         E6         E7 
## 0.06896552 0.06896552 0.06896552 0.06896552 0.06896552 0.06896552 0.06896552 
##         E8         E9        E10        E11        E12        E13        E14 
## 0.13793103 0.13793103 0.06896552 0.06896552 0.10344828 0.10344828 0.06896552 
##        E15        E16        E17        E18        E19 
## 0.06896552 0.10344828 0.06896552 0.06896552 0.06896552

Modélisation

La fonction mgen permet de générer un modèle nul à savoir une matrice de même taille dans laquelle les liens ont la même probabilité d’apparition que dans la matrice analysée. On peut aussi mobiliser cette méthode en utilisant la fonction nullmodel.

#modèle nul
modele_nul<-mgen(mat)

modele_nul<-nullmodel(N=5, mat, method="mgen")

Partionnement

La fonction computeModules permet de repérer des sous-groupes très connectés dans un réseau two-mode valué en utilisant la valeur de la modularité proposée par Newman. La fonction plotModuleWeb permet de visualiser le résultat de ce partitionnement.

#trouver des partitions
mod_mat<-computeModules(mat)

plotModuleWeb(mod_mat)

Pour aller plus loin

D’autres fonctionnalités du package bipartite ont été testées par Camille Brisson et Chloé Migayrou dans le cadre d’un cours d’analyse de réseaux dispensé par Laurent Beauguitte à l’ENSAI. Leur travail a donné lieu à un billet dans le carnet de recherche du GDR AR-SHS accessible au lien suivant: http://arshs.hypotheses.org/260

Exercice

Comparer la filmographie des frères Cohen et celle de Scorsese. Les pages Wikipédia de ces deux réalisateurs nous indiquent la liste des acteurs revenant régulièrement dans leurs films. Analyser la structure des réseaux de co-apparition des acteurs dans les films de ces deux réalisateurs en utilisant les packages igraph, tnet et bipartite.

Références

Breiger, R. L. (1974). The Duality of Persons and Groups. Social Forces, 53(2), 181‑190. https://doi.org/https://doi.org/10.2307/2576011

Davis, A., Gardner, B. B., & Gardner, M. R. (1941). Deep South: A Social Anthropological Study of Caste and Class. University of South Carolina Press.

Freeman, L. C. (2003). Finding groups: A Meta-Analysis of the Southern Women Data in Dynamic Social Network Modeling and Analysis (pp. 39-97). National Academies Press.

Freeman, L. C. (1980). Q-analysis and the structure of friendship networks. International Journal of Man-Machine Studies, 12(4), 367‑378. https://doi.org/10.1016/s0020-7373(80)80021-6

Latapy, M., Magnien, C., & Vecchio, N. D. (2008). Basic notions for the analysis of large two-mode networks. Social Networks, 30(1), 31‑48. https://doi.org/10.1016/j.socnet.2007.04.006

Maisonobe, M., Eckert, D., Grossetti, M., Jégou, L., & Milard, B. (2016). The world network of scientific collaborations between cities: domestic or international dynamics? Informetrics, 10, 1025‑1036. https://doi.org/https://doi.org/10.1016/j.joi.2016.06.002

Newman, M. E. J. (2001). Scientific collaboration networks. II. Shortest paths, weighted networks, and centrality. Physical Review E, 64(1). https://doi.org/10.1103/PhysRevE.64.016132

Opsahl, T. (2013). Triadic closure in two-mode networks: Redefining the global and local clustering coefficients. Social Networks, 35(2), 159‑167. https://doi.org/10.1016/j.socnet.2011.07.001

Padrón, B., Nogales, M., & Traveset, A. (2011). Alternative approaches of transforming bimodal into unimodal mutualistic networks. The usefulness of preserving weighted information. Basic and Applied Ecology, 12(8), 713‑721. https://doi.org/10.1016/j.baae.2011.09.004

Pizarro, N. (1999). Appartenances, places et réseaux de places. Sociologie et sociétés, 31(1), 143‑161. https://doi.org/10.7202/001568ar

Robins, G., & Alexander, M. (2004). Small Worlds Among Interlocking Directors: Network Structure and Distance in Bipartite Graphs. Computational & Mathematical Organization Theory, 10(1), 69‑94. https://doi.org/10.1023/B:CMOT.0000032580.12184.c0