多維尺度法(MDS)

R 的多變量機率分配

Surajit Ray

Professor, University of Glasgow

什麼是多維尺度法?

  • 古典多維尺度法(MDS)或主座標分析
    • INPUT 距離矩陣
    • OUTPUT 在指定維度中的點集合,使其距離盡量貼近 INPUT 距離
    • cmdscale() 函式
      cmdscale(d, k = 2, ...)
      
  • 非度量尺度法
    • isoMDS()
    • sammon()
R 的多變量機率分配

美國城市距離範例

data("UScitiesD")
UScitiesD
               Atlanta Chicago Denver Houston LosAngeles Miami NewYork SanFrancisco Seattle
Chicago           587                                                                     
Denver           1212     920                                                             
Houston           701     940    879                                                      
LosAngeles       1936    1745    831    1374                                              
Miami             604    1188   1726     968       2339                                   
NewYork           748     713   1631    1420       2451  1092                             
SanFrancisco     2139    1858    949    1645        347  2594    2571                     
Seattle          2182    1737   1021    1891        959  2734    2408          678        
Washington.DC     543     597   1494    1220       2300   923     205         2442    2329
R 的多變量機率分配

在美國城市距離資料集上套用 MDS

usloc <- cmdscale(UScitiesD)
usloc
               [,1]   [,2]
Atlanta        -719  143.0
Chicago        -382 -340.8
Denver          482  -25.3
Houston        -161  572.8
LosAngeles     1204  390.1
Miami         -1134  581.9
NewYork       -1072 -519.0
SanFrancisco   1421  112.6
Seattle        1342 -579.7
Washington.DC  -980 -335.5
ggplot(data = data.frame(usloc), aes(x = X1, y = X2, label = rownames(usloc))) + 
    geom_text()
R 的多變量機率分配

美國城市 MDS 輸出

                      cmdscale 輸出圖

                                       旋轉後的圖

R 的多變量機率分配
cars.dist <- dist(mtcars)
cars.mds <- cmdscale(cars.dist, k = 2)
cars.mds <- data.frame(cars.mds)
ggplot(data = cars.mds, aes(x = X1, y = X2, label = rownames(cars.mds))) + geom_text()

R 的多變量機率分配

二維以上的多維尺度法

cars.dist <- dist(mtcars)

cmds3 <- data.frame(cmdscale(cars.dist, k = 3))
scatterplot3d(cmds3, type = "h", pch = 19, lty.hplot = 2)

R 的多變量機率分配

二維以上的多維尺度法

cars.dist <- dist(mtcars)

cmds3 <- data.frame(cmdscale(cars.dist, k = 3))
scatterplot3d(cmds3, type = "h", pch = 19, lty.hplot = 2, color = mtcars$cyl)

R 的多變量機率分配

現在來試試用 MDS!

R 的多變量機率分配

Preparing Video For Download...