考虑以下无向网络:
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个三合会。
答案 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
已经解释了这一点。)