Как я могу добавить матрицу географических расстояний в сеть igraph?

#r #igraph #sna

#r #igraph #sna

Вопрос:

У меня сеть igraph из 169 узлов (окрестностей). Я добавил некоторые атрибуты вершин, используя: V(g)$attribute . Я собираюсь изучить влияние географического расстояния между узлами (окрестностями). Я рассчитал расстояние между районами на основе долготы и широты:

 head(df)
neighbourhood     lon       lat
      1         41.47141  -81.75226
      2         41.47562  -81.74670
      3         41.47608  -81.73900
      .            .          .
      .            .          .

# Calculate the geographic distance matrix using  distm() from geosphere

dis.matrix <- (distm(cbind(df$lon, df$lat)))

# The result is a geographic matrix of 169x169 (distance in meters)
 

Теперь мой вопрос в том, как я могу добавить эти расстояния в сеть (g), чтобы изучить влияние расстояния на связанные узлы, используя экспоненциальную модель случайного графа ergm ().

Ответ №1:

Я думаю, вы ищете это.

 library(igraph)
library(geosphere)


df <- data.frame(neighbourhood = c(1, 2, 3),
                 lon           = c(41.47141, 41.47562, 41.47608),
                 lat           = c(-81.75226, -81.74670, -81.73900))

distance.matrix <- distm(subset(df, select = c(lon, lat)))

my.graph <- graph_from_adjacency_matrix(distance.matrix, mode = "undirected", weighted = TRUE)

# At attributes to the vertices.
V(my.graph)$name <- df$neighbourhood
V(my.graph)$lon  <- df$lon
V(my.graph)$lat  <- df$lat

# Remove duplicated edges.
my.graph <- simplify(my.graph)

# The distances are saved in the edges in the variable weight.
E(my.graph)$weight

plot(my.graph, edge.label = E(my.graph)$weight)
 

HTH!