暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

基于R的因子分析(以上市公司数据为例)

R语言数据分析与建模 2020-05-16
756

一.概念和原理:因子分析法是从研究变量的内部的依赖关系出发,把一些具有错综复杂关系的变量归结为少数几个综合因子的一种多变量统计分析方法。它的基本思想是将观测变量进行分类,将相关性较高,即联系比较紧密的分在同一类中,而不同变量之间的相关性比较低,那么每一类变量实际上就代表一只基本结构,即公共因子。


可以把因子分析看作是主成分分析的推广,即可从研究相关系数矩阵内部的依赖关系出发,把一些错综复杂的关系变量归结为少数几个综合因子。研究样品间相互关系的因子关系称为Q型分析,研究变量间相互关系的因子分析成为R型因子分析。


二.因子载荷及其解释

  1. 极大似然估计法

 如果假定公共因子F和特色因子ε服从整态分布,则可以得到因子载荷的极大似然估计,设估计x1,x2,...xn分布服从正态总体(u,)的随机样本,其中∑=AA'+D.

从似然函数理论知:

l(u,∑)=(2pi)^-np/2|∑|^-n/2e^-1/2tr[∑(xj-x)(xj-x)'+n(x-μ)(x-μ  )']

(注意这里的x是x的均值)

它通过∑依赖于A和D,但上面的似然函数并不是唯一确定A,因此需要添加一下条件A'D^-1A=Λ,其中Λ是一个对角矩阵。、

可以通过数值极大化的方法可以得到A和D的极大似然估计A^ 和D^,因子分析,factanal()可以做这种估计;但是注意!函数factanal()函数是基于极大似然方法来求解的,对数据的要求比较高,通常假定数据符合多元正态分布。


因子载荷:因子载荷 aij 的统计意义就是第i个变量与第 j 个公共因子的相关系数即表示 X依赖 Fj 的份量(比重)。统计学术语称作权,心理学家将它叫做载荷,即表示第 i 个变量在第 j 个公共因子上的负荷,它反映了第 i 个变量在第 j 个公共因子上的相对重要性。


因子旋转:建立因子分析的模型目的不仅仅是找出主因子,更重要的是知道每个主因子的意义,以便对实际问题进行分析。如果求出主因子后,各个主因子的典型代表变量不是很突出,还需要进行因子旋转,从而得到比较满意的因子。有两种旋转方式正交旋转(varimax),i斜交旋转。斜交旋转在日常应用中并不多见。

因子旋转就是使因子的载荷矩阵中因子载荷的绝对值向0和1两个方向分化,使大的载荷更大,小的载荷更小。在因子旋转过程中,如果因子对应轴互相正交,则成为正交矩阵。

若因子分析模型为X=AF+ε,设Γ =(γij)为正交矩阵,作为正交矩阵变换B=AΓ,可以证明,hi^2(B)=hi^2(A),gj^2(B)=∑γijgk^2(A),其中B=bij.这表明经过正交旋转后,共同度hi^2并不改变,但是公共因子的方差贡献贡献gj^2不再与原来相同。


因子得分的计算。因子分析模型建立后还有一个重要作用是应用因子分析模型去评价每个样品在整个模型中的地位,即综合评价,因子得分可以通过因子得分信息图进行展示。


概念的问题都介绍完毕,我们回顾一下步骤:

1.确认数据是否适合做因子分析

2.构造因子变量

3.旋转因子使得其更具有可解释性

4.计算因子得分并做因子图。

如何对数据进行确认是否做因子分析呢?常见方法有以下几种

(1)简单相关分析,计算原始变量的简单相关系数矩阵,如果矩阵中大部分数值过小(小于0.3),则认为大部分变量呈弱相关,不适合做因子分析;如果某个变量和其他变量相关性较弱,则可以在接来的分析中剔除该变量。 缺点:当变量很多的时候,观测起来及其不方便。

(2)偏相关分析,偏相关分析是在控制了其他变量影响的条件下计算出来的净相关系数。如果原有变量之间确实存在较强的相互重叠以及传递影响,换句话说,如果原有变量中确实能够提取公共因子,那么在控制了这些变量后的偏相关系数必然很小。

(3)KMO检验,是用于比较变量间简单相关关系和偏相关关系的指标。KMO检验统计量取值在0和1之间。如果小于0.6则认为不太合适。

(4)Bartlett's球体检验,检验的目的是判断相关矩阵是否是单位矩阵。如果是单位矩阵则认为不适合做因子分析。

一般采用KMO检验和Bartlett's球体检验进行验证。然后可以通过factanal()函数进行计算。根据累积方差贡献率确定因子的个数:如果前m个因子包含数据信息总量(即累积方差贡献率不低于80%)时,可取m个因子来反映原评价指标。然后,获得因子载荷并作出解释。根据m个因子无法确定或者实际意义不明显的时候,可以因子进行旋转来获得明显的实际意义。

概念性问题就介绍到这里了,下面我们来找个具体的案例进行感受一下。

引用一个上市公司经营业绩评价的因子分析。


library(gdata)

company=read.xls("Downloads/company.xlsx",sheet = "company")

company$上市公司<-as.numeric(company$上市公司)

fao<-factanal(company,4,rotation = "none")

fao

pairs(fao$loadings)

结果如下(没有进行旋转的)

Call:

factanal(x = company, factors = 4, rotation = "none")


Uniquenesses:

上市公司       X1       X2       X3       X4       X5 

   0.893    0.030    0.460    0.236    0.018    0.005 

      X6       X7       X8       X9      X10      X11 

   0.021    0.005    0.005    0.680    0.131    0.169 


Loadings:

         Factor1 Factor2 Factor3 Factor4

上市公司 -0.292  -0.140                 

X1        0.939   0.296                 

X2        0.714   0.148                 

X3        0.814   0.312                 

X4        0.932   0.320                 

X5                0.700           0.710 

X6                0.707           0.688 

X7                0.943          -0.325 

X8                0.944          -0.319 

X9        0.227  -0.333   0.392         

X10       0.394           0.817   0.207 

X11       0.524  -0.144   0.732         


               Factor1 Factor2 Factor3 Factor4

SS loadings      3.501   3.233   1.373   1.244

Proportion Var   0.292   0.269   0.114   0.104

Cumulative Var   0.292   0.561   0.676   0.779


Test of the hypothesis that 4 factors are sufficient.

The chi square statistic is 91.56 on 24 degrees of freedom.

The p-value is 7.95e-10 

接下来进行因子旋转

fao1<-factanal(company,4,rotation="varimax")

fao1

pairs(fao1$loadings)

结果如下:

Call:

factanal(x = company, factors = 4, rotation = "varimax")


Uniquenesses:

上市公司       X1       X2       X3       X4       X5 

   0.893    0.030    0.460    0.236    0.018    0.005 

      X6       X7       X8       X9      X10      X11 

   0.021    0.005    0.005    0.680    0.131    0.169 


Loadings:

         Factor1 Factor2 Factor3 Factor4

上市公司 -0.303                         

X1        0.959           0.105   0.192 

X2        0.723                   0.102 

X3        0.843           0.151   0.171 

X4        0.980           0.115         

X5        0.133   0.967   0.193         

X6                0.959   0.227         

X7        0.162   0.223   0.948  -0.149 

X8        0.162   0.228   0.947  -0.150 

X9               -0.236  -0.199   0.470 

X10       0.198   0.150           0.896 

X11       0.319                   0.846 


               Factor1 Factor2 Factor3 Factor4

SS loadings      3.427   2.056   1.986   1.882

Proportion Var   0.286   0.171   0.165   0.157

Cumulative Var   0.286   0.457   0.622   0.779


Test of the hypothesis that 4 factors are sufficient.

The chi square statistic is 91.56 on 24 degrees of freedom.

The p-value is 7.95e-10 

> pairs(fao1$loadings)

从图中可以看到四个因子的方差贡献率达到80%左右,所以只要取前面四个因子就可以较好的概括原始指标。

从通过正交旋转后的因子中可以看到因子载荷矩阵F1在x1,x2,x3,x4的载荷量比较大。F2在x5,x6的载荷量比较大。F3在x7,x8的载荷量比较大。F4在x10,x11的载荷量比较大



文章转载自R语言数据分析与建模,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论