一般化Freeman指数の計算
はじめに:Freeman指数とは
Freeman指数は社会ネットワークにおけるセグリゲーションの程度を評価するための指標であり、とりわけエッジが対称化された無向ネットワークに対して用いられる。Freeman(1978)によって提案された。
この指数を使用している研究事例としては、例えば、学年によってエスニシティとジェンダーに関するセグリゲーションの程度を比較したShrum et al (1988)等が挙げられる。
基本的な発想は、「ランダムに紐帯が生成された時と比較して、観測されたネットワークにおいてグループを横断する紐帯がどれほど少ないと言えるか」によってセグリゲーションを測るというものである。Freeman指数は0から1までの値を取り、1に近いほど、グループ間のつながりが期待値と比べて少ないことになる。
しかしながら、Freeman(1978)で提出されたオリジナルの指数は、カテゴリを2つのみ持つ社会的次元(e.g. 「男性」と「女性」)でしか使用できないという問題がある。検討したい社会的次元が、「野球部」「サッカー部」「テニス部」のような3つ以上の幅広いカテゴリを持つ場合、この指数はこのままでは使うことができない。
一般化Freeman指数
Bojanowski and Corten(2014)は、Freeman指数を3つ以上の社会的カテゴリを含む社会的次元に関するセグリゲーションに対しても適用できるように改良した一般化Freeman指数(Generalized Freeman’s Index)を開発している.
下式は一般化Freeman指数を定式化したものである.なお,詳しい導出の過程は元論文を参照されたい.
ここでπは,観測されたネットワークと同じノードの集合を所与とし、紐帯が完全にランダムに生成された仮定した時に発生するグループ間紐帯の全体に占める割合を示し,pは,実際に観測されたネットワークが含むグループ間紐帯の割合を,Nは全てのノード数を,n_kはグループkを構成するノードの数を示している.通常のFreeman指数と異なり、グループ数が多すぎる場合は Sが0を下回る場合もある。
実装
簡単に実装してみたのが以下のコード。属性付きの network
オブジェクトを引数に取る。どの属性でFreeman指数を計算するかは、引数 mode
で指定する。
igraph
オブジェクトが使いたい場合は、 intergraph::asIgraph()
などで変換すると良い。
library(network) Freeman <- function(network,mode){ matrix <- mixingmatrix(network,mode)$matrix #混合行列(属性間のエッジ数を成分とする行列) matrix[upper.tri(matrix)] <- 0 #ダブルカウントになるので上三角成分を0に N <- network.size(network) #ノード数 attribute <- network %v% mode #所望の属性をvectorで取得 nk_sum_sq <- N^2 nk_sq_sum <- sum(table(attribute)^2) sum_of_mgh <- sum(matrix) - sum(diag(matrix)) #異なるグループ間のエッジ数 p <- sum_of_mgh / sum(matrix) #異なるグループ間のエッジの割合(観測値) freeman <- 1 - p*N*(N-1)/(nk_sum_sq - nk_sq_sum) return(freeman) }
例
Freeman(net, mode = "gender")
注意点
ここで注意しなければならないのは,確かにFreeman指数を用いることでそれぞれ社会的次元に関して発生するセグリゲーションの度合いを個々に評価することはできるが,異なる社会的次元同士の関連(例えばジェンダーと所属部活の関連)や,構造的な紐帯形成プロセス(transitive closureなど)を考慮に入れられないということである。そのような場合は、ERGMなどの多変量解析の手法を用いるのがよい。