多维标度分析:城市距离与省市消费

2022-04-27 15:53:41 浏览数 (1)

文章期号:20190604

第二章统计进阶,多元统计:多维标度分析

多维标度(Multidimensional scaling,缩写MDS,又译“多维尺度”)也称作“相似度结构分析”(Similarity structure analysis),属于多重变量分析的方法之一,是社会学、数量心理学、市场营销等统计实证分析的常用方法。

运用R工具进行实战演练如下:

案例:古典多维标度法 [8个城市的距离矩阵]

代码语言:javascript复制
> X<-read.table(pipe("pbpaste"),header=T)
> X
     北京 天津 济南 青岛 郑州 上海 杭州 南京
北京    0  118  439  668  714 1259 1328 1065
天津  118    0  363  571  729 1145 1191  936
济南  439  363    0  362  443  886  872  626
青岛  668  571  362    0  772  776  828  617
郑州  714  729  443  772    0  984  962  710
上海 1259 1145  886  776  984    0  203  322
杭州 1328 1191  872  828  962  203    0  305
南京 1065  936  626  617  710  322  305    0
> 
> dd<-cmdscale(X,k=2,eig=T)
> dd
$points
           [,1]        [,2]
北京 -658.14610  -52.301759
天津 -522.00992 -133.917153
济南 -229.30657   32.365307
青岛  -80.72182 -277.225217
郑州 -171.98297  474.047645
上海  610.52727 -102.636996
杭州  659.93216    5.717159
南京  391.70794   53.951014

$eig
[1]  1.756015e 06  3.367695e 05  7.888679e 04  3.770390e 04  1.320482e 04 -7.275958e-12 -1.434722e 04 -3.259473e 04
$GOF
[1] 0.9221257 0.9416014

> sum(abs(dd$eig[1:2]))/sum(abs(dd$eig))
[1] 0.9221257
> sum(abs(dd$eig[1:2]^2))/sum(abs(dd$eig^2))
[1] 0.9971656
> x<-dd$points[,1]
> y<-dd$points[,2]
> plot(x,y, xlim=c(-700, 800),ylim=c(-300,600))
> text(x,y, labels=row.names(X), adj=c(0,-0.5), cex=0.8, family = 'SimSun')

上图R计算结果可知,矩阵B的八个特征值为:

$eig [1] 1.756015e 06 3.367695e 05 7.888679e 04 3.770390e 04 1.320482e 04 -7.275958e-12 -1.434722e 04 -3.259473e 04

由于存在两个特征值为负数,小于0,表明距离矩阵不是欧拉矩阵。用两个特征向量可以很好的拟合出8个构造点,在二维空间中 表示8个城市的距离和相等位置。

距离矩阵拟合图

案例:非度量多维标度法

代码语言:javascript复制
> X<-read.table(pipe("pbpaste"),header=T)
> X
            x1     x2      x3     x4      x5     x6     x7     x8
北京   2994.66 699.42 1990.21 473.62 1112.44 950.61 840.61 193.21
天津   2060.83 365.86  888.32 233.02  467.48 462.25 360.47  98.50
河北   1351.41 250.92  839.66 218.90  464.80 462.25 360.47  78.87
山西   1372.49 315.78  614.70 173.62  357.74 420.21 328.92  80.40
内蒙古 1675.04 317.71  751.99 177.91  598.61 374.19 467.97  97.41
辽宁   1714.15 369.15  745.03 185.23  448.97 500,28 413.83 112.87
吉林   1523.32 309.75  752.79 171.92  368.64 454.05 462.42 104.47
黑龙江 1483.95 387.17  793.80 164.63  455.90 560.71 443.16 101.86
上海   3806.82 554.13 2020.25 528.01 1459.45 997.65 584.51 209.66
江苏   2491.51 350.01 1170.88 327.69  785.53 908.10 362.28 146.87
浙江   3055.59 551.53 2044.32 410.62 1145.99 839.19 709.30 172.34
安徽   1632.96 232.20  867.51 231.23  338.99 363.92 264.39  82.10
福建   2537.15 310.14  865.50 292.71  638.07 462.17 251.36 141.23
江西   1812.66 174.61  782.72 205.27  331.81 285.23 243.84  75.48
山东   1804.45 305.56  832.95 324.70  649.21 421.91 383.89  84.51
河南   1371.17 261.52  765.18 254.47  401.44 250.47 287.83  90.14
湖北   1763.05 217.61  816.42 262.26  331.35 288.12 295.24 116.73
湖南   2087.85 209.85  719.20 243.90  343.82 315.93 293.59  96.23
广东   2630.05 215.51  986.70 235.01  637.08 326.53 307.43 177.27
广西   1675.41 110.46  692.51 192.77  310.30 182.55 228.99  62.30
海南   1724.47 117.36  609.77 135.22  312.53 318.04 138.35  90.49
重庆   1750.01 224.13  548.00 260.71  281.73 239.03 270.31  50.70
四川   1881.18 226.62  625.28 239.48  360.70 218.62 276.06  69.59
贵州   1319.43 137.49  621.80 135.64  229.66 186.19 178.07  44.21
云南   1604.50 160.72  638.09 167.66  337.85 206.45 239.94  43.11
西藏   1325.71 326.65  352.88 181.27  282.43  51.06  71.16  75.77
陕西   1299.22 237.87  837.54 233.37  336.22 397.61 376.20  75.77
甘肃   1315.25 184.23  551.63 146.93  256.70 238.03 203.13  46.09
青海   1442.88 255.19  944.23 193.59  369.60 198.53 307.92  62.55
宁夏   1541.77 302.61  776.44 188.12  444.02 241.08 417.92 101.22
新疆   1394.38 303.66  695.17 137.69  382.14 170.15 314.73  59.94
> dd<-as.matrix(X)
> dd
> d<-dist(dd)
Warning message:
In dist(dd) : 强制改变过程中产生了NA

> library(MASS)
> fit<-isoMDS(d,k=2)
initial  value 3.267778 
final  value 3.267686 
converged
> fit
$points
              [,1]         [,2]
北京   -1882.08165 -405.5501799
天津    -181.18356   83.5568197
河北     378.06842 -316.9090361
山西     519.63551 -161.3723531
内蒙古   140.53475 -118.3236722
辽宁     239.59269  -57.3466211
吉林     311.06135 -196.5769112
黑龙江   257.18237 -303.2689490
上海   -2574.54791  164.4633867
江苏    -864.88942   19.9653109
浙江   -1891.26840 -273.7180203
安徽     241.99333  -56.7533361
福建    -562.74468  426.2460037
江西     187.41927  149.4628003
山东     -23.94055  -68.0772001
河南     480.52386 -165.0996828
湖北     186.03261   68.3345125
湖南     -11.86522  317.5767900
广东    -645.99328  471.6486570
广西     377.05811  164.2765177
海南     362.23481  229.5403989
重庆     360.53994  226.6307228
四川     206.07019  261.9414880
贵州     708.60794   -0.5224843
云南     435.30179  117.9074584
西藏     836.32175  163.8641180
陕西     475.58204 -309.3702220
甘肃     712.09253  -10.0972309
青海     372.00020 -192.4072738
宁夏     321.09711 -124.8186386
新疆     529.56410 -105.2031733
$stress
[1] 3.267686

0 人点赞