多元统计分析:对应分析

2022-04-01 13:59:33 浏览数 (1)

简介

(Correspondence Analysis, CA)

三种关系:

  • Q型:样品 间
  • R型:变量 间
  • 对应型:样品 与 变量 间

Q:对应分析 比较 因子分析? A:因子分析中,可用较少公共因子 来提取 样本数据 绝大部分信息,以便通过较少因素而获得足够信息, 缺点:对于R型、Q型因子分析,即对 变量、样本 分别做因子分析,并没有考虑变量与样本间联系,损失了一部分信息。 而且,在实际问题中,样本数目远大于变量数目,在Q型因子分析时,计算量远大于R型因子分析。 对应分析就是 通过 数学变换,把 Q型 、R型 因子分析 结合起来

卡方效验

  • H_0: 相互独立
  • H_1: 相互影响(不独立)
代码语言:javascript复制
library(openxlsx)
d10.1 = read.xlsx('../Res/mvstats5.xlsx', 'd10.1', rowNames=T)

chisq.test(d10.1) # 卡方效验

# PS:chi 卡  s 方 q 查询

有结果可知:

由于 X-squared=118.1p-value<0.001,所以 拒绝原假设 H_0接受 H_1,认为因素A和因素B不独立

即收入与满意度 之间 有密切联系,可以进一步做对应分析。

注意:相关性 与 独立 不是一回事 相关性检验 仅表 线性相关,对于非线性无作用

对应分析

代码语言:javascript复制
library(ca)
cal = ca(d10.1)
summary(cal)

value 为特征值,cum% 为累积贡献率

代码语言:javascript复制
cal$rowcoord # 行坐标

Q型因分、因子载荷矩阵(loadings)

代码语言:javascript复制
cal$colcoord # 列坐标

R型因分

根据上述数据 作 对应分析图

代码语言:javascript复制
plot(cal)

见图,相似的类会聚在一起,

对应图分析

据上图 可 将 样本点、变量 分为 3组:

  1. 变量:< 1 万 样品:有些不满、很不满意
  2. 变量:1 万 - 3 万、 3 万 - 5万 样品:比较满意
  3. 变量:5 万 - 10万、>10万 样品:很满意

例 10.2

对应分析

代码语言:javascript复制
d10.2 = read.xlsx('../Res/mvstats5.xlsx', 'd10.2', rowNames=T)
ca2 = ca(d10.2);ca2

对应分析图

代码语言:javascript复制
plot(ca2)
代码语言:javascript复制
summary(ca2)

案例

对应分析在农民收入分析中的应用

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

Case10 = read.xlsx('../Res/mvcase5.xlsx', 'Case10', rowNames=T);Case10
代码语言:javascript复制
C10d.1 = Case10[1:6,] # 文化程度数据
chisq.test(C10d.1)
代码语言:javascript复制
C10d.2 = Case10[7:13,] # 总收入数据
chisq.test(C10d.2)
代码语言:javascript复制
library(ca)

Ca1 = ca(C10d.1);summary(Ca1)
代码语言:javascript复制
Ca1$rowcoord[,1:2]
Ca1$colcoord[,1:2]
代码语言:javascript复制
plot(Ca1)

图10-2

据图 可将 样品 与 变量 分为三类:

代码语言:javascript复制
Ca2 = ca(C10d.2);summary(Ca2)
代码语言:javascript复制
Ca2$rowcoord[,1:2]
Ca2$colcoord[,1:2]
代码语言:javascript复制
plot(Ca2)

据图 可将 广东省农民 的收入来源与收入水平 的 相关关系 分为三类

补充

R语言中 数据标准化 scale()

默认,scale() 对矩阵或数据框 的指定列 进行 均值为0、标准差为1 的标准化

代码语言:javascript复制
newdata <- scale(mydata)
  1. 对每一列 进行 任意均值和标准差 的标准化
代码语言:javascript复制
newdata <- scale(mydata)*SD   M

M: 想要的均值

SD: 想要的标准差

注意:在非数值型的列上使用scale() 将会报错

  1. 对指定列 而不是 整个矩阵 或 数据框 进行标准化,使用下方代码 此句 将变量 myvar 标准化为均值 50、标准差为 10 的变量
代码语言:javascript复制
newdata <- transform(mydata, myvar = scale(myvar)*10 50)

经数据标准化后(均值0,标准差1 -> 方差1),协方差矩阵 等同 相关系数矩阵 标准差 就是 方差开根号 理由如下:

毫无疑问,分母 也可理解为 X的标准差 × Y的标准差

而经数据标准化后,标准差为1,所以此时分母为1,相关系数=协方差

标准化: 消除 列间 量纲差异,无法消除(行间)样本间 量纲差异

独立性效验 仅 判 因素A和因素B是否 独立,若 A、B独立,则 无需 进行 对应分析 这里 因素A、因素B 是 二维列联表 后 因素, 因素A 即 行因素(样本),因素B 即 列因素(指标/特征)

相关性检验 仅是说 线性相关,不能判非线性。 相关与独立不是一回事

参考

感谢帮助!

  • 如何通俗易懂地解释「协方差」与「相关系数」的概念?
  • 《多元统计分析与R语言建模》王斌会
  • 《R语言实战》Robert I. Kabacoff
  • 本文作者: yiyun
  • 本文链接: https://moeci.com/posts/分类-数据分析/分类-杂记/correspondence-analysis/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

0 人点赞