繁体   English   中英

在Actor-Actor Network中查找六度分离

[英]Find six degree separation in Actor-Actor Network

我试图在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))

通过这个双向网络,我投射了actor-actor网络,并使用以下代码找到了所有节点的最短路径:

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网络中丢失了边名称。 如何分配他们?

我希望我的问题清楚合理。 提前致谢。

与所有其他节点的最短路径的节点将是具有最低farness节点,或在IGRAPH与计算出的最高接近中心closeness()?closeness()和Bavelas(1950年)和尼斯的中心地位的措施维基页面

回答以下三个子问题:

1)在图中,重量是摩擦力 ,而不是润滑剂。 有关更多详细信息,请参见我最近对相同问题的回答

2)我认为接近中心听起来更像是您要寻找的东西:“ 到所有其他节点的最小总距离 ”。 在您的情况下,特征向量中心性(我认为它具有更复杂,更不直观的公式)和接近性中心性都使您成为赢家。 相比:

eigen_centrality(lc_projected_g)$vector
closeness(lc_projected_g)

如果许多获胜者具有相同的价值,那么确定哪个节点是正确的,这实际上是您自己判断的问题。 由于多个学者的Erdős编号为1,PaulErdős使用替代公式来计算最低Erdős编号(在k共同发表的论文中占1),以将最低Erdős编号授予在共同发表论文(k)最多的人。他。 我的怀疑是,您这种隶属关系网络的复制品会生成带有“并列获胜者”的结构,这是通向所有其他节点的最短路径,并且结构也比您的图形稍大。 也许您可以重新考虑为什么要回到图的原始二分结构来表示重新投影的最中心节点呢?

3)您丢失了边名称,因为重新投影的边本质上根本不是相同的边。 很高兴他们走了。 但是,我无法用您的代码重现任何丢失的边名称。 g_graph没有为E(g)设置名称或标签。 E(lc_projected_g)列出了命名良好的边,因为顶点得到了很好的命名。 您可以随时重新建立自己的名称,例如:

E(lc_projected_g)$label <- apply(ends(lc_projected_g, E(lc_projected_g)), 1, paste,collapse="--")

只要您的顶点已经正确命名。 使用bipartite_projection()投影时,应始终带有顶点名称,但不能带有边名称。 在上面的代码中,它们确实可以-至少对我而言。 我上面的代码行使用paste()设置标签(在绘制图形时显示paste() ,以“-”将每个边的顶点对的名称粘合在一起。 ends(lc_projected_g, E(lc_projected_g))ends(lc_projected_g, E(lc_projected_g)) 它应该列出命名的顶点对作为矩阵。

一个问题但很好用的代码示例中有很多问题。 祝好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM