多元统计分析:因子分析

简介 (Factor Analysis, FA) 例 9.1 水泥行业上市公司 经营业绩因子模型 实证分析

相关分析

在评价指标时,观测数据很多,指标间 不可避免地存在 多重共线性,因此先计算 相关系数矩阵
1
2
3
4
library(openxlsx)

d9.1 = read.xlsx('../Res/mvstats5.xlsx', 'd9.1', rowNames=T)
cor(d9.1)

利用 factanal() 基于极大似然法的因子分析

1
2
3
4
# factanal() 基于极大似然法的因子分析
# 该函数对数据分布要求极高,通常需假定数据来自多元正态分布
Fa1 = factanal(d9.1, 3, rotation = "none")
Fa1$loadings # 因子载荷矩阵

基于 主成分估计 的因子分析函数 msa.fa()

1
2
3
4
# 自编因子分析函数 msa.fa()
source("../Res/msaR.R")

msa.fa(d9.1, m=6, rotation="none")$loadings
1
2
Fp1 = msa.fa(d9.1, m=3, rotation = "none")
Fp1$loadings
1
Fa1 # 极大似然法方差贡献
1
Fp1$vars  # 主因子法方差贡献
由主因子法结果,可看出,前三个因子的方差为 2.570, 1.713, 1.249,前3个因子所解释的方差占整个方差的 92.19%,基本能全面反映6项财务指标的信息,所以我们提取前3因子作为公因子
1
Fa1$uniquenesses  # 极大似然法 共同度
1
Fp1$common  # 主因子法 共同度
从上面结果,可看出,主因子法 计算共同度 比 极大似然法 好些

因子旋转

因子旋转方法:
- 正交旋转(Orthogonal Rotation)
- 斜交旋转(Oblique Rotation) 正交旋转法(varimax rotation)也称方差最大旋转法(spss中的varimax)。是使每个因子上具有最高载荷变量数最小,可简化对因子解释的旋转法。 在主成分分析中,用到正交旋转法,假设各因素相关。 假设提取出来的公共因素各不相关,是因素分析的最基本方法,与斜交旋转法相对应。 TODO: 这一段在百度百科上的解释 与 书上解释有冲突,书上解释 看起来就像是 说 正交旋转法有很多种,而 方差最大旋转 只是其中一种。 在因子旋转过程中,若因子对应轴 相互正交,则称为 正交旋转 最常用的正交旋转方法 是 最大方差正交旋转法(Varimax) 若因子对应轴 相互间 不是正交的,则称为斜交旋转。 常用的斜交旋转方法有 Promax 法等

极大似然法

1
2
Fa1 = factanal(d9.1, 3, rotation='none')
Fa1$loadings # 旋转前
1
Fa1$loadings[1:6,]  # 旋转前
1
2
Fa2 = factanal(d9.1, 3, rotation = 'varimax')
Fa2$loadings # 旋转后
1
Fa2$loadings[1:6,]  # 旋转后

主因子法

1
2
Fp1 = msa.fa(d9.1, 3, rotation = 'none')
Fp1$vars # 旋转前
1
Fp1$loadings # 旋转前
1
2
Fp2 = msa.fa(d9.1, 3, rotation='varimax')
Fp2$vars # 旋转后
1
Fp2$loadings  # 旋转后

因子得分

在了解了 各个 综合因子 具体含义后,可采用 回归法、Bartlett法等估计方法计算样本的因子得分
下面是 采用 主因子法 使用 回归估计法 计算的因子得分
1
Fp1$scores # 旋转前因子得分
1
Fp2$scores  # 旋转后因子得分

因子得分信息图

便于绘图,取 前两个因子,x轴为 Factor1, y轴为 Factor2
1
2
plot(Fp2$scores, asp=1);abline(h=0, v=0, lty=3)
text(Fp2$scores, labels=rownames(d9.1))
1
2
biplot(Fp2$scores, Fp2$loadings)  # 因子得分信息重叠图
abline(h=0, v = 0, lty = 3)

9.5.3 综合得分及排名

1
Fp1$ranks
1
Fp2$ranks
可看出,两种方法结果有出入,这与采用的算法有关。
因为做 因子分析 通常需要做 因子旋转 以获得较好的 因子解释,所以 我们 认为 旋转后 结果做综合评价 要好些。 9.6 因子分析的步骤

9.6.1 因子分析 基本步骤

计算 简单 相关系数矩阵,若矩阵中 大部分数值过小(<0.3),则认为大部分变量呈 弱相关,不适合做 因子分析
若 某变量 和 其他变量 相关性较弱,则在接下来分析中 可考虑 剔除该变量
1
2
3
d3.1 = read.xlsx("../Res/mvstats5.xlsx", 'd3.1', rowNames = T)

cor(d3.1)

KMO 效验

KMO效验:用于比较 变量间 简单相关系数 和 偏相关系数 的指标
KMO 取值 [0, 1]
KMO值 越接近 1,意味着变量间相关性越强,原有变量越适合做因子分析
KMO值 越接近 0,意味着变量间相关性越弱,原有变量不适合做因子分析
当所有变量间的 简单相关系数平方和 接近0时,KMO值接近0
1
msa.KMO(d3.1)
TODO: Bartlett's 球体效验
目的:检验相关矩阵 是否 是单位矩阵
显然单位矩阵 变量间 不相关
若是单位矩阵,则认为 因子模型 不合适 检验的虚无假设为 相关矩阵是单位阵
若不能拒绝该假设,则表明数据不适合因子分析 一般,显著水平值 越小(<0.05),表明 原始变量间 越可能存在有意义的关系
若显著性水平很大(>0.10),可能表明 数据不适合因子分析 该统计量服从 卡方分布
1
msa.bartlett(d3.1)

9.6.2 因子分析过程

2. 因子评价

未旋转 F0
1
2
F0 = msa.fa(d3.1, 3, rotation='none')  # 未旋转F0
F0
旋转后 Fr
1
2
Fr = msa.fa(d3.1, 3, rotation="varimax")  # 旋转 Fr
Fr
信息重叠图分析
1
biplot(Fr$scores[,1:2], Fr$loadings[,1:2])
1
biplot(Fr$scores[,c(1,3)], Fr$loadings[,c(1,3)])
1
biplot(Fr$scores[,2:3], Fr$loadings[,2:3])
从双重信息图 可知, 各个变量 在广东、上海、北京、天津 这些地区的反映强烈, 说明这些地区在各个指标消费都较高, 广东人在交通和通信上花的钱明显多于其他地区,而北京在居住上花的钱较多。 案例 上市公司经营业绩评价的因子分析
1
2
3
4
library(openxlsx)

Case9 = read.xlsx("../Res/mvcase5.xlsx", "Case9", rowNames=T)
head(Case9)
1
(FA0 = factanal(Case9, 4, rotation="none"))  # 因子不旋转
前4个因子的方差贡献率 已占到累积方差贡献率的 84% ,所以只需前4个因子即可
1
pairs(FA0$loadings)
1
(FA1 = factanal(Case9, 4, rotation="varimax"))  # varimax法旋转 (varimax,即正交旋转:旋转前后,互不相关)
旋转后的因子载荷矩阵:Loadings: 可知,因子 \(F_1\) 在 每股收益\(x_1\)、每股净资产\(x_2\)、净资产收益率\(x_3\)、扣除后每股收益\(x_4\) 上的载荷量较大, 反映 上市公司给与其股东的回报,在此因子上得分越高,公司能够给与股东的回报 也越高 因子 \(F_2\) 在存货周转率 \(x_5\) 、固定资产周转率 \(x_6\) 上有较大载荷量,所以是 反映公司资产管理能力的综合指标 因子 \(F_3\) 在总资产周转率 \(x_7\)、主营业务利润率 \(x_8\) 上载荷量较大,主要体现了公司的短期偿债能力,是 债权人非常关心的项目 ... 第四个因子 \(F_4\) 是反映公司盈利能力的公共因子 竖着看,一个公共因子一列的看,看哪些在此因子中占比大,这些大的用来判断分析 这是什么样的因子
1
pairs(FA1$loadings)
1
2
3
source("../Res/msaR.r")

FA2 = msa.fa(Case9, 4);FA2
Q: Factor 列起着什么作用?为什么说 从因子排名表可看到,在 偿债能力方面,片仔癀 一枝独秀?看到排名1了,但并没有说明 偿债能力啊 A: TODO: Factor 列起着什么作用?为什么说 从因子排名表可看到,在 偿债能力方面,片仔癀 一枝独秀?
1
pairs(FA2$scores)
1
biplot(FA2$scores, FA2$loadings)  # 前2个因子信息重叠图
Q&A 补充 参考 感谢帮助! 《多元统计分析与R语言建模》王斌会