matlab代码:
clear;clc;
name=['南京','无锡','常州','苏州','镇江','南通','扬州','泰州','徐州','连云','淮安','盐城','宿迁'];
x=[125031 5265.55 1591.59 557.57 4955.76 102.7 39881 16531
124639 4015.77 1565.76 707.72 4086.84 102.10 38999 20587
92995 2902.84 1169.32 290.28 2753.31 102.20 36946 18643
123209 6001.94 2788.91 3093.48 6408.32 102.10 41143 21578
92656 1753.20 631.2 114.13 1483.6 102.1 32977 16258
69050 3298.7 1216.7 263.01 4150.50 102.20 31059 14754
72775 2025.18 660.30 101.73 1931.02 102.2 30690 14214
64917 1764.17 697.23 104.42 1790.89 101.9 30069 13982
51714 3090.13 659.95 83.27 2089.77 102.3 29347 12052
40416 1664.77 595.65 80.02 850.95 102.20 26898 10745
46020 1453.05 494.6 42.38 934.30 102.2 25456 11045
48150 2217.69 963.02 57.54 1820.45 102.7 28402 13344
35484 1290.75 381.94 33.22 736.29 102.4 20325 10703
];
stdr=std(x);
[n,m]=size(x);
sddata=x./stdr(ones(n,1),:);
[p,princ,evalue]=princomp(sddata);
p2=p(:,1:2);
sc=princ(:,1:2);
per=100*evalue/sum(evalue);
F=per(1)/100*princ(:,1)+per(2)/100*princ(:,2);
[~,index]=sort(F,'descend');%因为用不到前面的,所以用~节省空间
for(i=1:13)
fprintf('%s%s排名是%d\n',name(2*index(i)-1),name(2*index(i)),i);
end
运行结果:
p,princ,evalue,per
p =
Columns 1 through 4
0.3744 -0.0557 -0.4568 -0.0929
0.3840 0.2365 0.1175 0.4571
0.3933 0.0687 0.2979 -0.1149
0.3428 -0.0945 0.6472 -0.4127
0.3905 0.1276 0.1162 0.5023
-0.0274 0.9333 -0.1062 -0.3231
0.3813 -0.0397 -0.4056 0.0641
0.3762 -0.1960 -0.2839 -0.4879
Columns 5 through 8
-0.4658 -0.5806 -0.2048 0.2085
-0.2187 0.0728 0.6863 0.2229
0.2868 0.1822 -0.3723 0.6961
-0.3918 -0.0283 0.0001 -0.3606
0.4111 -0.3159 -0.3061 -0.4504
0.0137 -0.0091 -0.0333 -0.1056
-0.2128 0.7208 -0.2347 -0.2539
0.5338 -0.0646 0.4456 -0.1169
princ =
Columns 1 through 4
2.7167 2.1924 -0.8511 0.3586
2.6825 -0.7416 -0.8782 -0.0536
0.9872 -0.4298 -0.8769 -0.3087
5.6478 -0.4677 1.6495 -0.2912
-0.4723 -0.9914 -0.9318 -0.4200
0.3721 0.0320 0.2749 0.7474
-0.8844 -0.3454 -0.3350 -0.0405
-1.0762 -1.5832 -0.0385 0.3010
-1.1431 0.4055 0.2504 0.5372
-2.2304 -0.2176 0.4928 0.0828
-2.3371 -0.2679 0.4004 0.0065
-1.2700 1.8505 0.1066 -0.5846
-2.9929 0.5641 0.7369 -0.3348
Columns 5 through 8
-0.3521 -0.1033 -0.0903 0.0179
0.1452 -0.1662 0.1225 0.1394
0.2614 0.2721 0.0881 -0.0230
-0.1072 0.0317 -0.0092 -0.0313
-0.2329 -0.1137 -0.0414 -0.0775
0.5335 -0.1445 -0.1034 -0.0416
-0.0838 -0.0569 -0.0650 -0.1266
0.0176 0.0477 -0.0940 0.0294
-0.1619 0.2165 0.3003 -0.0545
-0.2218 0.2905 -0.0868 0.1004
-0.1828 -0.0357 -0.0844 0.0425
0.3455 0.2199 -0.0667 0.0064
0.0393 -0.4581 0.1303 0.0184
evalue =
6.0054
1.1163
0.5886
0.1573
0.0667
0.0453
0.0152
0.0051
per =
75.0674
13.9542
7.3576
1.9667
0.8342
0.5661
0.1903
0.0637
我们可以根据p2,得到前两个主成分为:
第一个主成分贡献率为75.0674%,第二个主成分贡献率为13.9542%,前两个主成分累计贡献率为89.0215%。
如果按80%以上的信息量选取新因子,则可以选取前两个新因子。第一新因子z1包含的信息量最大为75.0674%,它的主要代表变量为人均产值(元), 反映了这个变量与经济水平密切相关,第二新因子Z2包含的信息量最大为13.9542%,它的主要代表变量为固定资产投资(亿元), 反映了这个变量与经济水平密切相关。
这些代表变量反映了各自对经济水平作用的大小,它们是经济水平中最重要的影响因素。根据前两个主成分得分,用其贡献率加权,即得13个城市各自的总得分。
最终的结果为:
苏州排名是1
南京排名是2
无锡排名是3
常州排名是4
南通排名是5
镇江排名是6
盐城排名是7
扬州排名是8
徐州排名是9
泰州排名是10
连云港排名是11
淮安排名是12
宿迁排名是13
注:这里笔者采用的是前两个主成分,也可以采用前三个,可能会导致排名有一些变化,但是大体上是差不多的,该排名为笔者所使用数据得到的结果,仅为个人观点,每个城市的排名在每个人心中肯定有差异,不喜勿喷(滑稽+狗头保命)