Использование тидиграфа для получения узлов и метрик на уровне графов для каждой группы
Я опробую тидиграф о сетях, основанных на различных экспериментальных методах, и мне больше всего интересно узнать метрики по всему графу и, возможно, также метрики на уровне узлов. Кажется, я не могу понять, как работает тидиограф.
Я использую R v3.5 и Tidygraph v1.1.
Мои данные структурированы таким образом:
dat <- data.frame(Treatment = rep(c("A","B"),each = 2),
from = c("sp1","sp2","sp1","sp2"),
to = c("sp2","sp3","sp3","sp3"),
weight = runif(4))
Если я хочу получить для каждой процедуры метрику по всему графику, такую как диаметр, я бы соблазнился:
dat %>%
as_tbl_graph() %>%
activate(edges) %>%
group_by(Treatment) %>%
mutate(Diameter = graph_diameter(weights = weight))
Но я не уверен в результате, так как диаметры даны для каждого ребра, в то время как я ожидал бы одну меру на обработку (на график).
Точно так же, если я хочу получить некоторые метрики, такие как связность каждого узла для каждой обработки, это, кажется, не так просто, так как переменные обработки отбрасываются из таблицы узлов. Я пробовал различные способы взлома, такие как вставка идентификаторов процедур в столбцы from и to перед вызовом as_tbl_graph() следующим образом:
dat %>%
mutate(from = paste(from, Treatment, sep = "_"),
to = paste(to, Treatment, sep = "_")) %>%
as_tbl_graph() %>%
mutate(Treatment = substr(name, 5, 5), name = substr(name, 1, 3)) %>%
group_by(Treatment) %>%
mutate(Centrality = centrality_betweenness())
Но я получил ошибки, что полученные векторы были неправильного размера (6 вместо 3 или 1).
Есть ли способ с помощью тидиографа получить метрики на уровне группы и на уровне узла?
0 ответов
Я думаю, что это интересная проблема. Я пробовал несколько раз и до сих пор не нашел лучшего решения для этого. Но я подозреваю, что эта проблема нуждается morph()
функция для того, чтобы правильно отделить график. Опять же, я не так много изучал. Но здесь я даю простое решение проблемы диаметра, используя morph()
функция. Надеюсь, это поможет вам.
dat %>%
as_tbl_graph() %>%
activate(edges) %>%
morph(to_split,split_by = "edges")%>%
filter(Treatment=="A") %>%
mutate(Diameter = graph_diameter(weights = weight)) %>%
unmorph() %>% activate(edges) %>%
morph(to_split,split_by = "edges") %>%
filter(Treatment=="B") %>%
mutate(Diameter = graph_diameter(weights = weight)) %>%
unmorph()