R:igraph,将“已知”聚类的成员与观察到的聚类的成员匹配,返回%匹配

时间:2012-03-27 21:46:24

标签: r cluster-analysis igraph

我正在使用Walktrap社区检测方法返回一个数字(在本例中为19)的簇。我有一个属于这些集群中的一个或多个的成员列表。

  1. 我需要一种方法来搜索每个群集中是否存在 成员并返回找到的匹配百分比。 (例如簇[0] = 0%,cluster [1] = Y%..... cluster [18] = Z%)因此选择代表列表成员的最佳聚类。

  2. 找到最佳群集后,我需要一种方法来计算     最佳集群的成员数量和原始集群的成员数量     (19-1)簇选择另一个最接近的簇     (成员人数)

     library(igraph)
     edges <- read.csv('http://dl.dropbox.com/u/23776534/Facebook%20%5BEdges%5D.csv')
     list<-read.csv("http://dl.dropbox.com/u/23776534/knownlist.csv")
     all<-graph.data.frame(edges)
     summary(all)
    all_wt<- walktrap.community(all, steps=6,modularity=TRUE,labels=TRUE)
    all_wt_memb <- community.to.membership(all,all_wt$merges,steps=which.max(all_wt$modularity)-1)
    all_wt_memb$csize
    
    >[1] 176  13 204  24   9 263  16   2   8   4  12   8   9  19  15   3   6   2   1
    

2 个答案:

答案 0 :(得分:1)

使用%in%函数时,如:a %in% b将确定向量a中的哪些元素也存在于向量b中。所以对于每个集群,我会

  • 提取该群集的成员
  • 给出您感兴趣的成员列表,计算哪些是%in%此群集 - 这将返回一个布尔向量
  • 您可以在布尔向量上使用sum()来计算真实元素的数量(即初始向量中存在于此群集中的元素数量
  • (可选)您可以按群集的长度进行标准化,以获得此群集的百分比,该群集由您感兴趣的列表或您所做列表的长度组成,以指示您的成员数量此群集中存在的列表。

您可以使用for()apply变体循环遍历每个群集。

然后给定all_wt_memb$csize,您将拥有一个给定的值,这是您的目标,并且您将要查找最接近的数字。请参阅this link,但您只是计算最小绝对差值:

x=c(1:100)
your.number=5.43
which(abs(x-your.number)==min(abs(x-your.number)))

答案 1 :(得分:0)

这将为您提供第二大all_wt_memb的索引:

dat <- all_wt_memb$csize
order( dat- dat[which.max(dat)])[ length(dat)-1]
[1] 3