Home > Enterprise >  How to obtain a closeness score bounded between 0 and 1
How to obtain a closeness score bounded between 0 and 1

Time:02-07

I would like to calculate the closeness of a network like e.g.

relations=structure(list(From = c("France", "Italy", "Malta", "Spain", 
"Germany", "Austria", "Luxembourg", "Luxembourg", "Luxembourg", 
"Greece", "Slovakia", "Belgium", "Luxembourg", "Estonia", "Germany", 
"Netherlands", "Netherlands", "Cyprus", "Greece", "Lithuania", 
"Estonia", "Greece", "Lithuania", "Slovakia", "Netherlands", 
"Luxembourg", "Estonia", "Malta", "Belgium", "Cyprus", "Austria", 
"Estonia", "Austria", "Germany", "Austria", "Netherlands", "Portugal", 
"Portugal", "Estonia", "Italy", "Spain", "Finland", "Belgium", 
"Spain", "Estonia", "Latvia", "Luxembourg", "Luxembourg", "Netherlands", 
"Italy", "Lithuania", "Cyprus", "Ireland", "Luxembourg", "Ireland", 
"Spain", "Belgium", "Latvia", "Netherlands", "Italy", "Slovenia", 
"Netherlands", "Greece", "Spain", "Austria", "Finland", "Malta", 
"Spain", "Austria", "Lithuania", "France", "Portugal", "Cyprus", 
"Finland", "Spain", "Spain", "Belgium", "Germany", "Germany", 
"Greece", "Netherlands", "Luxembourg", "Estonia", "Ireland", 
"Italy", "Portugal", "Greece", "Estonia", "Belgium", "Germany", 
"Slovenia", "Slovakia", "Lithuania", "Slovenia", "Portugal", 
"Portugal", "Slovakia", "France", "Portugal", "Netherlands"), 
    To = c("Slovakia", "Germany", "Portugal", "Austria", "Latvia", 
    "Cyprus", "Portugal", "Greece", "Italy", "Slovenia", "Ireland", 
    "Malta", "Ireland", "Germany", "Cyprus", "Portugal", "Slovenia", 
    "Italy", "Luxembourg", "France", "Slovakia", "Netherlands", 
    "Greece", "France", "Ireland", "Netherlands", "Cyprus", "Germany", 
    "Portugal", "Austria", "Luxembourg", "Austria", "Spain", 
    "Netherlands", "Belgium", "Cyprus", "Cyprus", "Luxembourg", 
    "Finland", "Belgium", "Lithuania", "Austria", "Spain", "Slovenia", 
    "Luxembourg", "Finland", "Slovenia", "Germany", "Austria", 
    "Slovenia", "Slovenia", "Portugal", "Finland", "Lithuania", 
    "Latvia", "France", "Netherlands", "Cyprus", "Spain", "Malta", 
    "France", "Finland", "Belgium", "Latvia", "Slovenia", "Slovenia", 
    "Cyprus", "Slovakia", "Slovakia", "Latvia", "Austria", "Ireland", 
    "Luxembourg", "Belgium", "Italy", "Estonia", "Greece", "Slovakia", 
    "Belgium", "Italy", "Latvia", "Malta", "Greece", "France", 
    "Greece", "Netherlands", "France", "Slovenia", "Latvia", 
    "Finland", "Austria", "Slovenia", "Belgium", "Cyprus", "Greece", 
    "Slovenia", "Cyprus", "Finland", "Malta", "Germany"), weight = c(3.63689639539779e-09, 
    2.36155345798604e-11, 1.90981717262912e-08, 1.27550515412245e-09, 
    2.75032212941667e-09, 3.79663088493923e-08, 1.42368280746262e-08, 
    1.51146811601353e-08, 1.75314892144034e-09, 2.07956027448449e-08, 
    1.38623943876156e-07, 1.92893849444567e-08, 5.66419694274739e-08, 
    5.8089561312222e-09, 1.95827364947702e-09, 6.7071674411728e-10, 
    4.23667746162198e-09, 4.62966220873406e-08, 1.21403390886489e-07, 
    1.26979107479853e-08, 5.59978765605208e-07, 3.14788992090851e-09, 
    5.0058794053616e-07, 5.22186410794211e-09, 9.21607337940845e-10, 
    2.51322812227745e-09, 3.04984607426863e-07, 3.20992561385791e-09, 
    8.92180336424503e-10, 6.12766236972513e-08, 1.20231538847898e-08, 
    1.34589665048046e-07, 8.84238627642763e-10, 2.63370671763944e-11, 
    1.11903749128791e-09, 1.16731679208085e-08, 4.99654438989995e-08, 
    2.90162442064053e-08, 2.55621731534268e-09, 1.58298464637584e-10, 
    5.07475932446428e-08, 2.54927518867625e-09, 2.24427326793633e-10, 
    4.49723284363684e-09, 2.43010060636845e-06, 1.90760030501003e-08, 
    6.35902610582491e-08, 5.48833215255332e-10, 4.06612010446768e-10, 
    5.32889353797193e-10, 1.23745070305762e-06, 8.89608483306497e-07, 
    3.75876719292064e-09, 4.44758324449273e-07, 1.35536579831994e-07, 
    5.42265922046125e-11, 4.8233448207134e-11, 3.4286615533894e-07, 
    2.0214285544428e-10, 8.57988303618593e-10, 1.35631258148319e-09, 
    7.97944858545598e-10, 4.2673026648725e-09, 9.28491399244895e-08, 
    1.03420112425729e-09, 2.4972909387896e-08, 8.12118760999133e-07, 
    1.31225365800221e-08, 1.77287287047586e-09, 6.53958727055997e-09, 
    3.05841917976996e-10, 9.20687775127977e-09, 4.32323785012335e-07, 
    8.40653865200987e-10, 1.23500809608508e-10, 6.59008808575339e-08, 
    1.13962199159936e-09, 4.68300414991578e-10, 3.54758342726504e-11, 
    6.55880483863129e-10, 1.17833628272869e-08, 5.08802989644665e-07, 
    7.22191649442396e-07, 2.7028184600344e-10, 2.2810918951755e-10, 
    8.10987753872438e-10, 1.50406384816011e-09, 5.46176491471454e-06, 
    2.32716789835402e-08, 2.10873259303399e-10, 1.81735402994258e-09, 
    9.71369590422109e-09, 2.01941765282435e-08, 1.8961914804496e-07, 
    9.4461402995167e-09, 1.69816623519093e-07, 9.16774899583353e-08, 
    8.54588845128718e-10, 4.79160495478785e-08, 2.31994460360924e-11
    )), row.names = c(NA, -100L), class = c("tbl_df", "tbl", 
"data.frame"))
actors= c("Slovakia", "Germany", "Portugal", "Austria", "Latvia", "Cyprus", 
"Greece", "Italy", "Slovenia", "Ireland", "Malta", "Luxembourg", 
"France", "Netherlands", "Spain", "Belgium", "Finland", "Lithuania", 
"Estonia")
g <- graph_from_data_frame(relations, directed=TRUE, vertices=actors)

by using package igraph. Using function closeness I obtain:

closeness(g)
   Slovakia     Germany    Portugal     Austria      Latvia      Cyprus      Greece       Italy    Slovenia     Ireland 
    4002492     7111002     6478738     6502665     2017834     1029940     6615891     7164685     5533119     6240785 
      Malta  Luxembourg      France Netherlands       Spain     Belgium     Finland   Lithuania     Estonia 
    5071100     7243749     6342911     7121291     7144000     7090895     6415382     3086085     7411727  

I would like to obtain a normalized closeness score bounded between 0 and 1. It is 0 if a node is an isolate, and 1 if a node is directly connected all others. What can I do

CodePudding user response:

In the function, you can call for "normalized = TRUE" because it is "FALSE" by default. Sidenote: It is helpful if you add the code you used to calculate closeness.

closeness(
  graph,
  vids = V(graph),
  mode = c("out", "in", "all", "total"),
  weights = NULL,
  normalized = TRUE
)

CodePudding user response:

Have you tried normalizing it yourself out of igraph? You might use caret package:

library(caret)
c1 <-closeness(g)
df <- tibble(actors = actors,
             close = c1)
df_normalized <- df %>% 
  preProcess(., method=c("range")) %>% 
  predict(., df)

df_normalized

  •  Tags:  
  • Related