1、首先打开SPSSAU,右上角上传数据,点击或者拖拽原始数据文件上传。
2、选择进阶方法->主成分,选择需要分析的题目,拖拽到右侧。点击“开始主成分分析”。
3、可以自行设置好要输出的主成分个数,而不是让软件自动识别。
4、完成以上操作后,即可得到分析结果,结果如下:KMO 和 Bartlett 的检验,及智能分析。
主成分分析的基本思想介绍如下:
主成分分析的原理是设法将原来变量重新组合成一组新的相互无关的几个综合变量,同时根据实际需要从中可以取出几个较少的总和变量尽可能多地反映原来变量的信息的统计方法叫做主成分分析或称主分量分析,也是数学上处理降维的一种方法。
主成分分析的主要作用
1.主成分分析能降低所研究的数据空间的维数。
2.有时可通过因子负荷aij的结论,弄清X变量间的某些关系。
3.多维数据的一种图形表示方法。
4.由主成分分析法构造回归模型。即把各主成分作为新自变量代替原来自变量x做回归分析。
5.用主成分分析筛选回归变量。
最经典的做法就是用F1(选取的第一个线性组合,即第一个综合指标)的方差来表达,即Va(rF1)越大,表示F1包含的信息越多。因此在所有的线性组合中选取的F1应该是方差最大的,故称F1为第一主成分。
拓展:
主成分分析是指通过将一组可能存在相关性的变量转换城一组线性不相关的变量,转换后的这组变量叫主成分。
主成分分析步骤:1、对原始数据标准化,2、计算相关系数,3、计算特征,4、确定主成分,5、合成主成分。
主成分分析,就是要对X进行标准化处理(去除变量量纲的影响)得Xstd,之后cov(Xstd)求协方差Xcov,然后eig(Xcov)求特征值Xval和特征矩阵Xvec,将Xval从大到小排序,取80%~90%的主成分Xvalmain和Xvecmain(负荷向量),XstdXvecmain=Xscore(得分向量)
多重共线性指自变量问存在线性相关关系,即一个自变量可以用其他一个或几个自变量的线性表达式进行表示。若存在多重共线性,计算自变量的偏回归系数β时,矩阵不可逆,导致β存在无穷多个解或无解。
而在使用多元线性回归构建模型过程中,变量之间存在多重共线性问题也是比较常见的。那么当发现多重线性回归模型中存在多重共线性时我们该如何处理呢?
可通过以下方法予以解决:
(1)逐步回归
使用逐步回归可以在一定程度上筛选存在多重共线性的自变量组合中对反应变量变异解释较大的变量,而将解释较小的变量排除在模型之外。
但这种方法缺点是当共线性较为严重时,变量自动筛选的方法并不能完全解决问题。
(2) 岭回归
岭回归为有偏估计,但能有效地控制回归系数的标准误大小。
(3) 主成分回归
可以使用主成分分析的方法对存在多重共线性的自变量组合提取主成分,然后以特征值较大的(如大于1)几个主成分与其他自变量一起进行多重线性回归。得出的主成分回归系数再根据主成分表达式反推出原始自变量的参数估计。
该方法在提取主成分时丢失了一部分信息,几个自变量间的多重共线性越强,提取主成分时丢失的信息越少。
(4) 路径分析
如果对自变量间的联系规律有比较清楚的了解,则可以考虑建立路径分析模型,以进行更深入的研究。
假设有k个自变量的多元线性回归模型:
其中误差项是一个期望值为0且服从正态分布的随机变量:
则利用最小二乘法可得参数的估计值为:
该求解公式唯一的条件是矩阵X是列满秩的,不然会有无穷多解:
当各变量之间存在共线性问题,即各变量之间存在部分线性相关时,例如:
易知此时X近乎是不满秩的(实际情况很难完全共线性),X^TX近乎是奇异的,X的最小奇异值会非常小,那它的影响到底有多大呢?我们先从 矩阵计算 的角度来看。
对于一个方程或者系统而言,当输入有一个非常微小的扰动时,我们希望方程或系统的输出变化也非常微小,如果输出的变化非常大,且不能被控制,那这个系统的预测就无效了,蝴蝶效应讲的就是这个。在矩阵计算中,这叫做 扰动分析 。
可以看到矩阵的条件数越大,扰动就越大,即x的求解值会变得非常不准确。回到上面讲的线性回归问题,容易证明最小二乘法的解满足下面的正定方程:
此时
当方程有共线性问题时,X的最小特征值非常小,相应的,上述的条件数会非常大。也就是说机器学习中的共线性问题实际上就是矩阵计算中的条件数问题。 从实际应用的角度,一般若K<100,则认为多重共线性的程度很小,若是100<=K<=1000,则认为存在一般程度上的多重共线性,若是K>1000,则就认为存在严重的多重共线性。
再从统计学的角度来看共线性。可以证明参数$\theta$的协方差矩阵为
又对任意的常数矩阵A和随机变量x有
代入上式即可得
具体到每个参数,有:
其中$R i 2 $是将第i个变量$x_i$作为因变量,其他k-1个变量作为自变量进行线性回归获得的$R 2 $,且令
为 方差膨胀因子 ( variance inflation factor ,VIF)。当
时,即当第i个变量和其他变量之间存在线性关系时,VIF趋于无穷大。所以 VIF 的大小反应了变量的共线性程度。一般地,当VIF大于5或10时,认为模型存在严重的共线性问题。
同时考虑参数显著性检验的 t 统计量 :
当存在共线性时,参数的标准差偏大,相应的 t 统计量 会偏小,这样容易淘汰一些不应淘汰的解释变量,使统计检验的结果失去可靠性。
另外考虑线性回归的残差
其中M是一个投影矩阵,且满足
易证明
而矩阵M的范数与X的条件数毫无关系,于是可以得出 共线性并不影响模型的训练精度 。但是对于泛化精度,由于参数的估计已经不准确啦,所以泛化误差肯定要差些,具体差多少,我还很难用公式表示出来。
总结一下,共线性问题对线性回归模型有如下影响:
根据上一节的描述,共线性问题有如下几种检验方法:
当变量数不多,样本数不是很大时,上述的方法是没问题的,检验某个变量有共线性问题时,可以结合实际业务考虑直接剔除该变量。但是有的时候变量数大到有上千个,VIF的计算需要建立上千个回归模型(条件数仅能判定是否存在共线性,但不能找到对应的变量),这将耗费很长时间。
事实上我们可以从模型角度来直接规避共线性问题。
主成分分析法作为多元统计分析的一种常用方法在处理多变量问题时具有其一定的优越性,其降维的优势是明显的,主成分回归方法对于一般的多重共线性问题还是适用的,尤其是对共线性较强的变量之间。当采取主成分提取了新的变量后,往往这些变量间的组内差异小而组间差异大,起到了消除共线性的问题。
逐步回归(Stepwise Regression)是一种常用的消除多重共线性、选取“最优”回归方程的方法。其做法是将逐个引入自变量,引入的条件是该自变量经F检验是显著的,每引入一个自变量后,对已选入的变量进行逐个检验,如果原来引入的变量由于后面变量的引入而变得不再显著,那么就将其剔除。引入一个变量或从回归方程中剔除一个变量,为逐步回归的一步,每一步都要进行F 检验,以确保每次引入新变量之前回归方程中只包含显著的变量。这个过程反复进行,直到既没有不显著的自变量选入回归方程,也没有显著自变量从回归方程中剔除为止。
岭回归是一种可用于共线性数据分析的有偏估计回归方法,它是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对条件数很大(病态数据)的拟合要强于最小二乘法。
在线性回归问题中,最小二乘法实际上是最小化问题:
而岭回归则是加入了L2惩罚项:
这样参数的方差不会过大,且随着惩罚项系数C的增大,共线性的影响将越来也小。在这个过程中,可以记录$\theta(k)$(岭迹)的变化情况,通过对岭迹的波动来判断我们是否要剔除该变量。
那为什么说岭回归能解决共线性问题呢?从矩阵计算的角度来看,L2正则化下方程的解为:
在上一节我们讲到共线性代表正定矩阵X T X的条件数很大:
而当条件数很大时,矩阵的逆的数值计算也是非常不准确的,但是当我们给矩阵加上一个单位矩阵时,奇异性(不可逆)问题就完全没有啦。
进一步考虑对惩罚项对奇异值的影响,假设X的奇异值(SVD)分解为:
则容易证明
其中D是对角矩阵,且满足
其反应了惩罚项是如何影响到条件数的。
LASSO回归和岭回归类似,只不过将惩罚项由L2范数改为了L1范数
L1范数没有L2范数那么圆润,毕竟存在不可导点,而且在L1范数下LASSO回归也给不出解析解啦,但是相对于岭回归,LASSO估计的参数能更容易收敛到0
ElasticNet回归同时兼顾了L1和L2惩罚项:
当许多变量是相关的时候,Elastic-net是有用的。Lasso一般会随机选择其中一个,而Elastic-net则会选在两个。
除此之外,还有L0范数(非零元的个数)、L1/2范数等。
首先捏造一份好的数据,样本量为100,特征数为8,且满足方程:
其中误差项是期望为0,标准差为15的正态分布随机变量。
此时平均准确率为0934955,拟合的系数MSE为0203657
然后我们基于这份数据另外构造出两份数据,第二份数据增加两个随机的特征用作对比,第一份数据则增加两个共线性特征:
先来看下它们的条件数
可以看到X2的条件数很搭,最小奇异值为0213,此时还不至于完全共线性。
拿这两份数据重新用线性回归拟合模型。
对于第二份共线性构造数据X2,有平均测试集准确率为0932070,拟合的参数MSE为7697837。可以看到MSE增加了很多,准确率也下降了02%,测试拟合的系数为:
在来看对比用的数据X3,其平均测试集准确率为0934952,参数MSE为0171651,与X1无异。
以上是直接的结果,我们再来看VIF
可以看到第0、1、2、3、8、9个特征的VIF都过高。且可以看出第1个特征相对第0、2、3个特征的VIF较高。
最后我们试着用模型的方法来检测共线性问题
其中当alpha取01时,岭回归估计的系数分别为
可以看到第0、1、2、3、8、9个变量都出现了波动,代表它们之间存在一定的共线性。观察岭迹,我们可以考虑剔除其中波动比较大的第1、8、9个变量。
另外Lasso回归类似,可以用sklearn中的linear_modelLasso来学习,这里就不展示了。最后对于逻辑回归任务,sklearn函数内部提供了L1或L2正则化方案,通过它们也可以去检测共线性问题。
[1] variance inflation factor
[2] 多重共线性的解决方法之——岭回归与LASSO
[3] ridge regression
欢迎分享,转载请注明来源:品搜搜测评网