モジュールの可視化
今回はWGCNAとigraphでネットワークを行った際に現れた特定のモジュールのみを取り出して、ノードやエッジの色・大きさ等で詳細な情報を可視化します。ここまでの流れはこちらのコードを参照してください。
必要なパッケージとデータ
必要なパッケージとデータは以下の通りです。以前の記事を参照してください。
パッケージと用途
・igraph:ネットワークの計算
・visNetwork:グラフの可視化
・colorBlindness:カラーパレット
データ
・subnet:隣接行列をgraph.adjacency関数で変換したデータ
・m:fastgreedy.community関数でsubnetのモジュールを計算したデータ
m$membershipに各変数(ノード)の所属するモジュールの番号が格納
モジュールのネットワークデータの抽出
igraphのinduced_subgraph関数を使って、全体のネットワークからモジュールを構成するノードとエッジのみ取り出します。
module_no <- 1 #取り出したいモジュールの番号
n <- induced_subgraph(subnet, m$membership == mo.s$module.ID[module_no])
ノードの色の指定
ノードの色は、モジュールの色をベースに付けます。ここでは各ノードの強度に応じで5段階に分け、透過性のグラデーションをつけました。より多くのノードと強く結合したノードほど濃く表示されます。
makeGradation <- function(x) { #透過性のグラデーションを作る関数
grad <- c()
opacity <- c("2A", "4C", "7F", "99", "B2")
for (i in 1:5) {
grad[i] <- paste(x, opacity[i], sep="")
}
return(grad) #5段階のグラデーションを出力
}
graph_Color = makeGradation(safeColors[module_no])[as.numeric(cut(strength(n), breaks = 5))]
V(n)$color <- graph_Color
ノードの大きさとエッジの幅の指定
toVisNetworkData関数を使ってvisNetworkに渡せるデータの形に変形しておきます。さらに、ノードの大きさをノードの強度、エッジの幅をエッジの重みで表現できるように指定しておきます。
netv <- toVisNetworkData(n)
nodes <- netv$nodes
nodes$value <- strength(n)
edges <- netv$edges
edges$value <- edges$weight
visNetworkによる可視化
最後にvisNetwork関数で可視化します。
visNetwork(nodes, edges) %>%
visIgraphLayout(layout = "layout_with_kk") %>%
visNodes(shadow = list(enabled = TRUE, size=20)) %>%
visOptions(highlightNearest = list(enabled = T, hover = T),
nodesIdSelection = T)
モジュール1のみを可視化すると、このようなグラフが出てきます。インタラクティブなグラフになっていて、ネットワークの拡大縮小、特定のノードに接続するノードのみのハイライトなどが可能です。
このように特定のモジュールのみを可視化することで、たとえばハブノードっぽいもの同士が比較的強く相関していることなどが可視化できて、ネットワーク全体を眺めていた時に映えられなかったより詳細な考察が可能となります。