首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Actor-Actor网络中的六度分离

Actor-Actor网络中的六度分离
EN

Stack Overflow用户
提问于 2019-01-18 02:25:26
回答 1查看 286关注 0票数 0

我试图在Actor-Actor网络中找到中心节点.当我说中心节点时,我的意思是网络中所有其他节点的路径最短的节点。

例如:

代码语言:javascript
复制
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))

在这个二分网络中,我投影了参与者-参与者网络,并通过以下代码为所有节点寻找最短路径:

代码语言:javascript
复制
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

我的问题是:

  • 在图像中,权重被认为是一种成本或密切关系,所以将权重转换为相同的值是正确的吗?即使Actor01和Actor02之间有许多边,路径的长度也是一样的!
  • 在计算了所有节点的最短路径之后,有三个节点具有相同的值。在这种情况下,特征向量中心性是寻找中心节点的正确方法?
  • 当我投影二分网络时,我失去了Actor-Actor网络中的边缘名。我怎么才能把他们送回去?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-18 08:45:59

连接所有其他节点的最短路径节点是距离最小的节点,或者是在closeness() See ?closeness()和Bavelas (1950)和nice 中心性度量的wiki页面中计算出的最高贴近度中心度。

回答以下三个子问题:

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

我认为closeness-centrality听起来更像是您要寻找的东西:“所有其他节点的最小求和距离”。在你的例子中,特征向量中心性(我认为它有一个更复杂和不那么直观的公式)和亲密中心性都会给你留下一个平分的胜利者。比较:

代码语言:javascript
复制
eigen_centrality(lc_projected_g)$vector
closeness(lc_projected_g)

如果很多胜利者都有相同的价值,那么决定哪个才是正确的节点,这确实是你自己的判断问题。由于有多位学者使用了Erdős - to 1,Paul Erdős使用了一个替代公式,将最低的Erdős-号与他合著论文最多的人(k)授予最低的Erdős-number。我的怀疑是,你那类附属网络的复制会产生带有“捆绑赢家”的结构,从而使所有其他节点的最短路径也以略大于您的图的形式出现。也许你可以重新思考,为什么你希望你的重新投影中最核心的节点是指返回到你的图的原始的二部结构?

3)你失去了你的边名,因为重新投影的边本质上完全不是相同的边。很高兴他们走了。不过,我不能用您的代码复制任何丢失的边名。g_graph没有为E(g)设置名称或标签。E(lc_projected_g)列出了很好的命名边,因为顶点的名称很好。你可以重新建立你自己的名字,比如:

代码语言:javascript
复制
E(lc_projected_g)$label <- apply(ends(lc_projected_g, E(lc_projected_g)), 1, paste,collapse="--")

前提是你的顶点已经正确命名了。您在bipartite_projection()中的投影应该总是带有垂直的名称,而不是边缘名称。在你上面的代码中,至少对我来说是这样的。我上面的代码行设置了标签(在绘制图形时显示),使用paste()将每个边的垂直对的名称用"--“粘合在一起。看看ends(lc_projected_g, E(lc_projected_g))。它应该将命名为垂直对的矩阵列出来。

许多问题在一个,但工作良好的代码-示例。祝好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54246965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档