主成分分析应用综合实例

为了进行土壤分析,研究土壤质量,下面抽取了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主成分所解释的方差可以忽略不计。

Document Image
\[\]

图7-1 主成分解释方差的帕累托图