igraph не показывает нужную сеть, которую я импортировал

Я хотел бы провести анализ sna. Я работаю с RStudio и пакетом igraph. Мои входные данные взяты из текстового файла (созданного из Excel в виде текстового файла с разделителями табуляции). Файл данных имеет 3 столбца. 1-й и 2-й ряд - данные сети (вершины), а 3-й ряд - вес каждого ребра. Я использую данные о соединениях в аэропортах, которые выглядят так:

1 54 28382 (Идентификационный номер аэропорта Аэропорт / Идентификационный номер аэропорта Аэропорт / номер пассажира в качестве веса)

Я загрузил идентификатор с этими командами:

 USAN_num1 <- read.table('USAN_num.txt', header=T)
 USAN_g_num1 <- graph.data.frame(USAN_num1)
> summary(USAN_g_num1)
Vertices: 626 
Edges: 7078 
Directed: TRUE 
No graph attributes.
Vertex attributes: name.
Edge attributes: PAX.

Данные выглядят так:

  ORIGN DESTN  PAX
1     1   604  646
2     2    42 3736
3     2   118 5189

Теперь о возникшей проблеме: моя сеть объединяет 6 различных кластеров, когда я проверяю ее с помощью igraph. Даже когда я создаю графическую картину своей сети, она состоит из 6 отдельных частей. Это не имеет никакого смысла, так как мои данные должны быть подключены к одной сети. Я проверил свой набор данных, и там действительно нет различных подсетей.

Вот характеристики кластера, которые я получаю:

$csize
[1]   5 608   2   4   5   2

$no
[1] 6

Одна вершина в небольшом кластере - это даже огромный аэропорт, который должен быть связан со многими другими, а не только с одним другим...

ОБНОВЛЕНИЕ: я теперь обновил до последней версии igraph, но это все еще не работает. Я загрузил примерную часть своих данных в виде файла.txt здесь: USAN_numS.txt

Было бы замечательно, если бы кто-то имел представление о том, что я сделал не так. Спасибо

1 ответ

Решение

Итак, как я сказал выше в своем комментарии, возможный источник путаницы состоит в том, что ваш граф имеет символические имена вершин, которые на самом деле являются числами и не соответствуют идентификаторам вершин igraph. Обходной путь - отбросить имена вершин или указать их явно при создании графа, чтобы они соответствовали идентификаторам вершин igraph.

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

Возможно, сеть действительно состоит из нескольких компонентов, или в файле есть ошибки.

library(igraph)
USAN_num1 <- read.table('USAN_numS.txt', header=T)
USAN_g_num1 <- graph.data.frame(USAN_num1,
                   vertices=data.frame(id=1:max(USAN_num1[,1:2])))    
clu <- clusters(USAN_g_num1)
clu$csize
## [1]   5 607   2   4   5   1   2   1
## The '1's appear because we counted the vertices that are 
## not in the table

## Third component has two vertices only, let's check them in the
## original table
which(clu$membership == 3)
## [1]  64 617

## List the table rows where any of these two appear
USAN_num1[ USAN_num1[,1] %in% c(64, 617) | USAN_num1[,1] %in% c(64, 617), ]
##     ORIGN DESTN PAX
## 691    64   617 636
Другие вопросы по тегам