Как получить с высоты птичьего полета двоичную матрицу / матрицу смежности 1000 на 1000 через? - PullRequest
0 голосов
/ 21 мая 2018

У меня в настоящее время есть матрица смежности 1000x1000.Я пытаюсь увидеть, есть ли «кластеры» в данных в целом.Например, если бы я гипотетически распечатал его на листе бумаги с достаточно маленькими 0 и 1, то мы могли бы увидеть шаблон, где бы собирались 1.

Мне интересно, есть ли способсделать это в R, либо сжав всю матрицу в достаточно маленькую сетку для чтения, либо с помощью некоторого метода визуализации, такого как тепловая карта.Я настороженно отношусь к тепловой карте, поскольку кажется, что она использует меру сходства для вычисления вещей.Вместо этого я хочу просто посмотреть с высоты птичьего полета , где могут сгруппироваться 0 и 1.

Имеющиеся у меня данные, по сути, представляют собой матрицу смежности, созданную igraph в R с помощью функции стохастической блочной модели sample_sbm.Он содержит 1000 узлов с 100 сообществами.Воспроизводимый пример выглядит следующим образом:

library(igraph)
pref.matrix <- matrix(rep(0.07, 100*100), ncol = 100)
diag(pref.matrix) <- rep(0.01, 100)
g <- sample_sbm(1000, pref.matrix = pref.matrix, block.sizes = rep(10, 100))
A <- as.matrix(as_adj(g))  # The adjacency matrix of 1000 by 1000

Мне интересно, как я могу получить визуализацию этой матрицы, чтобы я мог видеть, действительно ли 100 групп действительно сгруппированы?

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Как и в Ваш предыдущий вопрос , heatmap должен работать для этого.Я думаю, что причина того, что вы недовольны результатом, заключается в том, как вы генерируете график.Тепловая карта покажет это.

Используя матрицу А, вы можете создать тепловую карту с:

heatmap(A, Rowv=NA, Colv=NA, col=terrain.colors(16),
    labRow=FALSE, labCol=FALSE, revC=TRUE)

Heatmap01

Изображение 1000 x 1000 слишком большоечтобы увидеть больше деталей, я увеличу верхний левый угол - первые 10 групп по 10.

heatmap(A[1:100, 1:100], Rowv=NA, Colv=NA, col=terrain.colors(16),
    labRow=FALSE, labCol=FALSE, revC=TRUE)

Heatmap02

Это начинает показывать, чтопроисходит, но это не то, что я думаю, вы хотели.Но это основано на способе, которым вы сделали матрицу предпочтений.

pref.matrix <- matrix(rep(0.07, 100*100), ncol = 100)
diag(pref.matrix) <- rep(0.01, 100)

Вы начинаете со всеми записями, равными 0,07 - т.е. довольно низкая вероятность соединения между любыми группами.Затем вы изменяете диагональ и устанавливаете ее на 0,01 - немного ниже.Вы запрашиваете, что есть небольшая вероятность того, что любые две разные группы будут подключены, и очень низкий шанс того, что узел будет подключен к узлам в одной группе.Я подозреваю, что это не то, что вы хотели.Если вы берете точку в какой-то группе, вероятность быть связанной со всеми точками за пределами ее группы равна - это не должно создавать никаких кластеров.Но вероятность быть связанным внутри группы точки ниже.Там тоже нет кластеров.Я думаю, что вы хотели, чтобы точка была подключена к точке в своей группе на с большей вероятностью , чем к другой группе.

Так что, возможно, вам нужно что-то вроде этого:

pref.matrix <- matrix(rep(0.04, 100*100), ncol = 100)
diag(pref.matrix) <- rep(0.4, 100)
g2 <- sample_sbm(1000, pref.matrix = pref.matrix, block.sizes = rep(10, 100))
A2 <- as.matrix(as_adj(g2)) 

Это значительно повышает вероятность того, что точка подключится к своей группе, а не к другой группе.Вы можете видеть это в увеличенной тепловой карте.

heatmap(A2[1:100, 1:100], Rowv=NA, Colv=NA, col=terrain.colors(16),
    labRow=FALSE, labCol=FALSE, revC=TRUE)

Heatmap04

Теперь есть группы, формирующие диагональ вниз.

0 голосов
/ 21 мая 2018

Как насчет

A0 <- as_adj(g)  ## leave as sparse (dgCMatrix)
library(Matrix)
image(A0)

...?

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...