主要过程:
1确认待分析的变量是否适合做因子分析: (1)计算变量之间的相关系数矩阵:
如果相关系数矩阵在进行统计检验中大部分相关系数都小于0.3,那么表明这些变量不适合于进行因子分析。
(2)KMO(Kaiser-Meyer-Olkin)检验:
KMA值在0-1之间,其值越接近1,表明所有变量之间简单相关系数平方和远大于偏相关系数平方和,就越适合因子分析。一般认为,大于0.7则
适合做因子分析。
2对样本数据进行标准化处理; 3计算相关系数矩阵
4计算相关系数矩阵的特征值和特征向量,确定因子个数; 5求出因子载荷矩阵; 6根据情况进行因子旋转; 7计算因子得分
8以因子的贡献率为权重,计算因子得分的综合得分,根据综合得分排序。
SAS过程:
1在调用SAS的FACTOR过程做因子分析时,为使 SAS执行主成分法,应当在PROC FACTOR语句中,采用METHOD=p选项。
2在调用SAS的FACTOR过程做因子分析时,在PROC FACTOR语句中,采用选项METHOD=ML就能指示SAS执行极大似然法。使用极大似然法时必须是正定阵,协差阵行列式不能是0。
3在调用SAS的FACTOR过程做因子分析时,为使SAS执行主因子分析,应当在PROC FACTOR语句中,采用METHOD=p选项,并增加PRIORS语句,且相应变量值不等于1。 4迭代主因子法
一数据导入: data stock;
inputAllChemiduPontUnionCar Exxon Texaco; cards;
二操作过程: 1主成分法:
判断是否适用于因子分析:(同时可以得到因子负荷阵和共性方差)
proc factor data=stock method=p n=2 msa;/*采用主成分法,用相关阵计算,选取两个公共因子msa表示执行KMO(Kaiser-Meyer-Olkin)
检验*/
varAllChemiduPontUnionCar Exxon Texaco; /*可观测因子是AllChemi、duPont、UnionCar、Exxon、
Texaco */ run;
2极大似然法:
proc factor data=stock method=ml n=2 msa; /* method=ml采用极大似然法,对数据集stock用相关阵计算因子分析,n=2选取两个公共因子 */
varAllChemiduPontUnionCar Exxon Texaco; /*可观测因子是AllChemi、duPont、UnionCar、 Exxon、Texaco */ run;
分析:
Variance explained by each factor中的第三列即是每个因子负荷的平方和,反映因子的重要性:平方和越大,该因子越重要。
Final Communality Estimates and Variable Weights中的第二列即是共性方差,两个公共因子的含义和主成分法一样。
3采用主因子法(初始特殊因子的方差是0.3,0.2,0.3,0.3,0.2)的程序是
proc factor data=stock method=p n=2 msa; /*采用主因子法,对数据集stock用相关阵计算因子分析,选取两个公共因子*/
varAllChemiduPontUnionCar Exxon Texaco; /*可观测因子是AllChemi、duPont、UnionCar、 Exxon、Texaco */
priors 0.3 0.2 0.3 0.3 0.2;/*规定特殊因子的方差为0.3 0.2 0.3 0.3 0.2*/ run;
分析:同样可以得到每个因子负荷的平方和,反映因子的重要性:平方和越大,该因子越重要。同样可以得到共性方差,含义和主成分和极大似然法分析一样。 4迭代主因子法:
proc factor data=stock method=prinit n=2 msa; /*采用迭代主因子法,对数据集stock用相关阵计算因子分析,选取两个公共因子*/
varAllChemiduPontUnionCar Exxon Texaco; /*可观测因子是AllChemi、duPont、UnionCar、 Exxon、Texaco */ run;
如何比较不同估计方法的效果?详见课件因子分析。
通常所得的观测值都被简化为样本协差阵或样本相关阵,这时可以把样本协差阵或样本相关阵直接输入,从而计算因子负荷阵。 采用程序:
datadecathlo(type=corr); _type_='corr';
input _name_ $ run100m longjumpshotputhighjump run400m run110mh discus polevaul javelin run1500m;
cards;
run100m 1.0 .59 .35 .34 .63 .40 .28 .20 .11 -.07 longjump . 1.0 .42 .51 .49 .52 .31 .36 .21 .09 shotput . . 1.0 .38 .19 .36 .73 .24 .44 -.08 highjump . . . 1.0 .29 .46 .27 .39 .17 .18
run400m . . . . 1.0 .34 .17 .23 .13 .39 run110mh . . . . . 1.0 .32 .33 .18 .00 discus . . . . . . 1.0 .24 .34 -.02 polevaul . . . . . . . 1.0 .24 .17 javelin . . . . . . . . 1.0 -.00
run1500m . . . . . . . . . 1.0 ;
proc factor method=p n=4 ;
var run100m longjumpshotputhighjump run400m run110mh discus polevaul javelin run1500m; run;
3因子旋转
datadecathlo(type=corr); _type_='corr';
input _name_ $ run100m longjumpshotputhighjump run400m run110mh discus polevaul javelin run1500m; cards;
run100m 1.0 .59 .35 .34 .63 .40 .28 .20 .11 -.07 longjump . 1.0 .42 .51 .49 .52 .31 .36 .21 .09 shotput . . 1.0 .38 .19 .36 .73 .24 .44 -.08 highjump . . . 1.0 .29 .46 .27 .39 .17 .18
run400m . . . . 1.0 .34 .17 .23 .13 .39 run110mh . . . . . 1.0 .32 .33 .18 .00 discus . . . . . . 1.0 .24 .34 -.02 polevaul . . . . . . . 1.0 .24 .17 javelin . . . . . . . . 1.0 -.00
run1500m . . . . . . . . . 1.0 ;
proc factor method=prinnfact=4 rotate=v;
var run100m longjumpshotputhighjump run400m run110mh discus polevaul javelin run1500m; run;
得到的主要输出是旋转矩阵表(表头为Orthogonal Transformation Matrix)即可得到旋转正交阵;
同时,也可以得到旋转后的因子负荷阵表(表头为Rotated Factor Pattern)即可得到因子负荷阵。
4因子得分:
模型评价:
做因子分析时,存在许多变数:估计参数的方法有多种,公共因子的个数k可以取多个值,旋转方法有多种,如何操作?最简单的判断是:选k
使公共因子解释的方差占总方差的75%左右,公共因子有较合理的解释。用大样本理论也可建立确定k。有的统计学家,如Richad(2003)建议
采用如下策略:
1.选k使公共因子解释的方差占总方差的60%左右,且公共因子有较合理的解释。
2.对有关数据用主成分法,最大方差旋转做因子分析。对有关数据用极大似然法,最大方差旋转做因子分析。比较两种方法的因子负荷阵是否
大体相同?若大体相同,再以两种方法所得同一个公共因子的得分为纵横轴画散点图,看两种方法的因子得分是否出入不大?若出入不大,则
因子分析效果较好。
3.检查是否有必要再扩大公共因子个数k?
4.若样本容量很大,将样品分为两组,对每组做因子分析,再对整个样本做因子分析,比较三次因子分析的结果,以判断稳定性。
程序摘要: 1数据导入: data econ1;
input prov $ x1 x2 x3 x4 x5 x6 x7 x8; /*$表示它前面的变量读取字符*/ card;
2主成分解:
PROC FACTOR DATA= econ1 SIMPLE CORR(如果去掉,则会缺少基本信息的分析); Var x1-x8;
TITLE '8个经济指标的分析';(可省) TITLE2 '主成分解';(可省) RUN;
3选择公因子
在FACTOR语句中增加选项n = 3,重做分析: PROC FACTOR DATA= econ1 n = 3; Var x1 – x8;
RUN;
3因子旋转:
PROC FACTOR DATA= econ1 n = 3 ROTATE = VARIMAX REORDER; Var x1 – x8; RUN;
4因子得分:
PROC FACTOR DATA=econ1 n=3
ROTATE=VARIMAX REORDER SCORE OUT=OUT;(因子得分) RUN;
PROC PRINT DATA=Out;
VAR prov factor1 factor2 factor3;(各省的观测值代入以上因子得分函数,即得各地区的因子得分) RUN;
PROC PLOT DATA = Out;
PLOT factor2*factor1 $diqu = '*'/href=0 vref=0;(作图) RUN;