在许多实际问题中,多个变量之间是具有一定的相关关系的。因此,我们就会很自然地想到,能否在各个变量之间相关关系研究的基础上,用较少的新变量代替原来较多的变量,而且使这些较少的新变量尽可能多地保留原来较多的变量所反映的信息?事实上,这种想法是可以实现的,这里介绍的主成分分析方法就是综合处理这种问题的一种强有力的方法。
一、主成分分析的基本原理
主成分分析是把原来多个变量化为少数几个综合指标的一种统计分析方法,从数学角度来看,这是一种降维处理技术。假定有n个地理样本,每个样本共有p个变量描述,这样就构成了一个n×p阶的地理数据矩阵:
(1)
如何从这么多变量的数据中抓住地理事物的内在规律性呢?要解决这一问题,自然要在p维空间中加以考察,这是比较麻烦的。为了克服这一困难,就需要进行降维处理,即用较少的几个综合指标来代替原来较多的变量指标,而且使这些较少的综合指标既能尽量多地反映原来较多指标所反映的信息,同时它们之间又是彼此独立的。那么,这些综合指标(即新变量)应如何选取呢?显然,其最简单的形式就是取原来变量指标的线性组合,适当调整组合系数,使新的变量指标之间相互独立且代表性最好。
如果记原来的变量指标为x1,x2,…,xp,它们的综合指标——新变量指标为z1,z2,…,zm(m≤p)。则
(2)
在(2)式中,系数lij由下列原则来决定:
(1)zi与zj(i≠j;i,j=1,2,…,m)相互无关;
(2)z1是x1,x2,…,xp的一切线性组合中方差最大者;z2是与z1不相关的x1,x2,…,xp的所有线性组合中方差最大者;……;zm是与z1,z2,……zm-1都不相关的x1,x2,…,xp的所有线性组合中方差最大者。
这样决定的新变量指标z1,z2,…,zm分别称为原变量指标x1,x2,…,xp的第一,第二,…,第m主成分。其中,z1在总方差中占的比例最大,z2,z3,…,zm的方差依次递减。在实际问题的分析中,常挑选前几个最大的主成分,这样既减少了变量的数目,又抓住了主要矛盾,简化了变量之间的关系。
从以上分析可以看出,找主成分就是确定原来变量xj(j=1,2,…,p)在诸主成分zi(i=1,2,…,m)上的载荷lij(i=1,2,…,m;j=1,2,…,p),从数学上容易知道,它们分别是x1,x2,…,xp的相关矩阵的m个较大的特征值所对应的特征向量。
二、主成分分析的计算步骤
通过上述主成分分析的基本原理的介绍,我们可以把主成分分析计算步骤归纳如下:
(1) 计算相关系数矩阵
(3)
在公式(3)中,rij(i,j=1,2,…,p)为原来变量xi与xj的相关系数,其计算公式为
因为R是实对称矩阵(即rij=rji),所以只需计算其上三角元素或下三角元素即可。
(2)计算特征值与特征向量
首先解特征方程|λI-R|=0求出特征值λi(i=1,2,…,p),并使其按大小顺序排列,即λ1≥λ2≥…,≥λp≥0;然后分别求出对应于特征值λi的特征向量ei(i=1,2,…,p)。
(2) 计算主成分贡献率及累计贡献率
主成分贡献率:,累计贡献率:。
一般取累计贡献率达85-95%的特征值λ1,λ2,…,λm所对应的第一,第二,……,第m(m≤p)个主成分。
(3) 计算主成分载荷
(5)
由此可以进一步计算主成分得分:
(6)
matlab:princomp解释
主成分分析函数:
[coeff,score,letent]=princomp(x);
供献率:每一维数据对于区分全部数据的供献,供献率最大的显然是主成分,第二大的是次主成分......
[coef,score,latent,t2] = princomp(x);
x:为要输入的n维原始数据。带入这个matlab自带函数,将会生成新的n维加工后的数据(即score)。此数据与之前的n维原始数据一一对应。
score:生成的n维加工后的数据存在score里。它是对原始数据进行的解析,进而在新的坐标系下获得的数据。他将这n维数据按供献率由大到小分列。(即在改变坐标系的景象下,又对n维数据排序)
latent:是一维列向量,每一个数据是对应score里响应维的供献率,因为数占领n维所以列向量有n个数据。由大到小分列(因为score也是按供献率由大到小分列)。
coef:是系数矩阵。经由过程coef可以知道x是如何转换成score的。但这个转换不是单纯的转换,必须使用下列计算方法,即score(:,i)=coef*(x(:,i)-mean(x(:,i))),这样才能得到。
用你的原矩阵x*coeff(:,1:n)才是你要的的新数据,其中的n是你想降到多少维。
而n的取值取决于对特征值的累计贡献率的计算。