2016-05-15 9 views
3

単純に言えば、重要でない値を削除した後、相関強度に従ってエッジを描きたいと思います。私は正の相関ペアのedge.betweenessと、残念ながらないネガのために行うことができます。igraphは負の相関係数にedge.widthを適用しません

data <- matrix(rnorm(100),10,10)  
colnames(data) <- LETTERS[1:10] 

library(Hmisc) 
cor1 <- rcorr(data) 
diag(cor1$r) <- 0 

library(igraph) 

#####Example 1: 
graph <- graph.adjacency(cor1$r, weighted=TRUE, mode="lower") 
graph <- delete.edges(graph, E(graph)[ weight < 0.3 & weight > -0.3]) 
#####trying to pass edge weights to edge.width 
plot.igraph(graph, vertex.size=20, edge.width=E(graph)$weight) 
###edge.width=E(graph)$weight is ignored 

#####Example 2: 
graph <- graph.adjacency(cor1$r, weighted=TRUE, mode="lower") 
graph <- delete.edges(graph, E(graph)[ weight < 0.3]) #omitting the 2nd condition 
E(graph)$weight <- edge.betweenness(graph) #apparently required 
plot.igraph(graph, vertex.size=20, edge.width=E(graph)$weight) 
####this does work, but only for positive correlation coefficients 

#####Example 3: 
graph <- graph.adjacency(cor1$r, weighted=TRUE, mode="lower") 
graph <- delete.edges(graph, E(graph)[ weight < 0.3 & weight > -0.3]) 
E(graph)$weight <- edge.betweenness(graph) 
#####gives error: Error in .Call("R_igraph_edge_betweenness", graph, directed, weights, : 
#################At centrality.c:2046 : Weight vector must be non-negative, Invalid value 

をだから、私はedge.widthに負の相関値を渡すことができますか?

答えて

4

負の相関と正の相関を表す色付きのエッジと、相関の大きさを表すedge.widthを使用できます。以下の例では、私は以下のように変更加えました:は IGRAPHパッケージ内の関数であるため、

  1. を、g1にグラフオブジェクトの名前を変更しました。
  2. 簡潔さのためにエッジ削除条件の絶対値を使用しました。
  3. edge.width引数をabs(E(g1)$weight)*8に変更しました。 の絶対値は、ウェイトが常に正であることを確認します。 8を掛けるだけで、エッジの幅が大きくなります。
  4. の正の相関の場合は青の色の頂点に負の値を追加し、負の相関の場合は赤を追加しました。

#####Example 3: 
g1 <- graph.adjacency(cor1$r, weighted=TRUE, mode="lower") 
g1 <- delete.edges(g1, E(g1)[ abs(weight) < 0.3 ]) 
plot.igraph(g1, vertex.size=20, edge.width=abs(E(g1)$weight)*8, 
     edge.color=ifelse(cor1$r > 0, "blue","red")) 

enter image description here

+0

ありがとうございました。素晴らしいアイデア。 – nouse

関連する問題