2017-02-20 33 views
0

自分のネットワークの平均パス長を計算しようとしていますが、次の問題があります。私は過去にigraphパッケージのaverage.path.lengthを使っていました。今回は別のルートをとることにしました。私はdistances関数(パッケージigraphからも)を使い、すべての距離の平均を求めたかったのです。 distances関数はグラフの頂点間のペアワイズ最短パスを単純に計算するので、平均パス長を返すのがmean(distances(graph))であると私は理解していました。しかし、私がこのアプローチを使用しようとしたとき、私はaverage.path.lengthmean_distanceの指示アプリケーションが与えていた異なる値を得ていることに気付きました。最初は、問題はいくつかの独立したノードによって引き起こされたと思っていましたが、完全に接続されたおもちゃのグラフでチェックしたところ、同じ問題がありました。ここで平均距離とigraphの障害平均平均

が再現可能な例である:

toy.graph <- graph.formula(1-2,1-3,1-5,2-5,3-5,3-6,4-6) 
    mean_distance(toy.graph) 
    [1] 1.866667 
    average.path.length(toy.graph) 
    [1] 1.866667 
    mean(distances(toy.graph)) 
    [1] 1.555556 

私は別のアルゴリズムがmean_distancedistancesのために使用されていることを理解しその差は、小型でシンプルなモデルにとても大きくすべきですか?私は何が欠けていますか?

答えて

2

私はあなたの代わりに下の全距離行列を平均化しているので、あなたが別の答えを取得していると思わ| distance(toy.graph)の上三角これは距離

library(igraph) 
toy.graph <- graph.formula(1-2,1-3,1-5,2-5,3-5,3-6,4-6) 
plot(toy.graph) 
mean_distance(toy.graph) 
#[1] 1.866667 

average.path.length(toy.graph) 
#[1] 1.866667 

mean(distances(toy.graph)) 
#[1] 1.555556 

mean(distances(toy.graph)[lower.tri(distances(toy.graph))]) 
#[1] 1.866667 
+0

を下げる対角線上の0のありがとう含まれています。それは理にかなっている。対角が平均を下げることがわかります。私のネットワークが監督されているとき、下三角と上三角の両方を使うべきですか?そのような場合、行列は対称ではありません(ただし対角線上には0が残ります)。 – Justyna

+0

この方法を有向グラフに使用する場合は、グラフの「内」と「外」の距離を計算し、平均化する前に「Inf」と対角線を削除する必要があります。これは単純な有向グラフではうまくいきますが、どのように一般化可能かはわかりません – emilliman5