*グループに分ける 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) *練習 **階層型クラスタ分析のツリーをみながら、ブロック数を適宜指定して、ブロックモデルを実行してみる **全メンバーに対して同様のことをしてみる。いくつくらいのブロックが適当か?それぞれのブロック(に含まれる人)の特徴は?