2017-02-20 37 views
0

Я пытаюсь вычислить среднюю длину пути для моей сети, и я сталкиваюсь со следующей проблемой. В прошлом я использовал average.path.length из пакета igraph. На этот раз я решил пойти по другому пути: я хотел использовать функцию distances (также из пакета igraph), а затем найти среднее значение всех расстояний. Я понимал, что функция distances просто вычисляет попарно кратчайшие пути между вершинами графа и, следовательно, принимать mean(distances(graph)) следует вернуть среднюю длину пути. Однако, когда я попытался использовать этот подход, я заметил, что получаю разные значения, которые давало приложение directs average.path.length и mean_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_distance и distances, но если разница будет настолько велик, на такой маленькой и простой модели? Что мне не хватает?

ответ

2

Я думаю, вы получаете другой ответ, потому что вы усреднение всей матрицы расстояний вместо нижнего | верхнего треугольника из distance(toy.graph) это включает в себя 0 по диагонали, понижающие расстоянии,

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). – Justyna

+0

Если вы хотите использовать этот метод для ориентированных графов, вам нужно вычислить расстояние «в» и «выходить» для графика, удалите «Inf» и диагональ перед усреднением. Это работает для простого ориентированного графа, не знаю, насколько это обобщаемо, хотя – emilliman5