Я пытаюсь вычислить среднюю длину пути для моей сети, и я сталкиваюсь со следующей проблемой. В прошлом я использовал 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
, но если разница будет настолько велик, на такой маленькой и простой модели? Что мне не хватает?
спасибо. В этом есть смысл. Я вижу, что диагональ снизит среднее значение. Должен ли я использовать как нижний, так и верхний треугольник, когда моя сеть направлена? В этом случае матрица не будет симметричной (хотя она по-прежнему будет иметь диагональ 0). – Justyna
Если вы хотите использовать этот метод для ориентированных графов, вам нужно вычислить расстояние «в» и «выходить» для графика, удалите «Inf» и диагональ перед усреднением. Это работает для простого ориентированного графа, не знаю, насколько это обобщаемо, хотя – emilliman5