“最大强连通分量(LSCC)”在 igraph 中等效测量?

问题描述 投票:0回答:1

我正在尝试复制“最大强连通分量(LSCC)”测量,这似乎在通用网络分析 R 'igraph' 包代码中不存在。我能找到的最好的方法是“igraph”包中的“largest_component”命令,但这只提供了银行名称列表,没有我需要的数字。所以我想这只是对公司名称进行排序,而不是像论文快照中的红色框(如下)那样给我需要的值。

如何使用 R 程序复制此 LSCC 网络分析值?

enter image description here

我尝试使用 R 代码,如此链接

但是,它没有给出我需要的数值,例如程度、紧密度、中心性等网络数值类型。

我尝试的代码如下(它没有给出我需要的任何数值)。 我并不是说“largest_component”是这里唯一可用的方法。我只是说我也尝试过这段代码,因为你希望我在我的问题中提供任何代码,尽管这没有给我答案

> library(igraph)
> largest_component(data,mode = "strong")
IGRAPH cd5f7d1 DN-- 94 988 -- 
+ attr: name (v/c)
+ edges from cd5f7d1 (vertex names):
 [1] ABCB US Equity->COLB US Equity ABCB US Equity->FULT US Equity ABCB US Equity->GABC US Equity ABCB US Equity->INDB US Equity
 [5] ABCB US Equity->BOH US Equity  ABCB US Equity->HOPE US Equity ABCB US Equity->NTRS US Equity ABCB US Equity->ONB US Equity 
 [9] ABCB US Equity->PB US Equity   ABCB US Equity->RNST US Equity ABCB US Equity->STBA US Equity ABCB US Equity->SASR US Equity
[13] ABCB US Equity->SBCF US Equity ABCB US Equity->SBSI US Equity ABCB US Equity->TRMK US Equity ABCB US Equity->UBSI US Equity
[17] ABCB US Equity->WFC US Equity  ABCB US Equity->SRCE US Equity ABCB US Equity->FFBC US Equity ABCB US Equity->PFBC US Equity
[21] ABCB US Equity->CADE US Equity C US Equity   ->CFR US Equity  C US Equity   ->EEFT US Equity C US Equity   ->NBTB US Equity
[25] C US Equity   ->OCFC US Equity C US Equity   ->PNFP US Equity C US Equity   ->PB US Equity   C US Equity   ->STBA US Equity
[29] C US Equity   ->SASR US Equity C US Equity   ->SBSI US Equity C US Equity   ->WABC US Equity C US Equity   ->BANR US Equity
+ ... omitted several edges
> components(gD_12_2022,mode = "strong")

我的数据片段如下:

 Date        i               j
09/2005 ABCB US Equity  CHCO US Equity
09/2005 ABCB US Equity  CHCO US Equity
09/2005 ABCB US Equity  CHCO US Equity
09/2005 ABCB US Equity  COLB US Equity
09/2005 ABCB US Equity  COLB US Equity
09/2005 ABCB US Equity  COLB US Equity
09/2005 ABCB US Equity  FITB US Equity
09/2005 ABCB US Equity  FNB US Equity
09/2005 ABCB US Equity  HBAN US Equity
09/2005 ABCB US Equity  HBAN US Equity
09/2005 ABCB US Equity  BOH US Equity
09/2005 ABCB US Equity  BOH US Equity
09/2005 ABCB US Equity  BOH US Equity
09/2005 ABCB US Equity  MTB US Equity
09/2005 ABCB US Equity  PNFP US Equity
09/2005 ABCB US Equity  SYBT US Equity
09/2005 ABCB US Equity  SYBT US Equity
09/2005 ABCB US Equity  SYBT US Equity
09/2005 ABCB US Equity  SIVBQ US Equity
09/2005 ABCB US Equity  SIVBQ US Equity
09/2005 ABCB US Equity  SIVBQ US Equity
09/2005 ABCB US Equity  TRMK US Equity
09/2005 ABCB US Equity  WFC US Equity
09/2005 ABCB US Equity  ZION US Equity
09/2005 ABCB US Equity  ZION US Equity
09/2005 ABCB US Equity  ZION US Equity
09/2005 ABCB US Equity  BRKL US Equity
09/2005 ABCB US Equity  BRKL US Equity
09/2005 ABCB US Equity  BRKL US Equity
09/2005 ABCB US Equity  CFFN US Equity

对于其他网络度量,如程度、中心性等,正如我已经提到的,我可以毫无问题地生成它们,因为它们的工作原理如下(显示我的输出片段)。只有 LSCC 我没有找到任何合适的代码可以从 R 运行或执行:

Firms           Date    Degree       Closeness  Betweenness Clustering  Eigenvector
ABCB.US.Equity  09_2005 0.494623656 0.540697674 0.00484853  0.391304348 0.128802216
CHCO.US.Equity  09_2005 0.784946237 0.540697674 0.009498633 0.386809269 0.496275598
COLB.US.Equity  09_2005 0.612903226 0.550295858 0.007786027 0.386243386 0.265205502
FITB.US.Equity  09_2005 0.838709677 0.611842105 0.015768372 0.374307863 0.257392456
FNB.US.Equity   09_2005 0.494623656 0.436619718 0.002341893 0.383333333 0.47983247
HBAN.US.Equity  09_2005 0.64516129  0.510989011 0.008919628 0.342245989 0.507258004
BOH.US.Equity   09_2005 0.462365591 0.502702703 0.003176559 0.418300654 0.230633224
MTB.US.Equity   09_2005 0.731182796 0.513812155 0.011603933 0.346031746 0.560058904
PNFP.US.Equity  09_2005 0.731182796 0.502702703 0.006913042 0.406722689 0.668115579
SYBT.US.Equity  09_2005 1.494623656 0.611842105 0.041680331 0.352685051 0.70931023
r network-programming igraph
1个回答
0
投票

问题中提供的数据片段仅包含来自单个银行的传出连接,因此不足以演示问题的解决方案。这是一个可复制的玩具示例,应该足够了:

library(igraph)

set.seed(1)

d <- replicate(2, sample(paste("Bank", LETTERS[1:10]), 10, TRUE)) |>
  as.data.frame()

d <- unique(d[d[[1]] != d[[2]], ])
data <- graph_from_data_frame(d)

plot(data)

enter image description here

根据我对您的方法论论文的阅读,LSCC 是数据集中从每家银行可以到达的其他银行的比例,仅遵循传出边缘。我们可以使用函数

igraph
找到这是
subcomponent
。例如,要查找我们可以从银行 B 联系到的所有银行,我们可以这样做:

subcomponent(data, V(data)["Bank B"], "out")
#> + 5/9 vertices, named, from 4b4f304:
#> [1] Bank B Bank G Bank E Bank I Bank F

您可以确认在上面的例子中银行G、E、I和F都可以从银行B到达。

我们有兴趣获得银行 B 可以到达的所有银行(不包括其本身)的比例。这只是子组件中的节点数(减去银行 B)除以银行总数(减去银行 B)。换句话说:

(length(subcomponent(data, V(data)["Bank B"], "out")) - 1) / (length(V(data)) - 1)
#> [1] 0.5

这个数字意味着从银行 B 可以到达一半的其他银行。

要获取所有银行的结果,我们可以使用

lapply
:

result <- lapply(V(data), function(v) {
   (length(subcomponent(data, v, "out")) - 1) / (length(V(data)) - 1)
  })

result
#> $`Bank I`
#> [1] 0.125
#> 
#> $`Bank D`
#> [1] 0.125
#> 
#> $`Bank G`
#> [1] 0.375
#> 
#> $`Bank A`
#> [1] 0.375
#> 
#> $`Bank B`
#> [1] 0.5
#> 
#> $`Bank C`
#> [1] 0.25
#> 
#> $`Bank E`
#> [1] 0.125
#> 
#> $`Bank J`
#> [1] 0
#> 
#> $`Bank F`
#> [1] 0

如果您希望将其放入数据框中,您可以这样做:

result |>
  as.data.frame(check.names = FALSE) |>
  t() |>
  as.data.frame() |>
  tibble::rownames_to_column() |>
  setNames(c('Bank', "LSCC")) |>
  dplyr::arrange(Bank)
#>     Bank  LSCC
#> 1 Bank A 0.375
#> 2 Bank B 0.500
#> 3 Bank C 0.250
#> 4 Bank D 0.125
#> 5 Bank E 0.125
#> 6 Bank F 0.000
#> 7 Bank G 0.375
#> 8 Bank I 0.125
#> 9 Bank J 0.000
© www.soinside.com 2019 - 2024. All rights reserved.