Otra forma de enfocar el problema de agrupar datos es intentando representar los datos en menos dimensiones.

dt <- readRDS("dta/datos-criminalidad.RDS")

Para ello empezamos por calcular la matriz de distancias entre las observaciones.

sdt <- scale(dt)
d <- dist(sdt)

A continuación, encontramos la representación en dos dimensiones que mejor preserva la matriz de distancias que acabamos de calcular.

fit <- cmdscale(d, eig=TRUE, k=2) 

Ahora podemos ver cómo se presentan los datos en esta nueva representación en dos dimensiones.

x <- fit$points[,1]
y <- fit$points[,2]
plot(x, y,
     xlab="Coordinate 1",
     ylab="Coordinate 2",
     main="Metric MDS",
     type="n")
text(x, y, labels = 1:nrow(sdt), cex=.7)
LS0tIAp0aXRsZTogIkVzY2FsYWRvIG11bHRpZGltZW5zaW9uYWwgY2zDoXNpY28iCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVCICVkLCAlWScpYCIKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRSwgY2FjaGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChldmFsID0gRkFMU0UpCmtuaXRyOjpvcHRzX2NodW5rJHNldChmaWcucGF0aCA9ICcuL2Fzc2V0cy8nKQpgYGAKCk90cmEgZm9ybWEgZGUgZW5mb2NhciBlbCBwcm9ibGVtYSBkZSBhZ3J1cGFyIGRhdG9zIGVzIGludGVudGFuZG8gcmVwcmVzZW50YXIgbG9zCmRhdG9zIGVuIG1lbm9zIGRpbWVuc2lvbmVzLiAKYGBge3J9CmR0IDwtIHJlYWRSRFMoImR0YS9kYXRvcy1jcmltaW5hbGlkYWQuUkRTIikKYGBgCgpQYXJhIGVsbG8gZW1wZXphbW9zIHBvciBjYWxjdWxhciBsYSBtYXRyaXogZGUgZGlzdGFuY2lhcyBlbnRyZSBsYXMgb2JzZXJ2YWNpb25lcy4KYGBge3J9CnNkdCA8LSBzY2FsZShkdCkKZCA8LSBkaXN0KHNkdCkKYGBgCgpBIGNvbnRpbnVhY2nDs24sIGVuY29udHJhbW9zIGxhIHJlcHJlc2VudGFjacOzbiBlbiBkb3MgZGltZW5zaW9uZXMgcXVlIG1lam9yCnByZXNlcnZhIGxhIG1hdHJpeiBkZSBkaXN0YW5jaWFzIHF1ZSBhY2FiYW1vcyBkZSBjYWxjdWxhci4gCmBgYHtyfQpmaXQgPC0gY21kc2NhbGUoZCwgZWlnPVRSVUUsIGs9MikgCmBgYAoKQWhvcmEgcG9kZW1vcyB2ZXIgY8OzbW8gc2UgcHJlc2VudGFuIGxvcyBkYXRvcyBlbiBlc3RhIG51ZXZhIHJlcHJlc2VudGFjacOzbiBlbgpkb3MgZGltZW5zaW9uZXMuCmBgYHtyfQp4IDwtIGZpdCRwb2ludHNbLDFdCnkgPC0gZml0JHBvaW50c1ssMl0KcGxvdCh4LCB5LAogICAgIHhsYWI9IkNvb3JkaW5hdGUgMSIsCiAgICAgeWxhYj0iQ29vcmRpbmF0ZSAyIiwKICAgICBtYWluPSJNZXRyaWMgTURTIiwKICAgICB0eXBlPSJuIikKdGV4dCh4LCB5LCBsYWJlbHMgPSAxOm5yb3coc2R0KSwgY2V4PS43KQpgYGAK