トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

SNA_block

  • グループに分ける
library(sna)
load(file="0Mat.rda") 
dim(Mat)
gden(Mat) #密度 =0でないペアの割合

#degreeを算出
dg<-degree(Mat)
  • 復習 これは何を計算したのか?
stem(dg)

#50回以上の出入りがあった者に限定
m<-Mat[dg>50,dg>50]
dim(m)  #[1] 132 132
#イメージ図をみてみる 色が白い=やりとりが多い
image(m)
rownames(m)
#図をみてみる 色が濃い=やりとりが多い に逆転する
max(m) # 108
image(108-m)
rownames(m)

#この人達だけに限定して degree
dg2<-degree(m)
stem(dg2)
#単純に合計のやりとり数が大きい順に行列を並び替える
od<-order(dg2,decreasing = T)#多い順番
m2<-m[od,od]
image(108-m2)
  • やりとりが多い人達を階層クラスター分析でグループにまとめてみる
    • そのためには距離行列に変換する
    • 現在のデータはメッセージのやりとりの多さ。 距離=値が大きいほど離れている にするために 最大値から引く。それを距離行列に変換
d<-dist(108-m)
#これが各人の距離 値が大きいほど疎遠
d
**練習 もっとも距離が近いのは誰と誰?
#階層型クラスター分析 =距離がちかいものから順に結合する。
res.h<-hclust(d)
plot(res.h)   #縦軸は距離  下に行くほど距離が近いことになる。

#どのような順番で結合したか? マイナス付はもともとの人の番号
#マイナスなしの 例えば 2 は2段階目でつくられたクラスタの意味
res.h$merge
#       [,1] [,2]
#  [1,]  -69 -113
#  [2,]   -5  -74
#  [3,]  -19    2
#  [4,]  -57  -98
#  [5,]    3    4
#  [6,]   -8 -127
    • 3段階目、4段階目で併合されたのはだれと誰?
#人名リスト
rownames(m)
  • この結果を使ってmをブロックモデルで分割 k=4でブロック数を指定
res.b<-blockmodel(m,res.h,k=4)

table(res.b$block.membership)  #各ブロックに含まれる人数
#  1   2   3   4 
#112  18   1   1 
res.b$block.membership[order(res.b$block.membership)]#各ブロックのメンバー
  • 練習 各ブロックにはどのような人がいるか?
plot(res.b)#イメージプロット
mb<-m[order(res.b$block.membership),order(res.b$block.membership)]
image(108-mb)
  • 練習
    • 階層型クラスタ分析のツリーをみながら、ブロック数を適宜指定して、ブロックモデルを実行してみる
    • 全メンバーに対して同様のことをしてみる。いくつくらいのブロックが適当か?それぞれのブロック(に含まれる人)の特徴は?