что означает «не сильно связный граф» в вычислении центроида centiserve?

#r #igraph #network-analysis

#r #igraph #сетевой анализ

Вопрос:

Как и в вопросе, у меня есть четыре разные сети, которые я загружаю из 4 разных файлов csv. Каждый из них терпит неудачу, когда я вычисляю центроид с помощью библиотеки centiserve. С другой стороны, если я создаю случайную сеть ER, вычисление центроида работает.

Я изучил функцию центроида и, в конце концов, обнаружил, что она проверяет, подключена ли сеть с помощью функции igraph this is.connected(g, mode="strong")

Согласно википедии, граф является сильно связанным, если все узлы доступны из случайного узла в сети. С этой целью я вычислил компоненты моей сети, используя decompose() функцию igraph, и все сети имеют один связанный компонент: length(decompose(net)) всегда равен 1. Но centroid(net) всегда возвращает ошибку.

В конце концов, возникает вопрос: что именно ищет эта функция, когда проверяет, подходит ли график? Почему в моей сети есть один подключенный компонент, но is.connected() функция igraph возвращает False ?

Некоторый код:

 #load file
finalNet <- read.csv("net.csv", sep=",", header=T)
#get network
net <- graph_from_data_frame(finalNet[, c(1, 2)])
#decompose says that there is a single connected component
length(decompose(net))
#while centroid does not work!
centroid(net)
  

сеть доступна здесь

Комментарии:

1. Можете ли вы предоставить минимальный воспроизводимый пример?

2. @Christoph работает над этим.

3. @Кристоф, вот так. нерабочий код теперь доступен вместе с сетью.

4. Обратите внимание, что decompose по умолчанию используются слабые компоненты. is.connected проверяет сильные компоненты.

5. @Szabolcs на самом деле я этого не пробовал. И, да, теперь я могу сказать, что разница очевидна. Прежде чем задавать этот вопрос, его не было!

Ответ №1:

хорошо, я нашел ответ. Проблема в том, что функция graph_from_data_frame создает направленную сеть, если не указано иное.

Следовательно, решение, позволяющее заставить мой пример работать, состоит в том, чтобы загрузить сеть как ненаправленную:

 net <- graph_from_data_frame(finalNet[, c(1, 2)], directed=F)