Je cherche à regrouper / fusionner des nœuds dans un graphique en utilisant le regroupement de graphiques dans «r».
Voici une variation étonnamment jouet de mon problème.
- Il existe deux "clusters"
- Il existe un "pont" reliant les clusters
Voici un réseau de candidats:
Quand je regarde la distance de connexion, le "hopcount", si vous voulez, je peux obtenir la matrice suivante:
mymatrix <- rbind(
c(1,1,2,3,3,3,2,1,1,1),
c(1,1,1,2,2,2,1,1,1,1),
c(2,1,1,1,1,1,1,1,2,2),
c(3,2,1,1,1,1,1,2,3,3),
c(3,2,1,1,1,1,1,2,3,3),
c(3,2,1,1,1,1,1,2,2,2),
c(2,1,1,1,1,1,1,1,2,2),
c(1,1,1,2,2,2,1,1,1,1),
c(1,1,2,3,3,2,2,1,1,1),
c(1,1,2,3,3,2,2,1,1,1))
Réflexions ici:
- Par chance ou en raison de la simplicité du jouet, la matrice a des patchs évidents, ce ne sera pas le cas dans la matrice (très grande). Si je randomisais la relation entre le point et la ligne, ce ne serait pas si propre.
- Je me suis peut-être trompé - donc si j'ai une faute de frappe, faites le moi savoir.
- Le nombre de sauts ici est le nombre de sauts le plus court pour connecter le point de la ligne i au point de la colonne j. Un self-hop est toujours un hop, donc la diagonale est tout entière.
Donc, dans cette matrice, une plus grande distance (sauts) a un nombre plus élevé. Si je voulais une matrice montrant la "connectivité" au lieu de la distance, alors je pourrais faire un point-inverse, où chaque cellule de la matrice est remplacée par son inverse multiplicatif.
Des questions:
Pour m'aider à trouver ma propre voie:
- Quels sont les termes pour réduire le nombre de nœuds sur un graphe en les combinant? Est-ce un regroupement, une fusion, une fusion - quels sont les mots que je devrais utiliser?
- Quelles sont les techniques éprouvées? Existe-t-il un manuel sur le sujet? Pouvez-vous indiquer des articles ou des sites Web?
- Maintenant, j'ai essayé de regarder ici en premier - c'est un excellent point de "premier contrôle". Je n'ai pas trouvé ce que je cherchais. Si je l'ai raté (ce qui n'est pas improbable), pouvez-vous m'indiquer une ou deux réponses à une question sur le sujet ici, sur CV?
Pour m'amener où je vais:
- Existe-t-il un package «R» qui regroupera correctement les nœuds sur le réseau?
- Pourriez-vous m'indiquer un exemple de code pour ce faire?
- Existe-t-il un package «R» qui présentera graphiquement le réseau réduit résultant?
- Pourriez-vous m'indiquer un exemple de code pour ce faire?
Merci d'avance.
r
clustering
data-visualization
numerics
EngrStudent
la source
la source
igraph
package R.Réponses:
Votre exemple particulier suggère de trouver des communautés au sein du réseau qui ont plus de connexions entre les nœuds de la communauté et relativement peu de bords entre les nœuds de différentes communautés. C'est différent de trouver des communautés isolées , dans lesquelles il y a des sous-graphiques qui sont complètement déconnectés.
Voici un exemple de détection de communauté dans R à l'aide du
igraph
package et d'un algorithme décrit dans Clauset et al. (2004) . Pour utiliser cet algorithme, je transforme votre "nombre de sauts" en une matrice d'adjacence binaire sans boucles auto. L'algorithme a besoin d'une matrice non dirigée, qui est cohérente avec votre diagramme manuscrit et les données que vous avez fournies (les bords sont symétriques).Je ne peux pas commenter la pertinence de réduire ces nœuds pour une analyse plus approfondie, mais une telle détection de communauté est certainement utile pour explorer le réseau. Il existe également de nombreux autres algorithmes de détection de communauté (ainsi que d'autres bibliothèques pour l'analyse de réseau dans R). Ce n'est qu'un exemple qui se produit pour produire la sortie souhaitée pour ce problème de jouet.
la source
igraph
réseau.Si vous n'êtes pas déjà connecté à un référentiel pour vos données de nœud et de connexion, vous pouvez consulter le package Rneo4j. Mais cela implique l'utilisation du neo4j (une base de données graphique, pas un SGBDR) pour stocker vos données. Je ne suis pas un expert ici, mais je pense que cette approche pourrait être particulièrement efficace si a) comme suggéré par Anony-Mousse, vous ne pouvez pas formaliser cela, ou b) le nombre de nœuds et de connexions est particulièrement important, ou c) vous enroulez jusqu'à avoir des questions supplémentaires concernant votre réseau.
la source
Pour les futurs lecteurs,
Voici un ensemble de fonctions des packages igraph et la dernière vient de MCL:
Vous pouvez trouver la documentation ici http://igraph.org/r/doc/ et ici https://cran.r-project.org/web/packages/MCL/MCL.pdf
Je trouve le walktrap particulièrement utile
la source