获得三合会的数量

时间:2014-11-13 16:38:14

标签: r geometry igraph

考虑以下无向网络:

1   2
2   3
3   4
4   2
5   7
5   6
6   7
7   6
10  1
10  2

如何计算此网络中三合会的数量?
使用triad.census (link)我得到:

[1]  1.500000e+01  3.700000e+01  0.000000e+00 6.944418e-310  4.000000e+00 2.371515e-322 1.506900e-321 3.913638e-315 2.916720e-316
[10] 2.781342e-309 3.162020e-322 5.010211e-316 8.344027e-309 6.944406e-310 6.944406e-310 1.251613e-308
Warning message:
In .Call("R_igraph_triad_census", graph, PACKAGE = "igraph") :
  At motifs.c:1050 :Triad census called on an undirected graph

我认为,有3个三合会。

2 个答案:

答案 0 :(得分:2)

请勿将triad.census用于无向图。与您提供的链接一样

  

参数   图形   输入图,应该是定向的。无向图会产生警告和未定义的结果。

这是一种方式:

 library(statnet)
 library(ergm)
 library(sna)
 data(faux.magnolia.high)
 fmh <- faux.magnolia.high
 summary(fmh ~ triangle)
#triangle 
#    169 

或者明确指示您的图表,然后您将获得triad.census

中不同类型的三元组的数量

答案 1 :(得分:1)

你可能想要计算三角形,而不是三元组。这可以使用graph.count.subisomorphisms.vf2来完成,您可以使用它来搜索任意图形“模板”并计算出现次数,或者您可以使用graph.motifs来计算每个可能的大小为3的子图的数量,然后获取表示三角形的结果的组件:

> g <- graph(c(1,2,2,3,3,1,3,4,4,5,5,3), directed=F)
> graph.motifs(g, size=3)
[1] NA NA  4  2

这告诉您示例图中有2个三角形。

> triangle <- graph.full(3)
> graph.count.subisomorphisms.vf2(g, triangle) / 6
[1] 2

graph.count.subisomorphisms.vf2的结果必须除以6,因为有三种方法可以将三角形映射到自身(通过置换顶点),因此每个三角形将按graph.count.subisomorphisms.vf2计算六次。 (graph.motifs已经解释了这一点。)