areyoujokingme - 1 year ago 88

R Question

I want to node permute a graph. See the test graph I have created, below. When I use the permute() method from the igraph R library, no changes occur in the new graph permute() makes. What is happening?

`testG <- vector(mode="list", length=6); #assign initial probabilities`

testG = list("gene1"=0, "gene2"=0, "gene3"=0, "gene4"=0, "gene5"=0, "gene6"=0);

adjacency_test <- matrix(c(0,1,1,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0), nrow=6, ncol=6);

rownames(adjacency_test) <- c("gene1", "gene2", "gene3","gene4","gene5","gene6");

colnames(adjacency_test) <- c("gene1", "gene2", "gene3","gene4","gene5","gene6");

require(igraph)

p <- graph.adjacency(adjacency_test, mode="undirected", weighted=TRUE);

vids.permuted <- c(6,5,4,3,2,1)

p2 <- permute(p, permutation=vids.permuted)

plot(p)

plot(p2)

p:

p2:

I expect the clique in the permuted graph (p2) to be gene6, gene5, gene4, not gene1, gene2, and gene3 again, as in the original.

What is happening?

Per the response below, which is correct, I had another worry. When I rearrange the node names manually, how come when I check if all the edges are the same, and the degrees are the same of the original graph versus permuted graph, igraph says true?

`p <- graph.adjacency(adjacency_test, mode="undirected", weighted=TRUE);`

p2 <- p

V(p2)$name <- V(p)$name[sample(length(V(p)$name), replace=FALSE)]

# p is for sure different from p2 now

plot(p, layout=layout.reingold.tilford)

plot(p2, layout=layout.reingold.tilford)

# But why are the degrees still the same, and edges still the same?

all(E(p)==E(p2))

degs1 <- degree(p)

degs2 <- degree(p2)

all(degs1==degs2)

Answer Source

The permute function swaps vertex IDs and creates an isomorphic graph. This is not what you want. To swap vertex labels use,

```
p2=p
V(p2)$name=paste("gene ",6:1)
```