r语言 - igraph 中的接近度规范化似乎不起作用



我从一个包含(符号)边列表和权重的数据帧构建了一个图形。这是数据帧:

>dput(y)
structure(list(from = c("United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"Togo", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "Brunei", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "Bangladesh", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "Tunisia", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "Senegal", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "Gambia", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom", 
"United Kingdom", "United Kingdom", "United Kingdom", "United Kingdom"
), to = c("Antigua", "Argentina", "Australia", "Austria", "Bahamas", 
"Bahrain", "Bangladesh", "Barbados", "Belgium", "Bermuda", "Bolivia", 
"Botswana", "Brazil", "British Virgin", "Bulgaria", "Burkina Faso", 
"Canada", "Cayman Islands", "Chile", "China", "Colombia", "Costa Rica", 
"Croatia", "Cuba", "Cyprus", "Czech Republic", "Dem Rep Congo", 
"Denmark", "Dominican Rep", "Ecuador", "Egypt", "Estonia", "Finland", 
"France", "Gabon", "Georgia", "Germany", "Ghana", "Gibraltar", 
"Greece", "Greenland", "Guernsey", "Guinea", "Guyana", "Honduras", 
"Hong Kong", "Hungary", "Iceland", "India", "Indonesia", "Iran", 
"Ireland-Rep", "Isle of Man", "Israel", "Italy", "Ivory Coast", 
"Jamaica", "Japan", "Jersey", "Jordan", "Kazakhstan", "Kenya", 
"Kyrgyzstan", "Lebanon", "Libya", "Liechtenstein", "Lithuania", 
"Luxembourg", "Madagascar", "Madagascar", "Malaysia", "Malta", 
"Mauritania", "Mauritius", "Mexico", "Monaco", "Montenegro", 
"Morocco", "Mozambique", "Myanmar(Burma)", "Namibia", "Nepal", 
"Neth Antilles", "Netherlands", "New Zealand", "Nigeria", "Norway", 
"Oman", "Pakistan", "Panama", "Paraguay", "Peru", "Philippines", 
"Poland", "Portugal", "Puerto Rico", "Rep of Congo", "Rep of Congo", 
"Romania", "Russian Fed", "Rwanda", "Saudi Arabia", "Serbia & Mont.", 
"Serbia & Mont.", "Sierra Leone", "Singapore", "Slovak Rep", 
"Slovenia", "South Africa", "South Korea", "Spain", "Sri Lanka", 
"Sweden", "Switzerland", "Taiwan", "Tajikistan", "Tanzania", 
"Thailand", "Turkey", "Uganda", "Ukraine", "United Kingdom", 
"United States", "Unknown", "US Virgin Is", "Utd Arab Em", "Uzbekistan", 
"Venezuela", "Vietnam", "Zambia", "Zimbabwe"), weight = c(0.00652158317953266, 
0.000647329216751068, 0.0000251029566387844, 0.000214174129564211, 
0.0456767003151692, 0.00508385824169679, 0.00186393289841566, 
0.158755357993332, 0.000182399538893966, 0.0000415260352876621, 
0.00594332445796881, 0.01093302429318, 0.000114591772539915, 
0.00429007790781481, 0.00284147415679254, 0.0500675912481851, 
0.0000287088339723346, 0.00263403275683136, 0.000448611949766228, 
0.000679452144147131, 0.000252040964722078, 0.0136804520021342, 
0.00654146306362881, 0.526315789473684, 0.00191543727517555, 
0.00017092079991618, 0.00132017906908893, 0.0000627870348540249, 
0.240153698366955, 0.0132308384382318, 0.000733717703580983, 
0.0114161767224157, 0.0001650156302805, 0.000012155463860949, 
0.0154993102806925, 0.00647282707195195, 0.00000360412192179335, 
0.152230172020094, 0.0041524790299809, 0.000592713769629939, 
0.242130750605327, 0.00135643063417201, 0.5, 0.0434782608695652, 
0.00117508813160987, 0.000221503566207416, 0.0011185457116076, 
0.000215847012817643, 0.0000670498565971192, 0.000454026832077722, 
0.305530094714329, 0.0000503965198179275, 0.000317324724102019, 
0.00273860057510612, 0.0000367428222896657, 0.194287934719254, 
0.0724270297675092, 0.000171929928925887, 0.00109404761514031, 
0.0500025001250063, 0.0027947871629836, 0.056695770495521, 0.175469380593087, 
0.0431034482758621, 1.96078431372549, 0.111831804965332, 0.00155982636012959, 
0.000119064940161533, 0.0171291538198013, 1.5625, 0.00732745671304947, 
0.00243336237145763, 0.00729394602479942, 0.023089355806973, 
0.000311509885298945, 0.00462855820411942, 0.150715900527506, 
0.0199992000319987, 0.137703112090333, 0.00384711562506011, 0.0333355557037136, 
0.0842815002107038, 0.0445811600017832, 0.0000184857050227916, 
0.000437414895464401, 0.0146017376067752, 0.000147070437768394, 
0.135080372821829, 0.0272420180887, 0.000557344010558325, 0.0625, 
0.000839938046169714, 0.00254634993468612, 0.000289772340360796, 
0.000306490675634175, 0.0333333333333333, 0.0930232558139535, 
0.0357142857142857, 0.00229049421993784, 0.00024170323435183, 
0.198609731876862, 0.0213269636801809, 0.046189376443418, 0.0176056338028169, 
0.035297024460838, 0.000462550522080774, 0.0252748641476052, 
0.00447631581303324, 0.000064428161729891, 0.000223055060249402, 
0.0000167409403597136, 0.0205846027171676, 0.0000149409029764804, 
0.0000902779740069852, 0.00052983585155483, 0.228571428571429, 
0.155787505842031, 0.00130985033650055, 0.0000850992563686581, 
0.0333333333333333, 0.0053616715547239, 0.085397096498719, 0.00000198776814942642, 
0.0568181818181818, 0.914076782449726, 0.00308342198171531, 0.338983050847458, 
0.00303167187608951, 0.00502777847608034, 0.00731743011854237, 
0.075993616536211)), row.names = c(20L, 51L, 113L, 142L, 158L, 
167L, 176L, 183L, 218L, 239L, 250L, 266L, 304L, 320L, 361L, 367L, 
436L, 454L, 478L, 524L, 548L, 565L, 581L, 585L, 595L, 626L, 631L, 
661L, 669L, 682L, 704L, 737L, 773L, 820L, 826L, 837L, 888L, 899L, 
906L, 926L, 929L, 948L, 953L, 957L, 964L, 1003L, 1035L, 1039L, 
1077L, 1103L, 1110L, 1134L, 1144L, 1164L, 1206L, 1212L, 1221L, 
1252L, 1263L, 1273L, 1294L, 1304L, 1317L, 1336L, 1341L, 1342L, 
1360L, 1382L, 1398L, 1400L, 1436L, 1449L, 1458L, 1466L, 1498L, 
1516L, 1527L, 1536L, 1546L, 1552L, 1561L, 1562L, 1569L, 1618L, 
1642L, 1655L, 1699L, 1703L, 1715L, 1728L, 1743L, 1765L, 1784L, 
1817L, 1839L, 1846L, 1856L, 1857L, 1892L, 1934L, 1938L, 1946L, 
1977L, 1981L, 1986L, 2024L, 2046L, 2062L, 2097L, 2125L, 2168L, 
2180L, 2229L, 2269L, 2291L, 2294L, 2302L, 2329L, 2377L, 2388L, 
2416L, 2438L, 2557L, 2562L, 2578L, 2593L, 2605L, 2630L, 2647L, 
2676L, 2684L), class = "data.frame")
我使用了以下代码
g <- graph_from_data_frame(y, directed=TRUE, vertices=unique(c(y$from,y$to)))
closeness_score=as.data.frame(closeness(g, mode="out",normalized = T))

计算结果网络的亲密度中心性(模式"out"测量从顶点开始的路径)。所有国家的接近度结果值为

United Kingdom                                  13.173718
Togo                                            19.973000
Brunei                                          58.380000
Bangladesh                                      11.865000
Tunisia                                         10.750000
Senegal                                         21.650000
Gambia                                           6.222462

NaN。我无法解释这个结果,因为如果我不执行规范化,即

closeness_score=as.data.frame(closeness(g, mode="out",normalized = F))

我获得

United Kingdom                                 0.10455332
Togo                                          19.97300000
Brunei                                        58.38000000
Bangladesh                                    11.86500000
Tunisia                                       10.75000000
Senegal                                       21.65000000
Gambia                                         0.04899576

正如我们在图R手册中所读到的,"标准化是通过将原始接近度乘以n-1来执行的,其中n是图中的顶点数"。那么,为什么多哥、文莱、孟加拉国、突尼斯和塞内加尔的接近分数没有变化呢?

手册有点过时了。我会在1.3.2版本中更新它。如果有疑问,请检查igraph C库的文档,如果您发现任何与R文档不一致的地方,请报告问题。


你的图不是(强)连接的,对于这样的图,亲密性没有多大意义。通常,顶点v的接近度定义为顶点v到所有其他顶点的平均距离的倒数。但是如果其他一些顶点不能从v到达呢?R/igraph 1.3只考虑到可到达顶点的距离。相应地,规范化是由可到达顶点的数量来完成的,而不是n-1。如果没有可达的顶点,它返回NaN。

简要:

  • 对于normalized=T,它计算从v到所有可到达顶点的平均距离的倒数。
  • 对于normalized=F,它计算从v到所有可到达顶点的距离和的倒数。

请注意,断开连接图的行为自1.2以来已更改,请参阅更改日志。1.2版本认为到不可达顶点的距离为n,这完全是任意的,在数学上没有充分的根据。


考虑:

  • 你的意思是在这个图中考虑边缘方向
  • 谐波中心性更适合您的应用

最新更新