网络树状图级别不相加

Network Dendrogram Levels do not Add Up

我正在处理一个需要考虑数千个节点和边的大型网络。网络的代表可以在之前的问题中找到

但是,在计算网络内的节点数时,我 运行 在尝试计算加在一起导致下一级的节点数时遇到了问题。例如,

library(tidygraph)
library(ggraph)
library(tidyverse)

parent_child <- tribble(
  ~parent, ~child,
  "a", "b",
  "b", "c",
  "b", "d",
  "d", "e",
  "d", "f",
  "d", "g",
  "g", "z"
)

# converted to a dendrogram ------------

parent_child %>%
  as_tbl_graph() %>% 
  ggraph(layout = "dendrogram") +
  geom_node_point() +
  geom_node_text(aes(label = name),
                 vjust = -1,
                 hjust = -1) +
  geom_edge_elbow()

# Table of calculations ----------------------

parent_child %>% 
  as_tbl_graph() %>% 
  activate(nodes) %>% 
  mutate(n_community_out = local_size(order = graph_size(),
                                      mode = "out",
                                      mindist = 0)) %>% 
  as_tibble()

# Final Output Table -----------------------
# A tibble: 8 x 2
  name  n_community_out
  <chr>           <dbl>
1 a                   8
2 b                   7
3 d                   5
4 g                   2
5 c                   1
6 e                   1
7 f                   1
8 z                   1

上面的table表示从一个起始节点出来的连接节点数。但是,为什么某些级别加起来不能进入下一个级别? (节点 d + c != 节点 b)我一直在尝试向同事解释这一点,但无法充分解释网络在计算什么以及为什么将节点连接从一个位置添加到下一个位置不会导致下一个更高等级.

这个问题在有数千个节点的网络中更加严重,并且难以显示。无论如何,有谁知道如何解释为什么节点连接不加起来到下一个级别?非常感谢任何帮助。

您正在 one-off-by error。在比较它所连接的节点数时,您需要减去一个,因为您是通过将节点本身包括在连接的节点数中来计算的。

你的例子

Node D + Node E ?= Node B

你的table给出了值

...
2 b                   7
3 d                   5
...
5 c                   1
...

您有意设置 mindist = 0 以便在计算来自父节点的节点时,包括该节点本身。

这是查看方向性的快速视图。

library(tidygraph)
library(ggraph)
library(tidyverse)

parent_child <- tribble(
  ~parent, ~child,
  "a", "b",
  "b", "c",
  "b", "d",
  "d", "e",
  "d", "f",
  "d", "g",
  "g", "z"
)

plot(as_tbl_graph(parent_child))

reprex package (v0.3.0)

于 2020-11-25 创建

节点 C 不能指向其他任何东西,但由于 mindist = 0,它将计算自身并使其社区等于 1,就像它在您的 table 中一样。

节点D可以访问4个节点(efgz),当我们统计它自己时,它的局部邻域共有5个节点。

同样,节点 B 会计算它连接的所有节点,但也会计算它自己

因此,要获得要比较的实际计数,您需要减去一个。

Node D + Node E
=> 5 + 1
=> 6

Node B = 7
=> 7 - 1
=> 6