1

为了在 R 中的 igraph 包中学习社交网络理论的“基本要素”,我创建了一个基本的玩具示例,该示例是阿尔及利亚内战一年期间恐怖袭击的二分图。顶点由恐怖肇事者和目标组成,而边缘代表哪个团体攻击了哪个目标。

我可以绘制这种关系的一般单部分图(以及网络中心性的基本分析),但是在创建网络的二部分投影时遇到问题。

根据@GaborCsardi 的建议,我只将 igraph 包加载到全局环境中,以确保snaornetworks包不会与 igraph 的命令冲突。

尽管如此,问题仍然存在:

 library(igraph)

 perpetrator <- c("Algerian Islamic Extremists", 
             "Salafist Group for Preaching and Fighting (GSPC)", 
             "Salafist Group for Preaching and Fighting (GSPC)", 
             "Algerian Islamic Extremists", 
             "Salafist Group for Preaching and Fighting (GSPC)", 
             "Muslim Extremists",
             "Armed Islamic Group (GIA)",
             "Armed Islamic Group (GIA)",
             "Armed Islamic Group (GIA)",
             "Muslim Militants")

 target <- c("Police", "Military", "Terrorists/Non-state Militia", "Police",
             "Military", "Private Citizens & Property", 
             "Private Citizens & Property", "Private Citizens & Property", 
             "Private Citizens & Property", "Private Citizens & Property")

 dat <- cbind(perpetrator, target)

 net <- graph.edgelist(as.matrix(dat)) 

 plot(net, main="Domestic Terrorism during the Algerian Civil War")

 V(net)$type <- FALSE

 V(net)$type[V(net)$name%in%dat$perpetrator] <- TRUE

 V(net)$type[V(net)$name%in%dat$target] <- TRUE

 bipartite.mapping(net)

 proj_net <- bipartite.projection(net, type=V(net)$type)

此时,RStudio 会产生以下错误:

 Error in .Call("R_igraph_bipartite_projection", graph, types, as.integer(probe1),  :  
 At bipartite.c:198 : Non-bipartite edge found in bipartite projection, Invalid value
4

1 回答 1

2

根据文件,bipartite.mapping(...)

决定是否可以将网络的顶点映射到两种顶点类型,以使没有相同类型的顶点连接。

如果可以这样做,则$type返回的列表中的元素bipartite.mapping(...)标识每个顶点属于哪个子网络(通过TRUEFALSE)。请注意,对于您的图表,有不止一种方法可以做到这一点。

你似乎(试图)自己定义你的子网络。虽然一般来说,当你这样做时,子网络不一定是二分的,但在你的情况下它们是。所以你可以只bipartite.projection(...)用来划分net子网,如下:

V(net)$type <- FALSE
V(net)$type[V(net)$name%in%dat$perpetrator] <- TRUE
proj_net <- bipartite.projection(net)

proj_net现在是一个包含两个元素的列表,即子图。

如果要用于bipartite.mapping(...)识别子网,请按以下方式进行:

V(net)$type <- bipartite.mapping(net)$type
proj_net <- bipartite.projection(net)
set.seed(123)  # for reproducible plot
plot(net,vertex.color=ifelse(V(net)$type,"green","red"))

这不会所有目标和肇事者组合在一起,但红色和绿色子网 二分的。

于 2014-10-08T20:31:50.870 回答