Я попытался найти центральный узел в сети Actor-Actor. Когда я говорил о центральном узле, я имел в виду тот узел, который имеет кратчайшие пути ко всем остальным узлам в сети.
Например:
df <- structure(list(Movie.Name = structure(c(1L, 1L, 1L, 1L, 2L, 2L,
2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L), .Label = c("A", "B", "C",
"D"), class = "factor"), Actor.Name = structure(c(1L, 5L, 6L,
7L, 8L, 5L, 9L, 1L, 10L, 11L, 8L, 12L, 2L, 3L, 4L), .Label = c("Actor1",
"Actor10", "Actor11", "Actor12", "Actor2", "Actor3", "Actor4",
"Actor5", "Actor6", "Actor7", "Actor8", "Actor9"), class = "factor")), .Names = c("Movie.Name",
"Actor.Name"), class = "data.frame", row.names = c(NA, -15L))
Из этой двухсторонней сети я спроектировал сеть актер-актер и нашел кратчайший путь для всех узлов с этим кодом:
library(igraph)
g_graph <- graph.data.frame(df,directed=FALSE)
V(g_graph)$type <- bipartite_mapping(g_graph)$type
# project only actor&actor network
projected_g <- bipartite_projection(g_graph, multiplicity = TRUE, which = TRUE)
# Get connected nodes in largest component
# get largest component
getmax = function(g) {
V(g)$comp = clusters(g)$membership
delete.vertices(g, V(g)[V(g)$comp!=which(clusters(g)$csize==max(clusters(g)$csize))])
}
lc_projected_g <- getmax(projected_g)
# Turn weights into sample value!!
E(lc_projected_g)$weight <- 1
# Find shortes path from one to all nodes
p_short <- shortest.paths(lc_projected_g)
p_df <-as.data.frame(rownames(p_short))
p_df$Total_path_length <- rowSums(p_short)
# Find eigenvector centrality!!!
projected_eig <- eigen_centrality(lc_projected_g)$vector
Мои вопросы:
В igraph вес рассматривается как стоимость или близкие отношения, поэтому правильно ли переводить вес в одно и то же значение? Даже если между Actor01 и Actor02 много ребер, длина пути будет равна единице!
После расчета кратчайшего пути для всех узлов, есть три узла, которые имеют одинаковое значение. В этом случае центральность собственного вектора - верный способ найти центральный узел?
Когда я проектировал двухстороннюю сеть, я терял имена ребер в сети Actor-Actor. Как я могу назначить их обратно?
Я надеюсь, что мои вопросы ясны и разумны.
Заранее спасибо.