登录
首页精彩阅读讨论:因子分析非正定矩阵是怎么回事儿
讨论:因子分析非正定矩阵是怎么回事儿
2016-07-12
收藏

讨论:因子分析非正定矩阵是怎么回事儿

在最近的工作中需要用spss做因子分析,但是在具体操作过程中遇到了头疼的“非正定矩阵的问题”,困扰了很久。看了论 坛上很多网友的讨论和解决办法,加上自己的一些摸索,也最终找到了问题的原因和解决办法,现在写出来与大家分享,希望对有同样困扰的朋友一些启示,当然其 中一定有不对的地方,欢迎大家一起讨论。

一、案例介绍

某运营商无线增值业务全国各省某一个月内运营情况,变量35个,样本31个(全国31个省),希望通过因子分析对各省综合实力进行排序。

二、问题描述

通过spss的因子分析对原始变量进行降维处理时,SPSS提示相关系数矩阵为“非正定矩阵”,无法给出KMO值,但是SPSS仍然给出了后续因子分析结果。

三、疑问

(1)什么是正定矩阵?

(2)因子分析是否一定要求变量的相关系数矩阵为正定矩阵?

(3)非正定矩阵的存在对因子分析结果有何影响?

(4)如何修正使得变成正定矩阵?

四、解决办法

通过在论坛上查阅人相关问题,发现其他网友总结出现这种情况的原因主要集中在两点:

(1)样本量太少,而指标过多。

(2)某些变量间相关性太强。

而解决方案分别要求增加样本,或者剔除某些显著强相关的变量。

但是在我的这个例子里面无法增加样本,因此只能从变量的相关性上考虑,看是不是存在一些和其他变量高度相关的变量。通过查看因子分析结果中的相关系数矩阵,的确发现大部分变量之间都存在高度相关性,而且相关系数在0.9以上。

但是现在问题来了,那是不是应该直接删除高度相关的变量?该删 除哪些变量?按照我的情况估计很多变量都要剔除了,那对于分析结果就会产生很大的影响。

为了找出具体是哪些变量导致问题的出现,我用了一个比较笨的办法:逐一淘汰法。刚开始时不把所有变量都用来做因子分析,只选取一小部分,例如我先选取了10个变量做分析,发现spss没有再提示“非正定矩阵”而是正常的输出了KMO检验值,而且顺利完成了因子分析结果;然后下一步我再逐个添加其他变量进行测试,当发现添加某个变量spss提示“非正定矩阵”时,就记下这个变量,然后再换成下一个变量继续测试,直到把所有变量测试完。通过这样的测试,我终于找到让spss认为“非正定矩阵”的原因:一共有5个变量,只要不纳入这5个变量进行分析,spss就能正常的进行因子分析。

找到原因后,我本来想直接删除掉这5个变量好了,但是我查看了一下spss因子分析的输出结果,发现了为什么是这5个变量的原因,如下图:

上图的截图是“解释的总方差”显示所有变量的相关系数矩阵的所有特征值,大家可以看到在用红色方框标注的5个特征值,他们的数值的数量级都是10的负16次方、17次方、18次方,甚至出现了负值,几乎可以认为就是零了,远远小于其他特征值,根据之前的逐一测试法确认,这5个特征值是与之前发现的那5个变量是对应的,我想这就应该是为什么是这5个变量导致出现非正定矩阵的原因吧。

那进一步思考,特征值过小或者为负值说明了什么呢,根据正定矩阵的判定,正定矩阵的充分必要条件是:特征值>0,所有出现负的特征值就肯定会出现“非正定矩阵”的原因,但就靠这点似乎还不够,因为有些特征值是大于0的,只是非常非常小而已。我推测(仅仅是我推测),因为我们在做主成分分析的时候,每个主成分的方差就等于对于特征值,特征值太小意味着主成分的方差太小,方差太小意味着包含变量的 信息量太少,而我们在做因子分析时往往也是用主成分法来抽取公因子,所以特征值太小可能也无法满足正定矩阵的条件,当然这是我的推测。

五、总结

根据整个过程,我总结了一下几点:

(1)出现非正定矩阵的情况,并不一定都是样本太少(本例中样本才31,变量有35个)。

(2)剔除变量的时候,可以利用逐一淘汰法来发现问题变量,再考虑是否要删除。

(3)非正定矩阵似乎对因子分析结果并无太多影响,因为我们往往只抽取了部分公因子(累计方差贡献率>85%),特征值过小意味着方差贡献率也会很小,往往不会被选作公因子,所以对结果影响不大,这也是为什么spss仅仅是提示,仍然会输出因子分析结果的原因。 

好了,这个是我工作中碰到的一个实际例子,之前一直困扰了我很久,现在写出来与大家分享,希望能对有同样问题的朋友一个启发,当然里面一定有不对的地方,希望大家多多指正。


数据分析咨询请扫描二维码

客服在线
立即咨询