第三十六课 因子分析
(2010-09-18 22:34:51)
标签:
杂谈 |
分类: SAS学习 |
第三十六课
一、
因子分析的目的是用有限个不可观察的潜在变量来解释原变量间的相关性或协方差关系。在这里我们把不可观察的潜在变量称为公共因子(common factor)。在研究样品时,每个样品需要检测很多指标,假设测得 个指标,但是这 个指标可能受到 ( < )个共同因素的影响,再加上其他对这些指标有影响的因素。写成数学的形式就是:
|
(36.1) |
利用矩阵记号有:
|
(36.2) |
各个指标变量都受到 的影响,因此 称为公共因子, 称为因子载荷矩阵, 是单变量 所特有的因子,称为 的特殊因子(unique factor)。设 , ,…, 分别是均值为0,方差为1的随机变量,即 ;特殊因子 , ,…, 分别是均值为0,方差为 , ,…, 的随机变量,即 ;各特殊因子之间及特殊因子与公共因子之间都是相互独立的,即 及 。 是第 个变量在第 个公共因子上的负荷,从投影的角度看, 就是 在坐标轴 上的投影。
主成分分析的目标是降维,而因子分析的目标是找出公共因素及特有的因素,即公共因子与特殊因子。在主成分分析中,残差通常是彼此相关的。在公因子分析中,特殊因子起到残差的作用,但被定义为彼此不相关且和公因子也不相关。而且每个公因子假定至少对两个变量有贡献,否则它将是一个特殊因子。在开始提取公因子时,为了简便还假定公因子彼此不相关且具有单位方差。在这种情况下,向量 的协方差矩阵Σ可以表示为:
|
(36.3) |
这里D=diag( ),diag表示对角矩阵。如果假定已将 标准化,也就是说 的每一个分量 的均值都为0,方差都是1,即 ,那么:
|
(36.4) |
记 ,则有:
|
(36.5) |
反映了公共因子f对 的影响,称为公共因子f对 的“贡献”。 实际反映了变量 对公共因子f的依赖程度。
另一方面,还可以考虑指定的一个公共因子 对各个变量 的影响。实际上, 对各个变量 的影响可由 中第 列的元素来描述,那么:
|
(36.6) |
称为公共因子 对 的“贡献”。显然 越大, 对 的影响就越大, 成为衡量因子重要性的一个尺度。实际上:
|
(36.7) |
那么,矩阵 的统计意义就非常清楚:
l
l
l
下面我们来看怎样求解因子载荷矩阵 。
二、
如果已知 协方差矩阵 和 ,可以很容易地求出 。根据式(36.3)有:
|
(36.8) |
记 ,则 是非负定矩阵。若记矩阵 的p个特征值 ≥ ≥…≥
|
(36.9) |
只要令:
|
(36.10) |
就可以求出因子载荷矩阵 。
但在实际问题中,我们并不知道 、 ,即不知道 ,已知的只是 个样品,每个样品测得 个指标,共有 个数据,样品数据见表36.1。为了建立公因子模型,首先要估计因子载荷 和特殊因子方差 。常用的参数估计方法有以下三种:主成分法、主因子解法和极大似然法。
1.
主成分法求因子载荷矩阵 的具体求法如下:首先从资料矩阵出发求出样品的协方差矩阵,记之为 ,其特征值为 ,相应的单位正交特征向量为 ,当最后 个特征值较小时,则对 进行谱分解可以近似为:
|
(36.11) |
其中, ≥ ≥…≥ >0是协方差矩阵 相应的前 个较大特征值。先取 ,然后看 是否接近对角阵。如果接近对角阵,说明公共因子只要取一个就行了,所有指标主要受到这一个公共因子的影响;如果 不是近似对角阵,就取 ,然后看 是否接近对角阵,如果接近对角阵,就取两个公共因子;否则,再取 ,…,直到满足“要求”为止。这里的“要求”要视具体情况而定,一般而言,就像主成分分析一样,直接取前 个特征值和特征向量,使得它们的特征值之和占全部特征值之和的85%以上即可。此时,特殊因子方差 。
2.
主因子解法是主成分法的一种修正,它是从资料矩阵出发求出样品的相关矩阵 ,设 ,则 。如果我们已知特殊因子方差的初始估计 ,也就是已知了先验公因子方差的估计为 ,则约相关阵 为:
|
(36.12) |
计算 的特征值和特征向量,取前 个正特征值 及相应特征向量为 ,则有近似分解式:
|
(36.13) |
其中, ,令 ,则 和 为因子模型的一个解,这个解就称为主因子解。
上面的计算是我们假设已知特殊因子方差的初始估计 ,那么,特殊因子方差的初始估计值如何得到呢?由于在实际中特殊因子方差 (或公因子方差 )是未知的。以上得到的解是近似解。为了得到近似程度更好的解,常常采用迭代主因子法。即利用上面得到的 作为特殊方差的初始估计,重复上述步骤,直到解稳定为止。
公因子方差(或称变量的共同度)常用的初始估计有下面三种方法:
l
l
l
3.
假定公共因子f和特殊因子 服从正态分布,那么我们可得到因子载荷阵和特殊方差的极大似然估计。设 维的 个观察向量 为来自正态总体 的随机样本,则样本似然函数为 和 的函数 。设 ,取 ,对于一组确定的随机样本, 已经变成了确定已知的值,则似然函数 可以转换为 和 的函数 。接下来,就可以求 和 取什么值,使函数 能达到最大。为了保证得到唯一解,可以附加唯一性条件 对角阵,再用迭代方法可求得极大似然估计的 和 的值。
三、
因子模型被估计后,还必须对得到的公因子 进行解释。进行解释通常意味着对每个公共因子给出一种意义明确的名称,它用来反映在预测每个可观察变量中这个公因子的重要性,这个公因子的重要程度就是在因子模型矩阵中相应于这个因子的系数,显然这个因子的系数绝对值越大越重要,而接近0则表示对可观察变量没有什么影响。因子解释是一种主观的方法,有时侯,通过旋转公因子可以减少这种主观性,也就是要使用非奇异的线性变换。
设 维可观察变量 满足因子模型 。设 是任一正交阵,则因子模型可改写为:
|
(36.14) |
其中, , 。
根据我们前面假定:每个公因子的均值为0,即 ,每个公因子的方差为1,即 ,各特殊因子之间及特殊因子与公共因子之间都是相互独立的,即 及 。可以证明:
|
(36.15) |
|
(36.16) |
|
(36.17) |
|
(36.18) |
因此, 。这说明,若 和 是一个因子解,任给正交阵 , 和 也是因子解。由于正交阵 是任给的,因此,因子解不是唯一的。在实际工作中,为了使载荷矩阵有更好的实际意义,在求出因子载荷矩阵 后,再右乘一个正交阵 ,这样就变换了因子载荷矩阵,这种方法称为因子轴的正交旋转。
我们知道,一个所有系数接近0或±1的旋转模型矩阵比系数多数为0与±1之间的模型容易解释。因此,大多数旋转方法都是试图最优化模型矩阵的函数。在初始因子提取后,这些公因子是互不相关的。如果这些因子用正交变换(orthogonal transformation)进行旋转,旋转后的因子也是不相关的。如果因子用斜交变换(oblique transformation)进行旋转,则旋转后的因子变为相关的。但斜交旋转常常产生比正交旋转更有用的模型。
旋转一组因子并不能改变这些因子的统计解释能力。如果两种旋转模型导出不同的解释,这两种解释不能认为是矛盾的。倒不如说,是看待相同事物的两种不同方法。从统计观点看,不能说一些旋转比另一些旋转好。在统计意义上,所有旋转都是一样的。因此,在不同的旋转之间进行选择必须根据非统计观点。在多数应用中,我们选择最容易解释的旋转模型。
四、
l
l
l
l
l
l
五、
因子分析用少数起根本作用、相互独立、易于解释通常又是不可观察的因子来概括和描述数据,表达一组相互关联的变量。通常情况下,这些相关因素并不能直观观测,这类分析通常需用因子分析完成。
proc factor |
priors |
var
|
partial |
freq |
weight |
by |
run ; |
1.
(1)
l
l
(2)
l
l
l
(3)
l
l
l
l
l
(4)
l
l
l
l
(5)
l
l
l
l
l
l
l
l
l
l
l
2.
为var变量设定公因子方差,值在0.0和1.0之间。其值的设定应与var语句的变量相对应。例如:proc
factor;priors
其他语句的使用略。
六、
无论是初始因子模型还是旋转后的因子模型,都是将指标表示为公因子的线性组合。在因子分析中,还可以将公因子表示为指标的线性组合,这样就可以从指标的观测值估计各个公因子的值,这种值叫因子得分。它对样品的分类有实际意义。因子得分可由proc score过程完成。
score过程一般由下列语句控制:
proc score |
var 变量 ; |
run ; |
proc score语句选项包括out=输出数据集,存储因子得分结果等。将factor和score两个过程书写在同一个程序中,可以提高分析的效率。
七、
例36.1
表36.1
编号 |
pop |
school |
employ |
services |
house |
1 |
5700 |
12.8 |
2500 |
270 |
25000 |
2 |
1000 |
10.9 |
600 |
10 |
10000 |
3 |
3400 |
8.8 |
1000 |
10 |
9000 |
4 |
3800 |
13.6 |
1700 |
140 |
25000 |
5 |
4000 |
12.8 |
1600 |
140 |
25000 |
6 |
8200 |
8.3 |
2600 |
60 |
12000 |
7 |
1200 |
11.4 |
400 |
10 |
16000 |
8 |
9100 |
11.5 |
3300 |
60 |
14000 |
9 |
9900 |
12.5 |
3400 |
180 |
18000 |
10 |
9600 |
13.7 |
3600 |
390 |
25000 |
11 |
9600 |
9.6 |
3300 |
80 |
12000 |
12 |
9400 |
11.4 |
4000 |
100 |
13000 |
1.
程序如下:
data socecon; |
input |
title |
cards; |
|
|
|
|
; |
run; |
程序运行后,生成一个scoecon数据集。
2.
菜单操作方法,在SAS系统的主菜上,选择Globals/SAS/Assist 进入Assist的主菜单,再选择data analysis/multivar/factor analysis(因子分析)。编程方法如下:
proc factor data=socecon method=prin priors=one simple corr score; |
run; |
proc factor data=socecon method=prin priors=smc msa scree residual preplot
|
run; |
proc factor data=socecon method=ml heywood nfacotors=1; |
run; |
proc factor data=socecon method=ml heywood nfactors=2; |
run; |
proc factor data=socecon method=ml heywood nfactors=3; |
run; |
程序说明:共调用了5个factor因子分析过程。第1个过程为主成分因子分析,第2个过程为主因子分析,第3个过程为提取一个因子的最大似然分析,第4个过程为提取二个因子的最大似然分析,第5个过程为提取三个因子的最大似然分析。
第1个factor因子分析过程,由于选项method=prin 和priors=one,提取因子的方法采用主成分分析,先验公因子方差估计被规定为1。选项simple和 corr要求输出描述统计量和相关阵。选项score要求输出因子得分系数。
第2个factor因子分析过程,由于不是priors=one选项,因此,提取因子的方法采用主因子分析,选项method=prin不起作用。选项priors=smc表示先验公因子方差估计被规定为每个变量与其他变量的多重相关系数的平方。选项msa表示控制所有其余变量的偏相关。选项scree表示输出所有特征值按从大到小排列的斜坡图,用于选择因子个数。选项residual输出残差相关阵和有关的偏相关阵,得到特殊因子方差的剩余相关。选项rotate=promax规定因子模型预先按正交最大方差的旋转,再在正交最大方差转轴的基础上进行斜交的promax旋转。选项preplot表示绘制因子模型旋转前的散点图。选项plot表示绘制因子模型旋转后的散点图。选项reorder表示按因子上具有的载荷大小排列。选项outstat=fact_all表示将因子分析的各种结果输出到fact_all数据集中。
其他3个最大似然因子分析过程的说明,我们在这里省略。第1和第2个factor因子分析过程运行后,主要的结果见表36.2到表36.9。
表 36.2
Means and Standard Deviations from 12 observations (每个变量的均值和标准差) POP
Mean Std Dev Correlations (相关矩阵)
POP
SCHOOL
EMPLOY SERVICES
HOUSE |
表 36.3