我正在开发图表的估算方法。我需要在不同的igraphs
上测试它的稳健性。如何使用不同的图级集中生成(在R中)多个igraphs
?我熟悉sample_(...)
,'示例_'允许我生成图形GIVEN一个模型,但不给出图级集中。
我想举个例子:
graph_1 <- centralization=.50; graph_2 <- centralization=.30 . . . graph_n <- centralization=.00
答案 0 :(得分:0)
igraph
中没有烘焙函数,但您可以使用度序列采样器生成具有特定集中度的图形:sample_degseq
。关键是要找到一个度分布,其中分布中最大度和每个度之间的差值之和等于理论最大值*集中度。
这个功能可以解决这个问题,但有点困难:
sample_centr <- function(size, centralization, leeway = 50) {
theoretical_max <- size * (size - 1)
sum_diff <- theoretical_max * centralization
# Must be an interger
sum_diff <- round(sum_diff)
sim_diff <- 0
while (sim_diff < (sum_diff - leeway) | sim_diff > (sum_diff - leeway)) {
# To deal with very low levels of centralization...
if (centralization < 0.10) {
max_deg <- floor(size * runif(1, 0, 1))
degs <- floor(runif(size, min = max_deg - floor(max_deg*0.25), max_deg))
} else {
degs <- sample(1:size, size, replace=TRUE, prob=(1:size)^-2)
}
sim_diff <- sum(max(degs) - degs)
}
if (sum(degs) %% 2 != 0) {
degs[1] <- degs[1] + 1
}
g <- sample_degseq(degs)
return(g)
}
当然这仅适用于学位集中。我认为,中介集中化将会更具挑战性。
> g <- sample_centr(100, 0.5, 0)
> centr_degree(g)
$res
[1] 1 1 2 1 53 2 1 1 1 1 2 1 1 1 1 1 3 1 1 5 2 1 1 1 1 5 1 7 1 18 1 1
[33] 1 1 1 2 1 8 2 5 6 1 1 1 1 2 1 1 1 1 1 1 7 1 1 2 1 2 1 9 51 4 12 1
[65] 1 1 1 1 2 6 3 2 1 2 2 1 4 1 1 25 1 5 1 1 1 2 3 10 1 2 1 3 1 1 2 2
[97] 2 3 1 1
$centralization
[1] 0.5
$theoretical_max
[1] 9900