Упорядочивающая матрица - сетевые графики

Я пытался сделать сетевой график, используя функцию gplot от library(sna), График будет представлять связи между различными полями. У меня есть следующие данные:

MTM <- c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1)
FI <- c(0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
MCLI <- c(0,0,1,0,0,1,1,1,0,0,0,0,1,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1)
mat1 <- data.frame(MTM,FI,MCLI)
mat1 <- as.matrix(mat1)

Где "MTM", "FI" и "MCLI" являются "интересующими полями", а каждая строка - это отдельный проект, который имеет некоторые / любые / ни одного из общих полей. Как я могу преобразовать эти данные, чтобы выглядеть так?

matx:   
       MTM   FI   MCLI
MTM     10    0   1
FI       0    1   1
MCLI    10    1   17

Я заинтересован в представлении - в сетевом графе - полей как "узлов", а соединений как "ребер". Это может быть полезно для представления наиболее "популярных" и взаимосвязанных полей. Возможно ли с этими данными?

Заранее спасибо!

РЕДАКТИРОВАТЬ: я столкнулся с этим решением, которое может быть в порядке, что я хочу:

library(igraph)
G<-graph.incidence(as.matrix(mat1),weighted=TRUE,directed=FALSE)
summary(G)
plot(G)

1 ответ

Решение

Вот один из способов сделать сетевой график из ваших данных, где каждый узел является "полем интереса". Обратите внимание, что я сделал симметричную матрицу смежности из ваших исходных данных, которая не полностью соответствует желаемому выходу матрицы.

library(igraph)

# Use matrix multiplication to create symmetrical adjacency matrix.
adj_mat = t(mat1) %*% (mat1)

# Two ways to show edge weights.
png("igraphs.png", width=10, height=5, units="in", res=200)
par(mfrow=c(1, 2))

g1 = graph.adjacency(adj_mat, mode="undirected", diag=FALSE, weighted=TRUE)
plot(g1, edge.width=E(g1)$weight, vertex.size=50)

g2 = graph.adjacency(adj_mat, mode="undirected", diag=FALSE)
plot(g2, vertex.size=50)

dev.off()

введите описание изображения здесь

Другие вопросы по тегам