Multidimensional Scaling

Data

Recopilada de las principales ciudades del Perú

library(kableExtra)
dreal <- read.table("distanciareal.csv", header = TRUE,fill = TRUE, sep = ";")
dreal %>% kable() %>% kable_styling()
Distancias Abancay Arequipa Ayacucho Cajamarca Cerro.de.Pasco Cusco Chachapoyas Chiclayo Chimbote Huancavelica Huancayo Huanuco Huaraz Ica Lima Moquegua Moyobamba Piura Pucallpa Pto..Maldonado Puno Tacna Trujillo Tumbes
Abancay NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Arequipa 340.07 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Ayacucho 154.19 461.75 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Cajamarca 946.62 1276.85 815.47 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Cerro de Pasco 492.18 815.28 353.54 463.08 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Cusco 99.21 323.13 246.96 1005.81 563.13 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Chachapoyas 987.68 1324.75 868.47 128.76 526.75 1036.48 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Chiclayo 1070.85 1401.42 940.06 152.43 586.97 1142.47 227.72 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Chimbote 802.62 1117.50 658.63 212.30 311.96 875.09 328.15 291.19 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Huancavelica 245.28 546.42 91.54 735.31 272.30 335.39 795.52 855.55 571.22 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Huancayo 307.12 624.22 162.65 653.93 191.18 387.35 711.75 777.41 496.88 84.20 NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Huanuco 550.47 881.43 421.26 396.28 84.20 612.86 449.26 529.62 275.08 346.25 262.56 NA NA NA NA NA NA NA NA NA NA NA NA NA
Huaraz 681.35 1002.50 541.26 284.51 189.18 750.92 370.42 398.92 127.04 456.79 378.62 148.45 NA NA NA NA NA NA NA NA NA NA NA NA
Ica 311.43 519.90 191.53 825.24 380.22 410.57 903.01 327.66 636.49 164.26 229.31 463.30 540.78 NA NA NA NA NA NA NA NA NA NA NA
Lima 483.11 764.57 328.96 567.72 174.54 572.85 655.80 664.14 372.98 238.01 197.98 252.39 286.11 264.08 NA NA NA NA NA NA NA NA NA NA
Moquegua 448.27 109.50 571.08 1386.31 924.57 423.53 1434.05 1510.45 1225.91 655.14 733.45 990.94 1111.54 620.84 870.36 NA NA NA NA NA NA NA NA NA
Moyobamba 955.98 1295.66 847.78 212.58 523.14 996.45 99.76 327.33 382.75 781.96 697.80 440.55 394.14 903.36 670.15 1404.23 NA NA NA NA NA NA NA NA
Piura 1265.11 1592.20 1130.47 320.25 776.93 1325.87 328.03 194.84 486.02 1047.38 968.01 714.78 590.72 1122.44 858.99 1701.46 416.17 NA NA NA NA NA NA NA
Pucallpa 611.41 949.57 532.65 457.45 317.54 637.16 436.44 609.88 450.99 491.78 416.00 252.90 351.73 644.97 491.11 1055.69 373.27 759.13 NA NA NA NA NA NA
Pto. Maldonado 416.81 492.43 549.98 1187.14 799.70 319.10 1185.96 1335.39 1099.68 628.63 658.03 824.70 972.74 727.14 855.24 544.92 1123.20 1502.18 750.94 NA NA NA NA NA
Puno 393.61 172.73 541.52 1336.09 885.60 332.21 1368.69 1470.15 1196.22 632.52 700.15 941.19 1074.72 644.34 865.75 179.33 1327.67 1655.70 964.25 371.82 NA NA NA NA
Tacna 562.76 225.48 687.13 1502.33 1040.61 532.16 1549.48 1626.41 1341.57 771.01 849.49 1106.87 1227.51 732.11 984.46 116.05 1518.64 1817.49 1167.49 612.80 242.62 NA NA NA
Trujillo 909.28 1229.29 768.68 119.30 417.14 977.58 247.63 174.44 117.23 682.96 606.16 366.93 227.98 753.36 490.10 1338.10 324.33 369.09 493.76 1186.57 1302.55 1453.96 NA NA
Tumbes 1394.16 1727.97 1267.62 453.99 916.58 1446.92 412.46 361.58 645.74 1188.88 1106.93 84662.00 737.51 1277.04 1016.27 1837.47 474.06 182.17 844.49 1595.43 1778.97 1953.36 529.15 NA

Preparación de la data

Hacemos que las ciudades sean el nombre de fila

La función as.dist() convierte nuestra data en una matriz de distancias

rownames(dreal) <- dreal$Distancias
dreal$Distancias <- NULL
dreal <- as.dist(dreal)
dreal
##                 Abancay Arequipa Ayacucho Cajamarca Cerro de Pasco    Cusco
## Arequipa         340.07                                                    
## Ayacucho         154.19   461.75                                           
## Cajamarca        946.62  1276.85   815.47                                  
## Cerro de Pasco   492.18   815.28   353.54    463.08                        
## Cusco             99.21   323.13   246.96   1005.81         563.13         
## Chachapoyas      987.68  1324.75   868.47    128.76         526.75  1036.48
## Chiclayo        1070.85  1401.42   940.06    152.43         586.97  1142.47
## Chimbote         802.62  1117.50   658.63    212.30         311.96   875.09
## Huancavelica     245.28   546.42    91.54    735.31         272.30   335.39
## Huancayo         307.12   624.22   162.65    653.93         191.18   387.35
## Huanuco          550.47   881.43   421.26    396.28          84.20   612.86
## Huaraz           681.35  1002.50   541.26    284.51         189.18   750.92
## Ica              311.43   519.90   191.53    825.24         380.22   410.57
## Lima             483.11   764.57   328.96    567.72         174.54   572.85
## Moquegua         448.27   109.50   571.08   1386.31         924.57   423.53
## Moyobamba        955.98  1295.66   847.78    212.58         523.14   996.45
## Piura           1265.11  1592.20  1130.47    320.25         776.93  1325.87
## Pucallpa         611.41   949.57   532.65    457.45         317.54   637.16
## Pto. Maldonado   416.81   492.43   549.98   1187.14         799.70   319.10
## Puno             393.61   172.73   541.52   1336.09         885.60   332.21
## Tacna            562.76   225.48   687.13   1502.33        1040.61   532.16
## Trujillo         909.28  1229.29   768.68    119.30         417.14   977.58
## Tumbes          1394.16  1727.97  1267.62    453.99         916.58  1446.92
##                Chachapoyas Chiclayo Chimbote Huancavelica Huancayo  Huanuco
## Arequipa                                                                   
## Ayacucho                                                                   
## Cajamarca                                                                  
## Cerro de Pasco                                                             
## Cusco                                                                      
## Chachapoyas                                                                
## Chiclayo            227.72                                                 
## Chimbote            328.15   291.19                                        
## Huancavelica        795.52   855.55   571.22                               
## Huancayo            711.75   777.41   496.88        84.20                  
## Huanuco             449.26   529.62   275.08       346.25   262.56         
## Huaraz              370.42   398.92   127.04       456.79   378.62   148.45
## Ica                 903.01   327.66   636.49       164.26   229.31   463.30
## Lima                655.80   664.14   372.98       238.01   197.98   252.39
## Moquegua           1434.05  1510.45  1225.91       655.14   733.45   990.94
## Moyobamba            99.76   327.33   382.75       781.96   697.80   440.55
## Piura               328.03   194.84   486.02      1047.38   968.01   714.78
## Pucallpa            436.44   609.88   450.99       491.78   416.00   252.90
## Pto. Maldonado     1185.96  1335.39  1099.68       628.63   658.03   824.70
## Puno               1368.69  1470.15  1196.22       632.52   700.15   941.19
## Tacna              1549.48  1626.41  1341.57       771.01   849.49  1106.87
## Trujillo            247.63   174.44   117.23       682.96   606.16   366.93
## Tumbes              412.46   361.58   645.74      1188.88  1106.93 84662.00
##                  Huaraz      Ica     Lima Moquegua Moyobamba    Piura Pucallpa
## Arequipa                                                                      
## Ayacucho                                                                      
## Cajamarca                                                                     
## Cerro de Pasco                                                                
## Cusco                                                                         
## Chachapoyas                                                                   
## Chiclayo                                                                      
## Chimbote                                                                      
## Huancavelica                                                                  
## Huancayo                                                                      
## Huanuco                                                                       
## Huaraz                                                                        
## Ica              540.78                                                       
## Lima             286.11   264.08                                              
## Moquegua        1111.54   620.84   870.36                                     
## Moyobamba        394.14   903.36   670.15  1404.23                            
## Piura            590.72  1122.44   858.99  1701.46    416.17                  
## Pucallpa         351.73   644.97   491.11  1055.69    373.27   759.13         
## Pto. Maldonado   972.74   727.14   855.24   544.92   1123.20  1502.18   750.94
## Puno            1074.72   644.34   865.75   179.33   1327.67  1655.70   964.25
## Tacna           1227.51   732.11   984.46   116.05   1518.64  1817.49  1167.49
## Trujillo         227.98   753.36   490.10  1338.10    324.33   369.09   493.76
## Tumbes           737.51  1277.04  1016.27  1837.47    474.06   182.17   844.49
##                Pto. Maldonado     Puno    Tacna Trujillo
## Arequipa                                                
## Ayacucho                                                
## Cajamarca                                               
## Cerro de Pasco                                          
## Cusco                                                   
## Chachapoyas                                             
## Chiclayo                                                
## Chimbote                                                
## Huancavelica                                            
## Huancayo                                                
## Huanuco                                                 
## Huaraz                                                  
## Ica                                                     
## Lima                                                    
## Moquegua                                                
## Moyobamba                                               
## Piura                                                   
## Pucallpa                                                
## Pto. Maldonado                                          
## Puno                   371.82                           
## Tacna                  612.80   242.62                  
## Trujillo              1186.57  1302.55  1453.96         
## Tumbes                1595.43  1778.97  1953.36   529.15

#MDS

Con k = 3 determinamos que la proyección de los datos sea en 3 dimensiones

library(MASS)
## Warning: package 'MASS' was built under R version 4.3.1
mds <- isoMDS(dreal, k = 3, trace = FALSE)
mds
## $points
##                         [,1]         [,2]          [,3]
## Abancay        -3.823493e+00 -361.0616057  2.803881e+01
## Arequipa       -7.185814e+00 -689.4297484 -5.695043e+01
## Ayacucho       -2.573379e+00 -227.4427206 -3.112791e+01
## Cajamarca       5.593515e+00  585.8017376  5.088899e+01
## Cerro de Pasco  9.551556e-01  126.3830505 -1.432646e+01
## Cusco          -4.281111e+00 -417.5003215  1.019389e+02
## Chachapoyas     6.071243e+00  619.5186100  1.600811e+02
## Chiclayo        6.769793e+00  703.7890084 -2.700960e+02
## Chimbote        3.864660e+00  428.1611982 -7.707694e+01
## Huancavelica   -1.769508e+00 -142.6070093 -5.928677e+01
## Huancayo       -9.578501e-01  -64.6233248 -2.961463e+01
## Huanuco        -4.232806e+04    1.7863555  2.210633e-02
## Huaraz          2.796159e+00  314.2722540 -3.057939e+01
## Ica            -2.494132e+00 -155.3539481 -3.760759e+02
## Lima            1.503375e-01   63.9515891 -1.577391e+02
## Moquegua       -8.282609e+00 -798.5252803 -6.893303e+01
## Moyobamba       5.702115e+00  572.1425158  2.355805e+02
## Piura           8.710478e+00  903.8883914  2.368014e+01
## Pucallpa        2.042229e+00  199.9009783  2.564425e+02
## Pto. Maldonado -5.153121e+00 -540.0928032  3.556939e+02
## Puno           -7.599892e+00 -749.8726297  8.277161e+01
## Tacna          -9.442985e+00 -914.5692298 -7.665344e+01
## Trujillo        5.023977e+00  541.1582987 -4.668423e+01
## Tumbes          4.233394e+04    0.3246338  5.667867e-03
## 
## $stress
## [1] 83.19931
stress_mds <- round(mds$stress, 3)
stress_mds
## [1] 83.199

Modelamiento para diferentes valores de k

Resultados <- rep(NA, 5)
for(i in 1:length(Resultados)){
  Resultados[i] = isoMDS(dreal, k = i,
                         trace = FALSE)$stress
}
Resultados
## [1] 84.77796 83.31448 83.19931 83.15835 83.15828

Representamos los valores de ajuste

plot(Resultados, type = "b",
     xlab = "K", ylab = "% stress")
abline(h = 83.18, col = "magenta")

library(ggplot2)
library(reshape2)
## Warning: package 'reshape2' was built under R version 4.3.1
DatosGrafico <- data.frame(
  Dim1 = mds$points[, 1], 
  Dim2 = mds$points[, 2],
  Dim3 = mds$points[, 3]
)
DatosGrafico
##                         Dim1         Dim2          Dim3
## Abancay        -3.823493e+00 -361.0616057  2.803881e+01
## Arequipa       -7.185814e+00 -689.4297484 -5.695043e+01
## Ayacucho       -2.573379e+00 -227.4427206 -3.112791e+01
## Cajamarca       5.593515e+00  585.8017376  5.088899e+01
## Cerro de Pasco  9.551556e-01  126.3830505 -1.432646e+01
## Cusco          -4.281111e+00 -417.5003215  1.019389e+02
## Chachapoyas     6.071243e+00  619.5186100  1.600811e+02
## Chiclayo        6.769793e+00  703.7890084 -2.700960e+02
## Chimbote        3.864660e+00  428.1611982 -7.707694e+01
## Huancavelica   -1.769508e+00 -142.6070093 -5.928677e+01
## Huancayo       -9.578501e-01  -64.6233248 -2.961463e+01
## Huanuco        -4.232806e+04    1.7863555  2.210633e-02
## Huaraz          2.796159e+00  314.2722540 -3.057939e+01
## Ica            -2.494132e+00 -155.3539481 -3.760759e+02
## Lima            1.503375e-01   63.9515891 -1.577391e+02
## Moquegua       -8.282609e+00 -798.5252803 -6.893303e+01
## Moyobamba       5.702115e+00  572.1425158  2.355805e+02
## Piura           8.710478e+00  903.8883914  2.368014e+01
## Pucallpa        2.042229e+00  199.9009783  2.564425e+02
## Pto. Maldonado -5.153121e+00 -540.0928032  3.556939e+02
## Puno           -7.599892e+00 -749.8726297  8.277161e+01
## Tacna          -9.442985e+00 -914.5692298 -7.665344e+01
## Trujillo        5.023977e+00  541.1582987 -4.668423e+01
## Tumbes          4.233394e+04    0.3246338  5.667867e-03

Gráfico Dim1 vs Dim2

ggplot(DatosGrafico, aes(x = Dim1, y = Dim2)) +
  geom_point() + 
  labs(x = "Dimensión 1",
       y = "Dimensión 2",
       title = "Espacio bidimensional") +
  geom_text(label = rownames(DatosGrafico),
            vjust = -0.5,
            size = 5) +
  theme(text = element_text(size = 25),
        plot.title = element_text(hjust = 0.5))

Gráfico Dim 1 vs Dim 3

  ggplot(DatosGrafico, aes(x = Dim1, y = Dim3)) +
    geom_point() + 
    labs(x = "Dimensión 1",
         y = "Dimensión 3",
         title = "Espacio bidimensional") +
  geom_text(label = rownames(DatosGrafico),
            vjust = -0.5,
            size = 3) +
    theme(text = element_text(size = 15),
          plot.title = element_text(hjust = 0.5))

#Gráfico Dim3 vs Dim2

ggplot(DatosGrafico, aes(x = Dim3, y = Dim2)) +
  geom_point() + 
  labs(x = "Dimensión 3",
       y = "Dimensión 2",
       title = "Espacio bidimensional") +
  geom_text(label = rownames(DatosGrafico),
            vjust = -0.5,
            size = 3) +
  theme(text = element_text(size = 15),
        plot.title = element_text(hjust = 0.5))

Gráfico 3D

scatterplot3d::scatterplot3d(DatosGrafico)