降维:使用SPSS主成分分析(PCA)与因子分析

毕设在用SPSS做PCA的时候,遇到一些问题。虽然以前在做数模的时候也遇到过,但是,当时只是照着书上走,做个评价什么的。这次,更深度的思考了一些问题,在这里记录下来,以备今后再次遇到时,能省些力气。

因为我自身并非统计出身,描述中可能会有纰漏,还希望懂行的大佬给予我进行指正,纠正我的错误观念,感谢。

为什么要用PCA?

首先,降维是为了将多维的指标(变量)降低维度,以便简化计算,防止维度爆炸之类的。当然,也有很多其他好处,比如我做的是回归分析,本文将重点讲到这个。

对于回归分析而言,很多人可能会问,为什么我不能直接拿来做多变量线性回归?而要绕一个大圈,来做个降维。当然,可以直接用自变量X和因变量Y来做,但是自变量间难免的可能会有相关性,如果自变量间相关性较大,可能会导致多重共线性的问题。其百度百科的描述如下:

“多重共线性(multi-colinearity) 是进行多重回归分析时存在的一个普遍问题。多重共线性是指自变量之间存在近似的线性关系,即某个自变量能近似地用其他自变量的线性函数来表示。在实际回归分析应用中,自变量间完全独立很难,所以共线性的问题并不少见。自变量一般程度上的相关不会对回归结果造成严重的影响,然而,当共线性趋势非常明显时,它就会对模型的拟合带来严重影响。”

SPSS中可以通过观察几个指标来判断共线性的问题是否严重:
(1) 相关系数。通过做自变量间的散点图观察或者计算相关系数判断,看是否有一些自变量间的相关系数很高。一般来说,2个自变量的相关系数超过0.9,对模型的影响很大,将会出现共线性引起的问题。这只能做初步的判断,并不全面。
(2) 容忍度(tolerance)。以每个自变量作为因变量对其他自变量进行回归分析时得到的残差比例,大小用1减去决定系数来表示。该指标值越小,则说明被其他自变量预测的精度越高,共线性可能越严重。
(3) 方差膨胀因子(variance inflation factor,VIF)。方差膨胀因子是容忍度的倒数,VIF越大,显示共线性越严重。VIF>10时,提示有严重的多重共线性存在。
(4) 特征根(eigenvalue)。实际上是对自变量进行主成分分析,如果特征根为0,则提示有严重的共线性。
(5) 条件指数(condition index)。当某些维度的该指标大于30时,则提示存在共线性。

如果直接用,可能会导致方差膨胀,影响模型显著性。

比较科学的一些措施是:

  • 进行岭回归分析,可以有效解决多重共线性问题
  • 进行主成分分析PCA,提取公因子代替原变量进行回归分析。因为一般而言,提取出的每一个PC都是独立不相关的。
  • 逐步回归好像也行。但是统计的一个同学说现在用的比较少,不知道为什么…

PCA使用

提取PC后,可以用来计算综合指标F,之后与因变量回归,得到
F=b+aYF=b+a*Y
% 注意,这里的所有方程用到的都是自变量x经过标准化后的值。然而,SPSS里并不需要做标准化,这是比较智能的地方。

也可以用PC来和Y进行回归。
要注意一点:
“在SPSS中不能直接进行主成分分析,只能进行因子分析,所以主成分的系数,即Component Matrix,与统计学教材以及SAS统计软件中的计算结果不同。实际上,只要将上面各主成分的系数分别除以相应的主成分特征值的平方根就转化成了统计学教材以及以及SAS统计软件的计算结果。不过,上述主成分表达式问题也不大,也就是说,不除以特征值的平方根不影响主成分本身的结构和性质。”

但是,后续要做回归的话,还是除一下比较好。
降维:使用SPSS主成分分析(PCA)与因子分析
降维:使用SPSS主成分分析(PCA)与因子分析
0.7066 = 0.999/sqrt(1.999)

一般,直接用原始的主成分,可能解释不清因子代表的含义。所以对其因子旋转,使得不同因子有不同的高载荷系数(高相关性)的自变量。再对它们解释。

旋转后,为了建立PC与Y的线性回归模型,就要得到PC的得分,也就是因子得分,在SPSS里叫成分得分系数矩阵。

在Factor Scores对话框中,选中Save as variables(将因子得分存为新变量),SPSS会直接保存n个因子得分为n个新变量(FAC1_1, FAC1_2,…, FAC1_n),可对这些变量,采用其他多元统计方法继续进行分析。这里的因子得分系数不再是之前除以sqrt(特征值)了,可能是因为因子旋转的影响。

降维:使用SPSS主成分分析(PCA)与因子分析
最后,把它们回归后,一一展开,代入即可。

例:
Y=β0+β1PC1+β2PC2Y=\beta_0+\beta_1*PC_1+\beta_2*PC_2
PC1=α1x1+α2x2PC_1=\alpha_1*x_1+\alpha_2*x'_2
x=xμstd(x)x'=\frac{x-\mu}{std(x)}
std(x)=1n1i=1n(aijμj)2std(x)=\sqrt{\frac{1}{n-1}\sum\limits_{i=1}^{n}(a_{ij}-\mu_j)^2}
std是统计学样本的标准差,是对总体的估计,而对总体的估计得要求当中,有个标准是无偏性,除以n-1是无偏估计,而除以n不是。
当然,如果是总体,那就直接除以n,二我们接触到的都是样本,所以普遍用n-1。

由此,展开后,相当于也就是更新了一下系数,就可得到Y关于原始自变量X的回归方程了。拿来做预测什么的完全没有问题。
hhh

参考

  1. 刘仁权. SPSS统计分析教程. 第2版. 北京:中国中医药出版社, 2016
  2. https://baike.baidu.com/item/多重线性回归/4029155