Нахождение степени (центральности) всех узлов из асимметричной (направленной) матрицы смежности с R - PullRequest
0 голосов
/ 02 января 2019

network

У меня есть пример простой сети, представленной в виде матрицы смежности.

Я пытаюсь найти степень каждого узла / вершины (человека)

Как определено, степень узла - это количество соединений, которые он имеет с другими узлами.По соглашению, в направленной (то есть асимметричной) матрице отправителем связи является строка, а целью связи является столбец.

Матрица смежности (с 1 по диагонали):

matrix(c(1,0,1,0,1,1,1,0,1,1,1,1,0,0,1,1), ncol = 4)

Результат должен быть таким:

Боб: 2 Кэрол: 2 Тед: 3 Алиса: 1

Я пытался решить эту написание функции, но это не даетправильный результат (Кэрол = 1, а не 2)

degree_centralty <- function(x) rowSums(x != 0)-1

Я что-то не так делаю?

1 Ответ

0 голосов
/ 02 января 2019

Используя rowSums или colSums, вы учитываете только один тип соединения.То, что вы хотите, это объединение двух, и его можно найти следующим образом:

degree_centralty <- function(x) rowSums(x + t(x) != 0) - 1
degree_centralty(A)
# [1] 2 2 3 1

, где теперь x + t(x) - симметричная матрица.

...