0

私は現在、動的時間ネットワークに取り組んでいます。

ヘッダー: タイム センダー レシーバー

      1    1       2
      1    1       3
      2    2       1
      2    2       1
      3    1       2
      3    1       2

上記は私のデータセットのサンプルです。3 つの期間 (セッション) とノード間のエッジリストがあります。各期間ごとに中心性測定値を計算したいと思います。同じ期間内に中心性測定値を計算するスクリプトを作成することを考えています。ただし、この問題を処理できる R ライブラリがあるかどうかは疑問です。

について知っている人はいますか?

ジニー

次のように、時間に基づいてデータをサブセット化するためのコードを記述しようとしました。

uniq <-unique(unlist(df$Time))

uniq
[1] 1 2 3

for (i in 1:length(uniq)){

  t[i]<-subset(df, Time==uniq[i])

  net[i] <-as.matrix(t[i])

  netT[i]<-net[i][,-3]  #removing time column

  #### getting edgelist

  netT[i][,1]=as.character(net[i][,1])

  netT[i][,2]=as.character(net[i][,2])

  g [i]=graph.edgelist(netT [i], directed=T)

  g[i] 
}

ただし、エラーメッセージが表示されます ( Error in t[i] <-subset(df, Time == uniq[i]) : object of type 'closure' is not subsettable) 理由を知っていますか? 私はRに慣れていないので、理解するのは難しいです。t[i] が問題だと思います。t[i] をデータ フレームとして割り当てる方法がわかりません。

4

2 に答える 2

0

igraphライブラリを試すことができます。私はそれに慣れていませんが、この質問は答えをコード化するのに十分興味深いと思うので、ここに行きます:

有向ネットワーク (送信側と受信側) があるため、中心性の 2 つの尺度であるindegreeoutdegreeが必要になります。

これを計算するのはかなり簡単です。したがって、各時点で次のことを行う必要があります。

  1. 各行 (送信側) の各列 (受信側) への接続数を示す隣接行列を作成します。
  2. そこから、行の接続を合計して出次数を取得し、列の接続を合計して入次数を取得できます。

データがdata.frame名前付きで保存されていると仮定すると、時間ポイントで分割するためにdf使用できます。splitdata.frame

nodes <- unique(c(unique(df$Sender), unique(df$Receiver)))
centrality <- lapply(split(df, df$Time), function(time.df) {
  adj <- matrix(0, length(nodes), length(nodes), dimnames=list(nodes, nodes))
  for (i in 1:nrow(time.df)) {
    sender <- time.df[i, "Sender"]
    receiver <- time.df[i, "Receiver"]
    adj[sender, receiver] <- adj[sender, receiver] + 1 
  }
  list(indegree=colSums(adj), outdegree=rowSums(adj))
})
names(centrality) <- paste0("Time.Point.", 1:length(centrality))

データに対してコードを実行すると (わかりやすくするために、送信者受信者を文字に置き換えました):

> centrality
$Time.Point.1
$Time.Point.1$indegree
a b c 
0 1 1 

$Time.Point.1$outdegree
a b c 
2 0 0 


$Time.Point.2
$Time.Point.2$indegree
a b c 
2 0 0 

$Time.Point.2$outdegree
a b c 
0 2 0 


$Time.Point.3
$Time.Point.3$indegree
a b c 
0 2 0 

$Time.Point.3$outdegree
a b c 
2 0 0 
于 2013-10-30T04:51:02.567 に答える