(一)主成分分析基本原理
首先对样本进行标准化处理,为简单起见,标准化后的样本仍记为X1 , X2 , X3 , ? , Xp 。 设样本为 X1 , X2 , X3 ,? , Xp,其对应的样本均值为
对应的标准差为 S1 ,S2,S3 , ? , Sp 。
设 F1 , F2 , F3 , ? , Fp 是主成分,也即是 X1 , X2 , X3 , ? , Xp 的线性表示,同时满足下面的条件:
主成分是原样本的正交变换。 各主成分之间互不相关。 主成分的总方差不变。
主成分按方差从大到小排序。 主成分具有如下性质:
这一性质说明,主成分是原变量的线性组合,是对原变量信息的一种改良;主成分不增加总信息量,也不减少总信息量。
设 为主成分的特征值,前 k 个方差累积贡献率为 一般当累积贡献率大于 85% 时不再增加新的主成分。
保留多少个主成分取决于保留部分的累积方差在总方差中占的百分比(即累计贡献率),它标志着前几个主成分概括的信息的多寡。在实践中,粗略规定一个百分比就可以决定保留几个主成分,如果多留一个主成分,但累积方差增加无几,便不再多留。 (二)主成分分析函数
COEFF 主成分系数 SCORE 新坐标系
latent X的协方差矩阵的特征值 tsquare Hotelling 统计量的值
在Matlab中提供了两个主成分分析函数princomp和pcacov。 [COEFF,SCORE]=princomp(X)
[COEFF,SCORE,latent]=princomp(X)
[COEFF,SCORE,latent,tsquare]=princomp(X) 输入参数
X 观察变量 输出参数 调用方式
>>corrcoef ( ingredients ) ans =
1.0000 0.2286 -0.8241 -0.2454 0.2286 1.0000 -0.1392 -0.9730 -0.8241 -0.1392 1.0000 0.0295 -0.2454 -0.9730 0.0295 1.0000
例3 用Matlab自带数据进行主成分分析。Matlab中自带了数据文件 hald ,可以直接调用进行主成分分析。hald 数据考虑影响温度的 4 个因素,温度保存在 heat 变量中,4 个因素的观察值保存在 ingredients 中。由于 4 个因素之间存在相关性,无法直接回归,为解决这个问题,首先进行主成分分析,生成四个主成分变量,主成分之间互不相关,而且和观察值的信息是同样的。
第一步:载入数据,考察变量之间的相关性。
>> load hald %载入Matlab自带的数据文件
考察相关性
发现自变量 2 与变量 3 之间的高度相关,所以需要剔除相关性。 第二步:主成分分析。
>> [pc,score,latent,tsquare] = princomp(ingredients) 主成分系数 pc =
0.0678 0.6460 -0.5673 0.5062 0.6785 0.0200 0.5440 0.4933 -0.0290 -0.7553 -0.4036 0.5156 -0.7309 0.1085 主成分的方差贡献率 score =
-36.8218 6.8709 -29.6073 -4.6109 12.9818 4.2049 -23.7147 6.6341 0.5532 4.4617 10.8125 3.6466 32.5882 -8.9798 -22.6064 -10.7259 9.2626 -8.9854 3.2840 14.1573 -9.2200 -12.3861 25.5849 2.7817 26.9032 2.9310 协方差的特征值 latent = 517.7969 67.4964 12.4054 0.2372 tsquare = 5.6803 3.0758 6.0002 2.6198 3.3681 0.5668 3.4818 3.9794 2.6086 7.4818 4.1830 2.2327
0.4684 4.5909 2.2476 -0.9022 -1.8547 6.0874 -0.9130 1.6063 -3.2365 0.0169 -7.0465 -3.4283 0.3867 2.4455 0.4844 0.3967 -0.3958 -1.1261 -0.3786 0.1424 -0.1350 0.0818 0.3243 -0.5437 0.3405 0.4352 0.4468 0.4116 2.7216
由此可以得到4个主成分如下:
从特征值可以看出前面两个主成分可以很好的解释98%的方差: (517.796 9+67.496 4)/(517.7969+67.4964+12.4054+0.2372) =98%
>>covx=cov(ingredients);
>>[pc,latent,explain]=pcacov(covx)
采用 pcacov 函数计算主成分的结果同 princomp 函数的结果是一样的。 >> load hald
然后计算观察变量 ingredients 协方差。 >> new = ingredients * pc
在确定主成分后对主成分进行回归。
将生成的 4 个主成分,保存在变量 new 中,变量 new 中的每列就是一个主成分。 >> regress(heat,new(:,1:2)) ans =
2.1843 1.0894
验证主成分之间的相关性: >> corrcoef(new) ans =
1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 0.0000 1.0000 发现主成分之间是不相关的。
第三步:用前两个主成分进行回归。 >> 2.1843 * pc(:,1) + 1.0894 * pc(:,2) ans =
0.8519 1.5039 -0.8862 -1.4783
这样温度和主成分之间的关系如下: 还原成线性回归形式:
这样温度和自变量之间的关系如下: 第四步:验证主成分分析优点。
下面计算 heat 和 ingredients 中各个分量的相关系数。 >> corr(heat, ingredients(:,1)) ans =
0.7307
>> corr(heat, ingredients(:,2)) ans =
0.8163
>> corr(heat, ingredients(:,3))
ans =
-0.5347
>> corr(heat, ingredients(:,4)) ans =
0.8213
相关系数表明前两个自变量和因变量之间是正相关,后两个自变量和因变量之间负相关。式(1)和实际结果相印证。
从式(2)可以看出自变量和因变量之间都是正相关,显然和实际结果不相印证。 自变量和因变量之间的函数关系如下: >> c0 = regress(heat,ingredients) c0 =
2.1930 1.1533 0.7585 0.4863
如果不用主成分回归,而是直接对自变量和因变量进行回归。 六、因子分析
因子分析法(factor analysis)是一种用来分析隐藏在表象背后的因子作用的一类统计模型和方法,它起源于心理度量学,最初是研究如何使用少数几个变量来解释众多原始变量,同时又尽量避免信息丢失的多元统计分析方法。在实际问题的分析过程中,常用因子分析去除重叠信息,将原始的众多指标综合成较少的几个因子变量来分析。 1. 因子分析法相关概念
设样本为 , 其对应的样本均值为
, 对应的标准差为 。 因子分析的核心问题有两个,一是确定因子的个数,二是对因子变量进行命名。
首先对样本进行标准化处理,为简单起见,标准化后的样本仍记为 。 因子分析的数学模型如下: X = f X +s
式中:X是经过正交处理的样本值,f 是负荷矩阵,表示公共因子部分,s是其他特殊因子。要求f,s之间不相关而且不可观察。 lambda 负荷矩阵估计值
psi 特殊因素矩阵估计值 T 因素负荷旋转矩阵 stats 假设检验
F F是n×m维因子的分矩阵 2. 因子分析函数调用方式 调用方式
lambda = factoran(X,m)
[ lanmba , psi ] = factoran(X,m) [ lanmba , psi , T ] = factoran(X,m)
[ lanmba , psi , T , stats ] = factoran(X,m) [ lanmba , psi , T , stats , F] = factoran(X,m) 输入参数
X 观察值矩阵,每列属于同一个变量 m 公共因素的个数 输出参数
下面用一个例子说明
例4 在Matlab中自带了10个公司100周的收益率数据,10家公司分成3个行业,4家属于科技公司,3家属于金融公司,另外3家属于零售类公司。一般来讲,同一行业内上市公司同质性强,走势也相同,不同行业内之间股票受不同风险因素影响,走势差别较大。下面验证该结论。 >> load stockreturns
>> m=3; %考虑3个行业的因素
>>[LoadingsPM,specificVarPM] =factoran(stocks,m,'rotate','promax') 从上述结果可以明显看出第1到第4家公司属于同一类公司,第5家到第7家属于同一类公司,第8家到第10家属于同一类公司,说明不同行业间的股票收益率存在不同。 LoadingsPM =
0.9452 0.1214 -0.0617 0.7064 -0.0178 0.2058 0.3885 -0.0994 0.0975 0.4162 -0.0148 -0.1298 0.1021 0.9019 0.0768 0.0873 0.7709 -0.0821 -0.1616 0.5320 -0.0888 0.2169 0.2844 0.6635 0.0016 -0.1881 0.7849 -0.2289 0.0636 0.6475 specificVarPM = 0.0991 0.3431 0.8097 0.8559 0.1429 0.3691 0.6928 0.3162 0.3311 0.6544 七、方差分析
方差分析主要用来检验两个以上样本的平均值差异的显著程度,由此判断样本究竟是否抽自具有同一均值的总体。 (一)单因素方差分析
一般地,假定所检验的结果受同一因素 A 的影响,可以取 k个不同的水平 1, 2, 3, ?, k。对于因素的每一个水平 i 都进行 n 次试验,结果分别为 , 一般把这一组样本记作Xi。假定 ,即对于因素的每一个水平,所得到的结果都服从正态分布,且方差相等。 在方差分析中,通常把对实验结果发生影响和起作用的自变量称为因素。如果分析一个因素