No.22456 R igraphパッケージのクラスタ計算結果の取り出し  【明石】 2017/10/21(Sat) 15:58

青木先生,
いつもお世話になり,ありがとうございます,明石と申します。

Rについてお聞きしたいことがでてきました。
ご教示をいただければ,大変に助かります。
何卒どうぞよろしくお願いいたします。

-----------

ネットワーク分析の igraph パッケージのクラスタ計算結果の取り出しに苦慮しています。

簡単なネットワークデータを,以下にお示しをします。
node1  node2  weight
2 5 0.03
1 3 0.04
1 4 0.08
3 5 0.20
5 6 0.15
4 7 0.25
このネットワークデータを作成するRスクリプト例です。
edge.list <- matrix( c(2, 5, 1, 3, 1, 4, 3, 5, 5, 6, 4, 7), nrow=6, ncol=2,  byrow=T)

weight <- c(0.03, 0.04, 0.08, 0.20, 0.15, 0.25)

library(igraph)

g <- graph_from_edgelist(edge.list, directed=FALSE)

E(g)$weight <- weight

plot(g)
グラフクラスタリングをします。
cluster_optimal(g)

> cluster_optimal(g)
IGRAPH clustering optimal, groups: 2, mod: 0.46
+ groups:
$`1`
[1] 1 4 7

$`2`
[1] 2 3 5 6
7つのノードは,2つのグループにクラスタリングされることが分かりました。
この結果を,前記プロット図に追記した画像を,添付ファイルにてお示しをします。

以下のQ1,Q2の2つについて,Rプログラムをお示しいただけると,助かります

(Q1)
2つのグループがあり,
1番目のグループには,ノードの 1 4 7
2番目のグループには,ノードの 2 3 5 6
が属することを,どのように取り出せばよいのでしょうか

(Q2)
Q1ができないことから,Q2もできませんが,
クラスタリング結果を以下のデータフレームで整理したいのですが,どのように組み立てすればよいのでしょうか。
node  group
1 1
2 2
3 2
4 1
5 2
6 2
7 1
お手数をおかけいたします。
何卒どうぞよろしくお願いします。。


No.22457 Re: R igraphパッケージのクラスタ計算結果の取り出し  【青木繁伸】 2017/10/21(Sat) 19:27

この分析法については知りませんので,正しい解答か分かりませんが,以下のようにすればお望みの結果になるようですが?
> a = cluster_optimal(g)
> group = a$membership
> node = seq_along(group)
> d = data.frame(node, group)
> d
node group
1 1 1
2 2 2
3 3 2
4 4 1
5 5 2
6 6 2
7 7 1

No.22458 Re: R igraphパッケージのクラスタ計算結果の取り出し  【明石】 2017/10/21(Sat) 20:50

青木先生,
いつもお世話になり,ありがとうございます,明石と申します。

ありがたいご教示をいただきまして,誠にありがとうございます。
助かりました。
>  a = cluster_optimal(g)
> str(a)
List of 2
$ modularity: int [1:3] 1 4 7
$ membership: int [1:4] 2 3 5 6
- attr(*, "class")= chr "communities"
> a$membership
[1] 1 2 2 1 2 2 1
このmembershipを使うのですね。

よい勉強をさせていただきました。
ありがとうございました。

● 「統計学関連なんでもあり」の過去ログ--- 048 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る