4

数年前、ソーシャル ネットワークの分析に UCINET を使用しました。最近はまた SNA を使いたいと思っていますが、今回は統一された分析フレームワークを好みます。それは私にとって R です。

私は sna と statnet のドキュメントを見てきましたが、少し圧倒されています。

私がやりたいこと: 最初: websurvey (しばしば評価される) などから直接引き出された 2 部構成/インシデント マトリックスを読み込みます。この行列を 2 つの隣接行列に変換します (所属ごとの所属とケースごとの所属)。また、ケースごとに評価された指示付きのマトリックスである可能性もあります。

2 番目: 頂点属性のファイルを (これも websurvey データなどから) ロードします。

3 番目: 次に、頂点属性によって色付けおよびラベル付けされ、特定のしきい値を超える値を持つエッジのみが描画される、いくつかの中心性尺度に従って、たとえば頂点サイズでグラフをプロットします。

これは小さな入射行列です。

data <- structure(list(this = c(0, 1, 0, 1, 1, 2, 0, 1, 3), 
 that = c(1, 1, 3, 0, 0, 0, 2, 1, 0), 
 phat = c(0, 0, 2, 1, 0, 0, 1, 2, 0)), 
 .Names = c("this", "that", "phat"), 
 row.names = c("a", "b", "c", "d", "e", "f", "g", "h", "i"), 
 class = "data.frame")

一部の属性データを使用:

att <-structure(list(sex = structure(c(1L, 1L, 2L, 2L, 1L, 2L, 1L, 
1L, 1L), .Label = c("F", "M"), class = "factor"), agegr = c(1L, 
1L, 3L, 1L, 3L, 1L, 1L, 3L, 1L), place = structure(c(1L, 2L, 
1L, 1L, 1L, 1L, 2L, 2L, 1L), .Label = c("Lower", "Upper"), 
class = "factor")), .Names  = c("sex", 
"agegr", "place"), row.names = c(NA, -9L), class = "data.frame")

ps たぶん、SNA はこの投稿に適したタグでしょうか? 私は必要なSOのれんを持っていません:-)

4

3 に答える 3

7

これは良い質問であり、RでSNAをさらに探索する機会を提供します。私はigraphパッケージに精通しているので、そのライブラリの関数を使用して質問に答えます。

質問の最初の部分には、かなり簡単な解決策があります。

# Convert data frame to graph using incidence matrix
G<-graph.incidence(as.matrix(data),weighted=TRUE,directed=FALSE)
summary(G)
# Vertices: 12 
# Edges: 30 
# Directed: TRUE 
# No graph attributes.
# Vertex attributes: type, name.
# Edge attributes: weight.

これにより、接続行列から無向エッジと重み付きエッジを持つグラフオブジェクトが返されます。2部グラフから所属グラフを生成するには、2つのオプションがあります。すばやく簡単な方法は次のとおりです。

proj<-bipartite.projection(G)

これにより、各プロジェクションが$ proj1およびproj2としてインデックス付けされたリストが返されます。残念なことに、これらのプロジェクトには、この操作を実行するときに通常必要なエッジの重みが含まれていません。これを行うための最良の解決策は、行列の乗算を自分で実行することです。

# Create the matrices, and set diagonals to zero
M<-as.matrix(data)
affil.matrix<-M%*%t(M)
diag(affil.matrix)<-0
cases.matrix<-t(M)%*%M
diag(cases.matrix)<-0
# Create graph objects from matrices
affil.graph<-graph.incidence(affil.matrix,weighted=TRUE)
cases.graph<-graph.incidence(cases.matrix,weighted=TRUE)

属性データを使用してプロットを生成するのは少しトリッキーで、より多くのコーディングが必要ですが、igraphの例のいくつか、または開始するのに十分なものがあるので、私自身の例のいくつかを調べることをお勧めします。幸運を!

于 2009-12-13T21:30:41.060 に答える
2

これはあなたの質問に直接答えるものではありませんが、R の SNA に関する Drew Conway のプレゼンテーションをまだ見ていなければ、見ることを強くお勧めします。

于 2009-12-12T23:11:42.680 に答える
0

また、R および SoNIA のソーシャル ネットワーク分析ラボ、特にアフィリエーションデータのラボも参照してください。

于 2011-03-21T17:44:48.337 に答える