Я ищу, чтобы сгруппировать / объединить узлы в графе, используя кластеризацию графа в 'r'.
Вот потрясающе игрушечный вариант моей проблемы.
- Есть два "кластера"
- Существует «мост», соединяющий кластеры
Вот сеть-кандидат:
Когда я смотрю на расстояние соединения, "hopcount", если хотите, то я могу получить следующую матрицу:
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))
Мысли здесь:
- К счастью или из-за простоты игрушки, матрица имеет очевидные пятна, это не будет иметь место в (очень большой) матрице. Если бы я рандомизировал отношения между точкой и строкой, то это было бы не так чисто.
- Я мог ошибиться - так что, если у меня будет опечатка, дайте мне знать.
- Число прыжков здесь - это самое короткое число прыжков для соединения точки в строке i с точкой в столбце j. Самостоятельный прыжок - все еще прыжок, таким образом, диагональ - все.
Таким образом, в этой матрице большее расстояние (прыжки) имеет большее число. Если бы я хотел матрицу, показывающую «связность» вместо расстояния, то я мог бы сделать обратную точку, где каждая ячейка матрицы заменяется на ее мультипликативный обратный.
Вопросов:
Чтобы помочь мне найти свой путь:
- Каковы условия сокращения числа узлов на графе путем их объединения? Это кластеризация, слияние, слияние - какие слова мне следует использовать?
- Каковы проверенные методы? Есть ли учебник по теме? Можете ли вы указать на документы или веб-сайты?
- Теперь я попытался посмотреть здесь первым - это отличное место для «первой проверки». Я не нашел то, что искал. Если я пропустил это (не маловероятно), можете ли вы указать мне на ответ на один или два вопроса по теме здесь, в резюме?
Чтобы получить меня, куда я иду:
- Существует ли пакет 'R', который будет правильно кластеризовать узлы в сети?
- Не могли бы вы указать мне пример кода, чтобы сделать это?
- Есть ли пакет 'R', который графически представит полученную уменьшенную сеть?
- Не могли бы вы указать мне пример кода, чтобы сделать это?
Заранее спасибо.
r
clustering
data-visualization
numerics
EngrStudent
источник
источник
igraph
пакета R.Ответы:
Ваш конкретный пример предлагает найти сообщества в сети, которые имеют больше соединений между узлами в сообществе и относительно немного ребер между узлами в разных сообществах. Это отличается от поиска изолированных сообществ , в которых есть полностью отключенные подграфы.
Вот пример обнаружения сообщества в R с использованием
igraph
пакета и алгоритма, описанного в Clauset et al. (2004) . Чтобы использовать этот алгоритм, я превращаю ваш «счетчик прыжков» в двоичную матрицу смежности без собственных циклов. Алгоритму нужна неориентированная матрица, которая соответствует вашей рукописной диаграмме и предоставленным вами данным (ребра симметричны).Я не могу комментировать целесообразность свертывания таких узлов для дальнейшего анализа, но такое обнаружение сообщества определенно полезно для исследования сети. Существует также множество других алгоритмов обнаружения сообщества (а также других библиотек для анализа сети в R). Это только один пример, который дает желаемый результат для этой игрушечной задачи.
источник
igraph
сеть.Если вы еще не подключены к репозиторию для своего узла и данных соединения, вы можете посмотреть на пакет Rneo4j. Но это подразумевает использование neo4j (графической базы данных, а не RDBMS) для хранения ваших данных. Я не эксперт здесь, но я думаю, что этот подход может быть особенно эффективным, если а) как предложено Anony-Mousse, вы не можете формализовать это, или б) количество узлов и соединений особенно велико, или в) вы наматываете возникли дополнительные вопросы относительно вашей сети.
источник
Для будущих читателей,
Вот набор функций из пакетов igraph, и последний из MCL:
Вы можете найти документацию здесь http://igraph.org/r/doc/ и здесь https://cran.r-project.org/web/packages/MCL/MCL.pdf
Я считаю Walktrap особенно полезным
источник