Нанесите географические координаты вместе с координатами многомерного масштабирования в R

Описанная проблема связана с представлением координат многомерного шкалирования (МДШ) наряду с реальными точками данных (долготой и широтой городов).

Итак, у меня есть матрица расстояний, загруженная здесь. Записи в матрице представляют расстояния (в милях) между девятью городами США. Эта матрица является входом для MDS. MDS создает набор координат, которые я хочу нанести на карту.

Давайте сначала нарисуем карту США. (Рисунок приклеен ниже.)

library(ggplot2)
library(maps)
library(ggmap)

# Build dataframe for plotting map of USA
states <- map_data("state")
geo.city <-  c("Atlanta", "Boston", "Dallas", "Indianapolis", "Los Angeles", "Memphis", "St. Louis", "Spokane", "Tempa")
geo.codes <- geocode(geo.city)
geo.data <- data.frame(name = geo.city, long = geo.codes[, 1], lat = geo.codes[, 2])
# Plot map
ggplot(mapstates, aes(long, lat, group = group)) +
    geom_polygon(fill = I("grey85")) +
    geom_path(color = "gray") +
    coord_map(project="globular") +
    xlab("Longitude") + ylab("Latitude") +
    annotate("point", x = geo.data$long, y = geo.data$lat) +
    #annotate("point", x = fit$points[,1], y = fit$points[, 2]) +
    annotate("text", x = geo.data$long, y = geo.data$lat + 0.7, label = geo.data$name, size = 3) +
    theme_bw()

Рисунок 1

А теперь часть MDS:

my.data <- read.table(file = "https://dl.dropboxusercontent.com/u/540963/airline_distances.csv", header = TRUE, sep = ",", row.names = 1)
my.mat <- as.matrix(my.data)
D <- dist(my.mat)
fit <- cmdscale(d = D, k = 2)

Подогнанные координаты хранятся в объекте fit$points:

> fit$points
                   [,1]        [,2]
Atlanta      -1563.1298   -89.67381
Boston        -780.5404  2208.74325
Dallas        -202.2759 -1053.70443
Indianapolis -1198.6748  -181.96331
Los Angeles   3445.3295  -412.50061
Memphis      -1171.9280  -793.69762
St. Louis    -1018.1581  -622.13715
Spokane       3712.7007   438.84657
Tampa        -1223.3233   506.08712

Мой вопрос: как масштабировать эти точки, чтобы добавить их на мою карту. Любые указатели будут очень признательны.


person Andrej    schedule 06.08.2014    source источник
comment
Я думаю, что это выполнимо. Я не уверен, что у меня есть время, чтобы закончить решение, но эта ссылка может помочь: gastonsanchez.com/blog/how-to/2013/01/23/MDS-in-R.html   -  person Hack-R    schedule 06.08.2014


Ответы (1)


Я вставляю свое собственное решение. Нам нужно перемасштабировать компьютерные координаты MDS по среднему и ул. отклонение реальных значений долготы и широты:

fit <- cmdscale(D, eig = TRUE, k = 2)
my.mean <- apply(geo.codes, 2, mean)
my.sd <- apply(geo.codes, 2, sd)
city.loc <- fit$points
city.loc[, 1] <- -city.loc[, 1]
city.loc <- rescale(city.loc, my.mean, my.sd)

(Для функции rescale() загрузите библиотеку psych.) Результат будет следующим. введите здесь описание изображения

person Andrej    schedule 06.08.2014