(Factor Analysis, FA)
水泥行业上市公司 经营业绩因子模型 实证分析
在评价指标时,观测数据很多,指标间 不可避免地存在
多重共线性
,因此先计算相关系数矩阵
library(openxlsx)
d9.1 = read.xlsx('../Res/mvstats5.xlsx', 'd9.1', rowNames=T)
cor(d9.1)
factanal()
基于极大似然法
的因子分析# factanal() 基于极大似然法的因子分析
# 该函数对数据分布要求极高,通常需假定数据来自多元正态分布
Fa1 = factanal(d9.1, 3, rotation = "none")
Fa1$loadings # 因子载荷矩阵
主成分估计
的因子分析函数 msa.fa()
# 自编因子分析函数 msa.fa()
source("../Res/msaR.R")
msa.fa(d9.1, m=6, rotation="none")$loadings
Fp1 = msa.fa(d9.1, m=3, rotation = "none")
Fp1$loadings
Fa1 # 极大似然法方差贡献
Fp1$vars # 主因子法方差贡献
由主因子法结果,可看出,前三个因子的方差为 2.570, 1.713, 1.249,前3个因子所解释的方差占整个方差的 92.19%,基本能全面反映6项财务指标的信息,所以我们提取前3因子作为公因子
Fa1$uniquenesses # 极大似然法 共同度
Fp1$common # 主因子法 共同度
从上面结果,可看出,主因子法 计算共同度 比 极大似然法 好些
因子旋转方法: - 正交旋转(Orthogonal Rotation) - 斜交旋转(Oblique Rotation)
正交旋转法(varimax rotation)也称方差最大旋转法(spss中的varimax)。是使每个因子上具有最高载荷变量数最小,可简化对因子解释的旋转法。 在主成分分析中,用到正交旋转法,假设各因素相关。 假设提取出来的公共因素各不相关,是因素分析的最基本方法,与斜交旋转法相对应。
TODO: 这一段在百度百科上的解释 与 书上解释有冲突,书上解释 看起来就像是 说 正交旋转法有很多种,而 方差最大旋转 只是其中一种。
在因子旋转过程中,若因子对应轴 相互正交,则称为 正交旋转
最常用的正交旋转方法 是 最大方差正交旋转法(Varimax)
若因子对应轴 相互间 不是正交的,则称为斜交旋转。 常用的斜交旋转方法有 Promax 法等
Fa1 = factanal(d9.1, 3, rotation='none')
Fa1$loadings # 旋转前
Fa1$loadings[1:6,] # 旋转前
Fa2 = factanal(d9.1, 3, rotation = 'varimax')
Fa2$loadings # 旋转后
Fa2$loadings[1:6,] # 旋转后
Fp1 = msa.fa(d9.1, 3, rotation = 'none')
Fp1$vars # 旋转前
Fp1$loadings # 旋转前
Fp2 = msa.fa(d9.1, 3, rotation='varimax')
Fp2$vars # 旋转后
Fp2$loadings # 旋转后
在了解了 各个 综合因子 具体含义后,可采用
回归法、Bartlett
法等估计方法计算样本的因子得分 下面是 采用主因子法
使用回归估计法
计算的因子得分
Fp1$scores # 旋转前因子得分
Fp2$scores # 旋转后因子得分
便于绘图,取 前两个因子,x轴为 Factor1, y轴为 Factor2
plot(Fp2$scores, asp=1);abline(h=0, v=0, lty=3)
text(Fp2$scores, labels=rownames(d9.1))
biplot(Fp2$scores, Fp2$loadings) # 因子得分信息重叠图
abline(h=0, v = 0, lty = 3)
Fp1$ranks
Fp2$ranks
可看出,两种方法结果有出入,这与采用的算法有关。 因为做 因子分析 通常需要做 因子旋转 以获得较好的 因子解释,所以 我们 认为 旋转后 结果做综合评价 要好些。
计算 简单 相关系数矩阵,若矩阵中 大部分数值过小(<0.3),则认为大部分变量呈 弱相关,不适合做 因子分析 若 某变量 和 其他变量 相关性较弱,则在接下来分析中 可考虑 剔除该变量
d3.1 = read.xlsx("../Res/mvstats5.xlsx", 'd3.1', rowNames = T)
cor(d3.1)
KMO效验:用于比较 变量间 简单相关系数 和 偏相关系数 的指标 KMO 取值 [0, 1] KMO值 越接近 1,意味着变量间相关性越强,原有变量越适合做因子分析 KMO值 越接近 0,意味着变量间相关性越弱,原有变量不适合做因子分析 当所有变量间的 简单相关系数平方和 接近0时,KMO值接近0
msa.KMO(d3.1)
TODO:
Bartlett's 球体效验 目的:检验相关矩阵 是否 是单位矩阵 显然单位矩阵 变量间 不相关 若是单位矩阵,则认为 因子模型 不合适
检验的虚无假设为 相关矩阵是单位阵 若不能拒绝该假设,则表明数据不适合因子分析
一般,显著水平值 越小(<0.05),表明 原始变量间 越可能存在有意义的关系 若显著性水平很大(>0.10),可能表明 数据不适合因子分析
该统计量服从 卡方分布
msa.bartlett(d3.1)
F0 = msa.fa(d3.1, 3, rotation='none') # 未旋转F0
F0
Fr = msa.fa(d3.1, 3, rotation="varimax") # 旋转 Fr
Fr
biplot(Fr$scores[,1:2], Fr$loadings[,1:2])
biplot(Fr$scores[,c(1,3)], Fr$loadings[,c(1,3)])
biplot(Fr$scores[,2:3], Fr$loadings[,2:3])
从双重信息图 可知, 各个变量 在广东、上海、北京、天津 这些地区的反映强烈, 说明这些地区在各个指标消费都较高, 广东人在交通和通信上花的钱明显多于其他地区,而北京在居住上花的钱较多。
上市公司经营业绩评价的因子分析
library(openxlsx)
Case9 = read.xlsx("../Res/mvcase5.xlsx", "Case9", rowNames=T)
head(Case9)
(FA0 = factanal(Case9, 4, rotation="none")) # 因子不旋转
前4个因子的方差贡献率 已占到累积方差贡献率的 84% ,所以只需前4个因子即可
pairs(FA0$loadings)
(FA1 = factanal(Case9, 4, rotation="varimax")) # varimax法旋转 (varimax,即正交旋转:旋转前后,互不相关)
旋转后的因子载荷矩阵:Loadings: 可知,因子
在 每股收益
、每股净资产
、净资产收益率
、扣除后每股收益
上的载荷量较大,
反映 上市公司给与其股东的回报
,在此因子上得分越高,公司能够给与股东的回报
也越高
因子
在存货周转率
、固定资产周转率
上有较大载荷量,所以是 反映公司资产管理能力的综合指标 因子
在总资产周转率
、主营业务利润率
上载荷量较大,主要体现了公司的短期偿债能力,是 债权人非常关心的项目 ... 第四个因子
是反映公司盈利能力的公共因子
竖着看,一个公共因子一列的看,看哪些在此因子中占比大,这些大的用来判断分析 这是什么样的因子
pairs(FA1$loadings)
source("../Res/msaR.r")
FA2 = msa.fa(Case9, 4);FA2
Q: Factor 列起着什么作用?为什么说 从因子排名表可看到,在
偿债能力方面
,片仔癀 一枝独秀?看到排名1了,但并没有说明 偿债能力啊 A: TODO: Factor 列起着什么作用?为什么说 从因子排名表可看到,在偿债能力方面
,片仔癀 一枝独秀?
pairs(FA2$scores)
biplot(FA2$scores, FA2$loadings) # 前2个因子信息重叠图
感谢帮助!