为了进行土壤分析,研究土壤质量,下面抽取了20个样本,每个样本有4个指标:淤泥含量、黏土含量、有机物、酸性指标PH值。原始数据见表7-1。[大谦MATLAB,dqmatlab点com]
表7-1 原始数据表
| 编 号 | 淤泥含量(%) | 黏土含量(%) | 有机物(%) | PH值 |
|---|---|---|---|---|
| 1 | 13.0 | 9.7 | 1.5 | 6.4 |
| 2 | 10.0 | 7.5 | 1.5 | 6.5 |
| 3 | 20.6 | 12.5 | 2.3 | 7.0 |
| 4 | 33.3 | 19.0 | 2.8 | 5.8 |
| 5 | 20.5 | 14.2 | 1.9 | 6.9 |
| 6 | 10.0 | 6.7 | 2.2 | 7.0 |
| 7 | 12.7 | 5.7 | 2.9 | 6.7 |
| 8 | 36.5 | 15.7 | 2.3 | 7.2 |
| 9 | 37.1 | 14.3 | 2.1 | 7.2 |
| 10 | 25.5 | 12.9 | 1.9 | 7.3 |
| 11 | 26.5 | 14.9 | 2.4 | 6.7 |
| 12 | 22.3 | 8.4 | 4.0 | 7.0 |
| 13 | 30.8 | 7.4 | 2.7 | 6.4 |
| 14 | 25.3 | 7.0 | 4.8 | 7.3 |
| 15 | 31.2 | 11.6 | 2.4 | 6.3 |
| 16 | 22.7 | 10.1 | 3.3 | 6.2 |
| 17 | 31.2 | 9.6 | 2.4 | 6.0 |
| 18 | 13.2 | 6.6 | 2.0 | 5.8 |
| 19 | 11.1 | 6.7 | 2.2 | 7.2 |
| 20 | 20.7 | 9.6 | 3.1 | 5.9 |
在进行主成分分析之前,如果各变量的数量级和量纲等存在较大的差异,则首先需要进行数据标准化。本例中的数据差异较小,不必进行标准化。
code.matlab
>> X=[13.0 9.7 1.5 6.4
1.0 7.5 1.5 6.5
20.6 12.5 2.3 7.0
33.3 19.0 2.8 5.8
20.5 14.2 1.9 6.9
10.0 6.7 2.2 7.0
12.7 5.7 2.9 6.7
36.5 15.7 2.3 7.2
37.1 14.3 2.1 7.2
25.5 12.9 1.9 7.3
26.5 14.9 2.4 6.7
22.3 8.4 4.0 7.0
30.8 7.4 2.7 6.4
25.3 7.0 4.8 7.3
31.2 11.6 2.4 6.3
22.7 10.1 3.3 6.2
31.2 9.6 2.4 6.0
13.2 6.6 2.0 5.8
11.1 6.7 2.2 7.2
20.7 9.6 3.1 5.9];
>> [pcs,newdata,variances,t2]=princomp(X)
pcs =
0.9656 -0.2536 -0.0560 0.0072
0.2592 0.9552 0.1413 -0.0203
0.0177 -0.1524 0.9756 -0.1570
0.0011 -0.0027 0.1585 0.9874
所以,新组成的4个主成分PC1、PC2、PC3和PC4可以写成(假设淤泥含量为X1、黏土含量为X2、有机物为X3、PH值为X4):
PC1=0.9656*X1+0.2592*X2+0.0177*X3+0.0011*X4
PC2=-0.2536*X1+0.9552*X2-0.1524*X3-0.0027*X4
PC3=-0.0560*X1+0.1413*X2+0.9756*X3+0.1585*X4
PC4=0.0072*X1-0.0203*X2-0.1570*X3+0.9874*X4
可见,第1主成分中第1个元素(对应于淤泥含量)的权重最大。
code.matlab
newdata =
-9.1692 1.7382 -0.6429 -0.1250
-21.3272 2.6802 -0.2657 -0.0682
-1.0896 2.3615 0.2026 0.3398
12.8668 5.2762 0.7072 -0.9638
-0.7526 4.0720 0.0423 0.2687
-12.8308 -0.4748 -0.1207 0.3968
-10.4707 -2.2208 0.2222 0.0305
15.0941 1.3847 -0.2042 0.5871
15.3070 -0.0742 -0.6307 0.6513
3.7391 1.5609 -0.3580 0.7261
5.2314 3.1431 0.2612 0.0218
-0.4807 -2.2452 1.1867 0.1685
7.4443 -5.1565 -0.7940 -0.1382
2.0678 -4.4662 1.6489 0.3892
8.9140 -1.2001 -0.5316 -0.2722
0.3330 -0.6139 0.5948 -0.5431
8.3952 -3.1097 -0.8617 -0.5278
-9.7715 -1.3482 -0.6993 -0.7315
-11.7684 -0.7544 -0.1506 0.6022
-1.7318 -0.5529 0.3935 -0.8122
variances =
101.6280
7.6502
0.4489
0.2629
为newdata中各列数据对应的方差。
code.matlab
t2 =
2.2022
5.5896
1.2713
9.9150
2.4515
2.2807
1.8370
3.8963
4.8054
2.7467
1.7145
3.9059
5.4980
9.2816
1.8814
1.9603
4.6709
4.3013
2.8670
2.9234
t2显示第4个和第14个案例数据距离数据中心的距离最远。
code.matlab
>> percent_explained=100*variances/sum(variances);
>> pareto(percent_explained)
>> xlabel('Principal Component')
>> ylabel('Variance Explained(%)')
从图7-1中可以看出,由第1个主成分所解释的方差占到总方差的90%以上。第3主成分和第4主成分所解释的方差可以忽略不计。
\[\]
图7-1 主成分解释方差的帕累托图