前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >多元统计分析:因子分析

多元统计分析:因子分析

作者头像
yiyun
发布2022-04-01 13:55:43
2K0
发布2022-04-01 13:55:43
举报
文章被收录于专栏:yiyun 的专栏

简介

(Factor Analysis, FA)

例 9.1

水泥行业上市公司 经营业绩因子模型 实证分析

相关分析

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

代码语言:javascript
复制
library(openxlsx)

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

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

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

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

代码语言:javascript
复制
# 自编因子分析函数 msa.fa()
source("../Res/msaR.R")

msa.fa(d9.1, m=6, rotation="none")$loadings
代码语言:javascript
复制
Fp1 = msa.fa(d9.1, m=3, rotation = "none")
Fp1$loadings
代码语言:javascript
复制
Fa1 # 极大似然法方差贡献
代码语言:javascript
复制
Fp1$vars  # 主因子法方差贡献

由主因子法结果,可看出,前三个因子的方差为 2.570, 1.713, 1.249,前3个因子所解释的方差占整个方差的 92.19%,基本能全面反映6项财务指标的信息,所以我们提取前3因子作为公因子

代码语言:javascript
复制
Fa1$uniquenesses  # 极大似然法 共同度
代码语言:javascript
复制
Fp1$common  # 主因子法 共同度

从上面结果,可看出,主因子法 计算共同度 比 极大似然法 好些

因子旋转

因子旋转方法: - 正交旋转(Orthogonal Rotation) - 斜交旋转(Oblique Rotation)

正交旋转法(varimax rotation)也称方差最大旋转法(spss中的varimax)。是使每个因子上具有最高载荷变量数最小,可简化对因子解释的旋转法。 在主成分分析中,用到正交旋转法,假设各因素相关。 假设提取出来的公共因素各不相关,是因素分析的最基本方法,与斜交旋转法相对应。

TODO: 这一段在百度百科上的解释 与 书上解释有冲突,书上解释 看起来就像是 说 正交旋转法有很多种,而 方差最大旋转 只是其中一种。

在因子旋转过程中,若因子对应轴 相互正交,则称为 正交旋转

最常用的正交旋转方法 是 最大方差正交旋转法(Varimax)

若因子对应轴 相互间 不是正交的,则称为斜交旋转。 常用的斜交旋转方法有 Promax 法等

极大似然法

代码语言:javascript
复制
Fa1 = factanal(d9.1, 3, rotation='none')
Fa1$loadings # 旋转前
代码语言:javascript
复制
Fa1$loadings[1:6,]  # 旋转前
代码语言:javascript
复制
Fa2 = factanal(d9.1, 3, rotation = 'varimax')
Fa2$loadings  # 旋转后
代码语言:javascript
复制
Fa2$loadings[1:6,]  # 旋转后

主因子法

代码语言:javascript
复制
Fp1 = msa.fa(d9.1, 3, rotation = 'none')
Fp1$vars  # 旋转前
代码语言:javascript
复制
Fp1$loadings # 旋转前
代码语言:javascript
复制
Fp2 = msa.fa(d9.1, 3, rotation='varimax')
Fp2$vars  # 旋转后
代码语言:javascript
复制
Fp2$loadings  # 旋转后

因子得分

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

代码语言:javascript
复制
Fp1$scores # 旋转前因子得分
代码语言:javascript
复制
Fp2$scores  # 旋转后因子得分

因子得分信息图

便于绘图,取 前两个因子,x轴为 Factor1, y轴为 Factor2

代码语言:javascript
复制
plot(Fp2$scores, asp=1);abline(h=0, v=0, lty=3)
text(Fp2$scores, labels=rownames(d9.1))
代码语言:javascript
复制
biplot(Fp2$scores, Fp2$loadings)  # 因子得分信息重叠图
abline(h=0, v = 0, lty = 3)

9.5.3 综合得分及排名

代码语言:javascript
复制
Fp1$ranks
代码语言:javascript
复制
Fp2$ranks

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

9.6 因子分析的步骤

9.6.1 因子分析 基本步骤

计算 简单 相关系数矩阵,若矩阵中 大部分数值过小(<0.3),则认为大部分变量呈 弱相关,不适合做 因子分析 若 某变量 和 其他变量 相关性较弱,则在接下来分析中 可考虑 剔除该变量

代码语言:javascript
复制
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

代码语言:javascript
复制
msa.KMO(d3.1)

TODO:

Bartlett's 球体效验 目的:检验相关矩阵 是否 是单位矩阵 显然单位矩阵 变量间 不相关 若是单位矩阵,则认为 因子模型 不合适

检验的虚无假设为 相关矩阵是单位阵 若不能拒绝该假设,则表明数据不适合因子分析

一般,显著水平值 越小(<0.05),表明 原始变量间 越可能存在有意义的关系 若显著性水平很大(>0.10),可能表明 数据不适合因子分析

该统计量服从 卡方分布

代码语言:javascript
复制
msa.bartlett(d3.1)

9.6.2 因子分析过程

2. 因子评价
未旋转 F0
代码语言:javascript
复制
F0 = msa.fa(d3.1, 3, rotation='none')  # 未旋转F0
F0
旋转后 Fr
代码语言:javascript
复制
Fr = msa.fa(d3.1, 3, rotation="varimax")  # 旋转 Fr
Fr
信息重叠图分析
代码语言:javascript
复制
biplot(Fr$scores[,1:2], Fr$loadings[,1:2])
代码语言:javascript
复制
biplot(Fr$scores[,c(1,3)], Fr$loadings[,c(1,3)])
代码语言:javascript
复制
biplot(Fr$scores[,2:3], Fr$loadings[,2:3])

从双重信息图 可知, 各个变量 在广东、上海、北京、天津 这些地区的反映强烈, 说明这些地区在各个指标消费都较高, 广东人在交通和通信上花的钱明显多于其他地区,而北京在居住上花的钱较多。

案例

上市公司经营业绩评价的因子分析

代码语言:javascript
复制
library(openxlsx)

Case9 = read.xlsx("../Res/mvcase5.xlsx", "Case9", rowNames=T)
head(Case9)
代码语言:javascript
复制
(FA0 = factanal(Case9, 4, rotation="none"))  # 因子不旋转

前4个因子的方差贡献率 已占到累积方差贡献率的 84% ,所以只需前4个因子即可

代码语言:javascript
复制
pairs(FA0$loadings)
代码语言:javascript
复制
(FA1 = factanal(Case9, 4, rotation="varimax"))  # varimax法旋转 (varimax,即正交旋转:旋转前后,互不相关)

旋转后的因子载荷矩阵:Loadings: 可知,因子

F1

每股收益

x1

每股净资产

x2

净资产收益率

x3

扣除后每股收益

x4

上的载荷量较大, 反映 上市公司给与其股东的回报,在此因子上得分越高,公司能够给与股东的回报 也越高 因子

F2

在存货周转率

x5

、固定资产周转率

x6

上有较大载荷量,所以是 反映公司资产管理能力的综合指标 因子

F3

在总资产周转率

x7

、主营业务利润率

x8

上载荷量较大,主要体现了公司的短期偿债能力,是 债权人非常关心的项目 ... 第四个因子

F4

是反映公司盈利能力的公共因子

竖着看,一个公共因子一列的看,看哪些在此因子中占比大,这些大的用来判断分析 这是什么样的因子

代码语言:javascript
复制
pairs(FA1$loadings)
代码语言:javascript
复制
source("../Res/msaR.r")

FA2 = msa.fa(Case9, 4);FA2

Q: Factor 列起着什么作用?为什么说 从因子排名表可看到,在 偿债能力方面,片仔癀 一枝独秀?看到排名1了,但并没有说明 偿债能力啊 A: TODO: Factor 列起着什么作用?为什么说 从因子排名表可看到,在 偿债能力方面,片仔癀 一枝独秀?

代码语言:javascript
复制
pairs(FA2$scores)
代码语言:javascript
复制
biplot(FA2$scores, FA2$loadings)  # 前2个因子信息重叠图

Q&A

补充

参考

感谢帮助!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 例 9.1
    • 相关分析
      • 利用 factanal() 基于极大似然法的因子分析
        • 基于 主成分估计 的因子分析函数 msa.fa()
          • 因子旋转
            • 极大似然法
            • 主因子法
          • 因子得分
            • 因子得分信息图
            • 9.5.3 综合得分及排名
        • 9.6 因子分析的步骤
          • 9.6.1 因子分析 基本步骤
            • KMO 效验
              • 9.6.2 因子分析过程
          • 案例
          • Q&A
          • 补充
          • 参考
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档