主成分分析(principal component analysis)是1901年Pearson对非随机变量引 入的,1933年Hotelling将此方法推广到随机向量的情形,主成分分析和聚类分析有很 大的不同,它有严格的数学理论作基础。 主成分分析的主要目的是希望用较少的变量去解释原来资料中的大部分变异,将我 们手中许多相关性很高的变量转化成彼此相互独立或不相关的变量。通常是选出比原始 变量个数少,能解释大部分资料中的变异的几个新变量,即所谓主成分,并用以解释资 料的综合性指标。由此可见,主成分分析实际上是一种降维方法。
主成分分析系列:
目录
1 基本思想及方法
1 确定各个主成分的方法
一个主成分不足以代表原来的 p 个变量,因此需要寻找第二个乃至第三、第四主 成分,第二个主成分不应该再包含第一个主成分的信息,统计上的描述就是让这两个主 成分的协方差为零,几何上就是这两个主成分的方向正交。具体确定各个主成分的方法 如下。
2 注意事项
1)主成分分析的结果受量纲的影响,由于各变量的单位可能不一样,如果各自改变量纲,结果会不一样,这是主成分分析的大问题,回归分析是不存在这种情况的, 所以实际中可以先把各变量的数据标准化,然后使用协方差矩阵或相关系数矩阵进行分 析。
2)为使方差达到大的主成分分析,所以不用转轴(由于统计软件常把主成分分 析和因子分析放在一起,后者往往需要转轴,使用时应注意)。
3)主成分的保留。用相关系数矩阵求主成分时,Kaiser主张将特征值小于1的主成 分予以放弃(这也是SPSS软件的默认值)。
4)在实际研究中,由于主成分的目的是为了降维,减少变量的个数,故一般选取 少量的主成分(不超过5或6个),只要它们能解释变异的70%~80%(称累积贡献率) 就行了。 下面我们直接通过主成分估计(principle estimate)进一步阐述主成分分析的基 本思想和相关概念。
2 主成分估计
主成分估计(principal component estimate)是Massy在1965年提出的,它是回归系数参数的一种线性有偏估计(biased estimate),同其它有偏估计,如岭估计(ridge estimate)等一样,是为了克服小二乘(LS)估计在设计矩阵病态(即存在多重共线性) 时表现出的不稳定性而提出的。
主成分估计采用的方法是将原来的回归自变量变换到另另一组变量,即主成分,选择其中一部分重要的主成分作为新的自变量(此时丢弃了一部分,影响不大的自变量, 这实际达到了降维的目的),然后用小二乘法对选取主成分后的模型参数进行估计, 后再变换回原来的模型求出参数的估计。
单参数主成分估计
理论上表明:主成分估计在设计阵病态时优于LS估计,但(31)在特征值为1的附 近存在跳跃,会影响计算的稳定性,杨虎在1989年给出的单参数主成分估计解决了这个 问题。
例3 Hald水泥问题,考察含如下四种化学成分
相关系数阵的四个特征值依次为2.2357,1.5761,0.1866,0.0016。最后一个特征值接近于零,前三个特征值之和所占比例(累积贡献率)达到0.999594。于是我们略去 第4个主成分。其它三个保留的特征值对应的三个特征向量分别为
对Hald数据直接作线性回归得经验回归方程
再由(31)式计算出主成分估计,即可获得如下主成分回归方程
两个方程的区别在于后者具有更小的均方误差,因而更稳定。此外前者所有系数都无法 通过显著性检验。 计算的MATLAB程序如下:
clc,clear
load sn.txt %把原始的x1,x2,x3,x4,y的数据保存在纯文本文件sn.txt中
[m,n]=size(sn);num=3; %num为选取的主成分的个数
mu=mean(sn);sigma=std(sn);
snb=zscore(sn); %数据标准化
b=snb(:,1:end-1); %x1,x2,x3,x4的数据赋给b
r=cov(b); %标准化数据的协方差阵就是相关系数阵
[x,y,z]=pcacov(r);
f=repmat(sign(sum(x)),size(x,1),1);
x=x.*f;
%以下是普通的小二乘法回归
r=[ones(m,1),b]\snb(:,end); %标准化数据的回归方程系数
bzh=mu./sigma;
ch10=mu(end)-bzh(1:end-1)*r(2:end)*sigma(end) %原始数据的常数项
fr=r(2:end);fr=fr';
ch1=fr./sigma(1:end-1)*sigma(end) %原始数据的x1,x2等等系数
%以下是主成分回归
pval=b*x(:,1:num);
rp=[ones(m,1),pval]\snb(:,end); %主成分数据的回归方程系数
beta=x(:,1:num)*rp(2:num+1); %标准化数据的回归方程系数
ch20=mu(end)-bzh(1:end-1)*beta*sigma(end) %原始数据的常数项
fr=beta';
ch2=fr./sigma(1:end-1)*sigma(end) %原始数据的x1,x2等等系数
check1=sqrt(sum((sn(:,1:end-1)*ch1'+ch10-sn(:,end)).^2)/(m-n))
check2=sqrt(sum((sn(:,1:end-1)*ch2'+ch20-sn(:,end)).^2)/(m-num-1))
主成分分析系列: