图的置换检验-igraph

图的置换检验-igraph,r,igraph,graph-theory,network-analysis,R,Igraph,Graph Theory,Network Analysis,我试图计算E-I指数的置换检验,以评估网络的同质性,并测量E-I指数的显著性。但是,使用permute()函数创建一个新的图形,通过排列顶点ID,网络将进行排列,但通过执行E-I索引,它始终给我相同的结果0.25。那么置换函数有什么问题吗 actors <- data.frame(name=c("Alice", "Bob", "Cecil", "David", "Esmeralda", "Ben", "Fritz", "Jon", "

我试图计算E-I指数的置换检验,以评估网络的同质性,并测量E-I指数的显著性。但是,使用permute()函数创建一个新的图形,通过排列顶点ID,网络将进行排列,但通过执行E-I索引,它始终给我相同的结果0.25。那么置换函数有什么问题吗

actors <- data.frame(name=c("Alice", "Bob", "Cecil", "David",
                            "Esmeralda", "Ben", "Fritz", "Jon", "Anna",
                            "Julia"),
                     age=c(48,33,45,34,21, 12,33,44,66,99),
                     gender=c("F","M","F","M","F", "F","M","F","M","F"))

relations <- data.frame(from=c("Bob", "Cecil", "Cecil", "David",
                               "David", "Esmeralda",  "Cecil", "David",
                               "Esmeralda", "Jon", "Anna",
                               "Julia", "Bob", "Cecil", "Cecil", "David"),
                        to=c("Alice", "Bob", "David", "Esmeralda",  "Cecil", "David", "Alice", "Alice", "Bob", "Alice", "Fritz", "Jon", "Anna", "Alice", "Bob", "Cecil"),
                        same.dept=c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE, TRUE,FALSE,FALSE,TRUE,FALSE,FALSE, FALSE,TRUE,FALSE,FALSE),
                        friendship=c(4,5,5,2,1,1,1,3,5,7,9,1, 7,8,2,4), advice=c(4,5,5,4,2,3,1,5,7,8,2,4, 7,8,2,4))
g <- graph.data.frame(relations, directed=TRUE, vertices=actors)


V(g)$name <- as.character(vertex_attr(g, "gender"))
edges <- get.data.frame(g)

external <- length(which(edges$from != edges$to))

internal <- length(which(edges$from == edges$to))

ei_index = (external - internal) / nrow(edges)

new.graph <- permute(g, sample(vcount(g)))

actorsigraph文档称
permute保留了图形的所有图形、顶点和边属性。
这意味着您只需更改节点列表的顺序。下面是顶点列表不同但边列表保持不变的示例

rewire
这样的功能对您有用吗

ei_index <- function(g){
  edges <- get.data.frame(g)

  external <- length(which(edges$from != edges$to))

  internal <- length(which(edges$from == edges$to))

  ei_index = (external - internal) / nrow(edges)
  ei_index
}

set.seed(4321)
sapply(1:20, function(x){
  temp_g <- rewire(g, each_edge(p = 1, loops = F))
  ei_index(temp_g)
})
eiu索引