R-主成分-聚类-因子分析解释

来源:互联网 发布:手机qq浏览器3.1java版 编辑:程序博客网 时间:2024/04/30 05:37

解释

  • 主成分分析就是设法将原来众多具有一定相关性(比如P个指标),重新组合成一组新的互相无关的综合指标来代替原来的指标。
    综合指标即为主成分。所得出的少数几个主成分,要尽可能多地保留原始变量的信息,且彼此不相关。

  • 因子分析是研究如何以最少的信息丢失,将众多原始变量浓缩成少数几个因子变量,以及如何使因子变量具有较强的可解释性的一种多元统计分析方法。

  • 聚类分析是依据实验数据本身所具有的定性或定量的特征来对大量的数据进行分组归类以了解数据集的内在结构,并且对每一个数据集进行描述的过程。
    其主要依据是聚到同一个数据集中的样本应该彼此相似,而属于不同组的样本应该足够不相似。

基本思想的异同

(1) 共同点

主成分分析法和因子分析法都是用少数的几个变量(因子) 来综合反映原始变量(因子) 的主要信息,变量虽然较原始变量少,但所包含的信息量却占原始信息的85 %以上,所以即使用少数的几个新变量,可信度也很高,也可以有效地解释问题。并且新的变量彼此间互不相关,消除了多重共线性。这两种分析法得出的新变量,并不是原始变量筛选后剩余的变量。在主成分分析中,最终确定的新变量是原始变量的线性组合。在诸多主成分Z1中,Z1 在方差中占的比重最大,称为综合指标,综合原有变量的能力最强,第二主成分是调和指标,越往后主成分在方差中的比重也小。

因子分析是要利用少数几个公共因子去解释较多个要观测变量中存在的复杂关系,它不是对原始变量的重新组合,而是对原始变量进行分解,分解为公共因子与特殊因子两部分。公共因子是由所有变量共同具有的少数几个因子;特殊因子是每个原始变量独自具有的因子。
对新产生的主成分变量及因子变量计算其得分,就可以将主成分得分或因子得分代替原始变量进行进一步的分析,因为主成分变量及因子变量比原始变量少了许多,所以起到了降维的作用,为我们处理数据降低了难度。

聚类分析的基本思想是: 采用多变量的统计值,定量地确定相互之间的亲疏关系,考虑对象多因素的联系和主导作用,按它们亲疏差异程度,归入不同的分类中一元,使分类更具客观实际并能反映事物的内在必然联系。也就是说,聚类分析是把研究对象视作多维空间中的许多点,并合理地分成若干类,因此它是一种根据变量域之间的相似性而逐步归群成类的方法,它能客观地反映这些变量或区域之间的内在组合关系。聚类分析是通过一个大的对称矩阵来探索相关关系的一种数学分析方法,是多元统计分析方法,分析的结果为群集。对向量聚类后,我们对数据的处理难度也自然降低,所以从某种意义上说,聚类分析也起到了降维的作用。

(2) 不同点

主成分分析是研究如何通过少数几个主成分来解释多变量的方差一协方差结构的分析方法,也就是求出少数几个主成分(变量) ,使它们尽可能多地保留原始变量的信息,且彼此不相关。它是一种数学变换方法,即把给定的一组变量通过线性变换,转换为一组不相关的变量(两两相关系数为0 ,或样本向量彼此相互垂直的随机变量) ,在这种变换中,保持变量的总方差(方差之和) 不变,同时具有最大方差,称为第一主成分;具有次大方差,称为第二主成分。依次类推。若共有p 个变量,实际应用中一般不是找p 个主成分,而是找出m (m < p) 个主成分就够了,只要这m 个主成分能反映原来所有变量的绝大部分的方差。主成分分析可以作为因子分析的一种方法出现。

因子分析是寻找潜在的起支配作用的因子模型的方法。因子分析是根据相关性大小把变量分组,使得同组内的变量之间相关性较高,但不同的组的变量相关性较低,每组变量代表一个基本结构,这个基本结构称为公共因子。对于所研究的问题就可试图用最少个数的不可测的所谓公共因子的线性函数与特殊因子之和来描述原来观测的每一分量。通过因子分析得来的新变量是对每个原始变量进行内部剖析。因子分析不是对原始变量的重新组合,而是对原始变量进行分解,分解为公共因子和特殊因子两部分。具体地说,就是要找出某个问题中可直接测量的具有一定相关性的诸指标,如何受少数几个在专业中有意义、又不可直接测量到、且相对独立的因子支配的规律,从而可用各指标的测定来间接确定各因子的状态。因子分析只能解释部分变异,主成分分析能解释所有变异。

聚类分析算法是给定m 维空间R 中的n 个向量,把每个向量归属到k 个聚类中的某一个,使得每一个向量与其聚类中心的距离最小。聚类可以理解为: 类内的相关性尽量大,类间相关性尽量小。聚类问题作为一种无指导的学习问题,目的在于通过把原来的对象集合分成相似的组或簇,来获得某种内在的数据规律。

从三类分析的基本思想可以看出,聚类分析中并没于产生新变量,但是主成分分析和因子分析都产生了新变量。

数据标准化的比较

主成分分析中为了消除量纲和数量级,通常需要将原始数据进行标准化,将其转化为均值为0方差为1 的无量纲数据。

因子分析在这方面要求不是太高,因为在因子分析中可以通过主因子法、加权最小二乘法、不加权最小二乘法、重心法等很多解法来求因子变量,并且因子变量是每一个变量的内部影响变量,它的求解与原始变量是否同量纲关系并不太大,当然在采用主成分法求因子变量时,仍需标准化。不过在实际应用的过程中,为了尽量避免量纲或数量级的影响,建议在使用因子分析前还是要进行数据标准化。在构造因子变量时采用的是主成分分析方法,主要将指标值先进行标准化处理得到协方差矩阵,即相关矩阵和对应的特征值与特征向量,然后构造综合评价函数进行评价。

聚类分析中如果参与聚类的变量的量纲不同会导致错误的聚类结果。因此在聚类过程进行之前必须对变量值进行标准化,即消除量纲的影响。不同方法进行标准化,会导致不同的聚类结果要注意变量的分布。如果是正态分布应该采用z 分数法。

应用中的优缺点比较

(1) 主成分分析

  • 优点
    首先它利用降维技术用少数几个综合变量来代替原始多个变量,这些综合变量集中了原始变量的大部分信息。其次它通过计算综合主成分函数得分,对客观经济现象进行科学评价。再次它在应用上侧重于信息贡献影响力综合评价。

  • 缺点
    当主成分的因子负荷的符号有正有负时,综合评价函数意义就不明确。命名清晰性低。

(2) 因子分析

  • 优点
    第一它不是对原有变量的取舍,而是根据原始变量的信息进行重新组合,找出影响变量的共同因子,化简数据;第二,它通过旋转使得因子变量更具有可解释性,命名清晰性高。

  • 缺点
    在计算因子得分时,采用的是最小二乘法,此法有时可能会失效。

(3) 聚类分析

  • 优点
    聚类分析模型的优点就是直观,结论形式简明。

  • 缺点
    在样本量较大时,要获得聚类结论有一定困难。由于相似系数是根据被试的反映来建立反映被试间内在联系的指标,而实践中有时尽管从被试反映所得出的数据中发现他们之间有紧密的关系,但事物之间却无任何内在联系,此时,如果根据距离或相似系数得出聚类分析的结果,显然是不适当的,但是,聚类分析模型本身却无法识别这类错误。

常用的包

1.主成分

R语言自带主成分分析函数princomp(),psych包也可以进行主成分分析,可以进行主成分旋转,旋转后的主成分更易解释。

accepts <- read.csv("accepts.csv")orgData<-accepts[,c(-1,-2,-3,-5,-6)] #剔除目标变量以及非连续变量library(mice)imp<-mice(orgData,met="cart",m=1)    #先对缺失值进行插补orgData<-complete(imp) pri<-princomp(orgData,cor=TRUE)      #主成分分析方法prisummary(pri,loadings=TRUE)           #参考滚石图可知选取10个主成分                                     #对变量的解释达到85.4% screeplot(pri,type="line")           #画滚石图,library(psych)pri<-principal(orgData,nfactors = 10,rotate = "varimax",covar = F,scores = TRUE)pri                                  #主成分旋转pri_16<-principal(orgData,nfactors = 16,rotate = "varimax",covar = F,scores = TRUE)pri_16                               #用16个主成分进行分析

滚石图如下

这里写图片描述

> summary(pri,loadings=TRUE)Importance of components:                 Comp.1    Comp.2    Comp.3     Comp.4     Comp.5     Comp.6Standard deviation     2.0238021 1.6565243 1.3836170 1.22969256 1.21104888 1.03280690Proportion of Variance 0.2155671 0.1444249 0.1007577 0.07958652 0.07719155 0.05614158Cumulative Proportion  0.2155671 0.3599920 0.4607497 0.54033618 0.61752773 0.67366931                 Comp.7     Comp.8     Comp.9    Comp.10    Comp.11    Comp.12Standard deviation     1.00006803 0.97798930 0.92334068 0.78853177 0.73704300 0.71846690Proportion of Variance 0.05263874 0.05034016 0.04487147 0.03272539 0.02859118 0.02716814Cumulative Proportion  0.72630805 0.77664822 0.82151969 0.85424508 0.88283626 0.91000440                 Comp.13    Comp.14    Comp.15    Comp.16     Comp.17     Comp.18Standard deviation     0.6645585 0.64241996 0.57751094 0.49013314 0.355098431 0.330543986Proportion of Variance 0.0232441 0.02172123 0.01755363 0.01264371 0.006636573 0.005750491Cumulative Proportion  0.9332485 0.95496973 0.97252336 0.98516707 0.991803642 0.997554133                 Comp.19Standard deviation     0.215572433Proportion of Variance 0.002445867Cumulative Proportion  1.000000000

2.变量聚类

用ClustOfVar包进行变量聚类
数据预处理阶段,对于变量的聚类数量不能剩的太少,类之间相关性不大,类之间相关性较大就好。可保留多些变量。

library(ClustOfVar)setwd("D:\\R_edu\\data")accepts <- read.csv("accepts.csv")orgData<-accepts[,c(-1,-2,-3,-5,-6)]tree <- hclustvar(orgData)          #聚类plot(tree)                          #画图st<-stability(tree,B=30)            #重抽样30次(程序可直接画出图)                                    #stability评估结果稳定性plot(st)                            #画聚类稳定性图part <- cutreevar(tree,7,matsim = T)#聚成7类查看print(part)summary(part)part$sim                            #查看相关性矩阵part$var                            part <- cutreevar(tree,16,matsim = T)#聚成16类查看print(part)summary(part)part$sim

plot(tree)如下:

这里写图片描述

stability(tree,B=30)如下,找较高的点7,14,17:

这里写图片描述

  • 注意:
    Standard deviation 标准差 其平方为方差=特征值
    Proportion of Variance 方差贡献率
    Cumulative Proportion 方差累计贡献率
0 0