City Distance with MDS

Source of the distances: http://www.distancecalculator.net/ driving distance

city_names <- c("Prag", "Tabor", "Budweis", "Pilsen", "Brno", "Znojmo", "Wien", 
    "Linz", "Nikitsch")
dist_v <- c(0, 92, 147, 93, 205, 203, 331, 244, 427, 0, 0, 61, 124, 165, 152, 
    223, 158, 313, 0, 0, 0, 137, 217, 142, 195, 97, 285, 0, 0, 0, 0, 296, 293, 
    421, 230, 571, 0, 0, 0, 0, 0, 67, 133, 317, 228, 0, 0, 0, 0, 0, 0, 89, 222, 
    179, 0, 0, 0, 0, 0, 0, 0, 184, 93, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 
    0, 0, 0, 0, 0, 0)

n <- length(city_names)
dist.m <- matrix(dist_v, ncol = n, byrow = TRUE)
colnames(dist.m) <- city_names
rownames(dist.m) <- city_names

## swap

for (j in 1:(n - 1)) {
    for (i in (j + 1):n) {
        dist.m[i, j] <- dist.m[j, i]
        dist.m[j, i] <- 0
    }
}

dist <- as.dist(dist.m)
dist
##          Prag Tabor Budweis Pilsen Brno Znojmo Wien Linz
## Tabor      92                                           
## Budweis   147    61                                     
## Pilsen     93   124     137                             
## Brno      205   165     217    296                      
## Znojmo    203   152     142    293   67                 
## Wien      331   223     195    421  133     89          
## Linz      244   158      97    230  317    222  184     
## Nikitsch  427   313     285    571  228    179   93  263

visualize with MDS

fit <- cmdscale(dist, eig = TRUE, k = 2)
points <- data.frame(x = fit$points[, 1], y = fit$points[, 2])
ggplot(points, aes(x = x, y = y)) + geom_point(data = points, aes(x = x, y = y)) + 
    geom_text(data = points, aes(x = x, y = y - 20, label = city_names)) + coord_fixed(ratio = 1) + 
    ggtitle("Driving Distance between Important Cities")

plot of chunk mds