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?

EDIT:

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)
```