1、一、 案例介绍某运营商无线增值业务全国各省某一个月内运营情况,变量 35 个,样本 31 个(全国 31 个省),希望通过因子分析对各省综合实力进行排序。二、 问题描述通过 spss 的因子分析对原始变量进行降维处理时,SPSS 提示相关系数矩阵为“非正定矩阵” ,无法给出 KMO 值,但是 SPSS 仍然给出了后续因子分析结果。三、 疑问1) 什么是正定矩阵?2) 因子分析是否一定要求变量的相关系数矩阵为正定矩阵?3) 非正定矩阵的存在对因子分析结果有何影响?4) 如何修正使得变成正定矩阵?四、 解决办法通过在论坛上查阅人相关问题,发现其他网友总结出现这种情况的原因主要集中在两点:1) 样本
2、量太少,而指标过多2) 某些变量间相关性太强而解决方案分别要求增加样本,或者剔除某些显著强相关的变量,但是在我的这个例子里面无法增加样本,因此只能从变量的相关性上考虑,看是不是存在一些和其他变量高度相关的变量。通过查看因子分析结果中的相关系数矩阵,的确发现大部分变量之间都存在高度相关性,而且相关系数在 0.9 以上:但是现在问题来了,那是不是应该直接删除高度相关的变量?该删除哪些变量?按照我的情况估计很多变量都要剔除了,那对于分析结果就会产生很大的影响。为了找出具体是哪些变量导致问题的出现,我用了一个比较笨的办法:逐一淘汰法。刚开始时不把所有变量都用来做因子分析,只选取一小部分,例如我先选取了
3、 10 个变量做分析,发现 spss 没有再提示“非正定矩阵”而是正常的输出了 KMO 检验值,而且顺利完成了因子分析结果;然后下一步我再逐个添加其他变量进行测试,当发现添加某个变量 spss 提示“非正定矩阵”时,就记下这个变量,然后再换成下一个变量继续测试,直到把所有变量测试完。通过这样的测试,我终于找到让 spss 认为“非正定矩阵”的原因:一共有 5 个变量,只要不纳入这 5 个变量进行分析, spss 就能正常的进行因子分析。找到原因后,我本来想直接删除掉这 5 个变量好了,但是我查看了一下 spss 因子分析的输出结果,发现了为什么是这 5 个变量的原因,如下图:上图的截图是“解释
4、的总方差”显示所有变量的相关系数矩阵的所有特征值,大家可以看到在用红色方框标注的 5 个特征值,他们的数值的数量级都是 10 的负 16 次方、17 次方、18 次方,甚至出现了负值,几乎可以认为就是零了,远远小于其他特征值,根据之前的逐一测试法确认,这 5 个特征值是与之前发现的那 5 个变量是对应的,我想这就应该是为什么是这 5 个变量导致出现非正定矩阵的原因吧。那进一步思考,特征值过小或者为负值说明了什么呢,根据正定矩阵的判定,正定矩阵的充分必要条件是:特征值0,所有出现负的特征值就肯定会出现“非正定矩阵”的原因,但就靠这点似乎还不够,因为有些特征值是大于 0 的,只是非常非常小而已。
5、我推测(仅仅是我推测) ,因为我们在做主成分分析的时候,每个主成分的方差就等于对于特征值,特征值太小意味着主成分的方差太小,方差太小意味着包含变量的信息量太少,而我们在做因子分析时往往也是用主成分法来抽取公因子,所以特征值太小可能也无法满足正定矩阵的条件,当然这是我的推测。五、 总结根据整个过程,我总结了一下几点:1) 出现非正定矩阵的情况,并不一定都是样本太少(本例中样本才 31,变量有 35 个)2) 剔除变量的时候,可以利用逐一淘汰法来发现问题变量,再考虑是否要删除3) 非正定矩阵似乎对因子分析结果并无太多影响,因为我们往往只抽取了部分公因子(累计方差贡献率85%) ,特征值过小意味着方差贡献率也会很小,往往不会被选作公因子,所以对结果影响不大,这也是为什么 spss 仅仅是提示,仍然会输出因子分析结果的原因。好了,这个是我工作中碰到的一个实际例子,之前一直困扰了我很久,现在写出来与大家分享,希望能对有同样问题的朋友一个启发,当然里面一定有不对的地方,希望大家多多指正。