#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!