多元统计分析:主成分分析

2022-04-01 13:54:32 浏览数 (1)

简介

(Principal Component Analysis, PCA)

n 行 = 样本数 p 列 = 指标数 = 变量数 = 特征数

PCA 目标: 用 一组较少的不相关变量 代替 大量原相关变量,同时尽可能 保留原变量的信息,这些推导所得的变量称为 主成分 由于主成分有多个,有p 列,就有p个主成分,此时就还未达到降维效果,所以需要选择其中的一些留下作为最后的主成分 毫无疑问,希望保留尽可能多原变量信息,而方差大就意味着信息量大, 所以,我们可以按主成分对应的方差贡献率对主成分进行排序,并算出累积方差贡献率, 一般,当k 处 累积方差贡献率>80时,我们就可以选择前 k 个主成分

主成分之间彼此不相关 -> 协方差cov = 0 (相关系数 cor=0)-> 两两 正交:正交:当 p = 2 即二维图时,表现为线线垂直

步骤

假设 n * p ,即 n 样本,p 特征 有 p 特征,就有 p 主成分,但最后并不选择这么多,而是 按 各个主成分 方差递减,包含的信息量递减,只选取前 k 个 按 方差贡献率(方差占比)(某个主成分的方差占全部方差的比重)大小 先 对主成分 排序 排序后,算 累积方差贡献率(Cumulative Proportion),前k个位置达到 >80%,就选取前k个作为最后的主成分,用于之后的主成分表达式

R语言内置函数中有 2种(princomp()prcomp)实现PCA,因为 PCA 的实现一般有 2 种, PCA 的实现:

  1. 特征值(correlation和covariance)分解
  2. 奇异值(svd)分解

princomp() : cor参数:决定是 通过 cor 还是 cov 来计算

  1. 原始数据标准化(均值0,方差1)

R语言中 scale()

  1. 计算 样本协方差矩阵(标准化后协方差等于相关系数,所以,此处等同相关系数矩阵)
  2. 计算 协方差矩阵 的 特征值 和 特征向量
  3. 按 特征值 从大到小 排序
  4. 保留 最大 k 个特征向量
  5. 写出 主成分表达式,将数据转换到 特征向量 构建的新空间中
  6. 计算 主成分得分
  7. 根据得分数据,进一步统计分析

案例

电信业发展的主成分分析

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

Case8 = read.xlsx("../Res/mvcase5.xlsx", "Case8", rowNames = T)
head(Case8)

image-20201212202559696

代码语言:javascript复制
plot(hclust(dist(scale(Case8)))) # 系统聚类图

image-20201212202838582

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

msa.pca(Case8, cor = T) # 主成分分析

image-20201212203006626

image-20201212203031083

image-20201212203049944

image-20201212203114987

运行后,发现可以提取两个主成分(Comp.1, Comp.2),这两个成分占全部的 96.14%,可以说是基本代表了全部指标的信息量

image-20201212204132221

第一个主成分(Comp.1) 主要由

x1

电信业务总量,

x4

国际互联网络用户,

x5

互联网用户使用时长,

x6

长途电话通话量,

x7

长途电话通话时长 决定, 这5个指标是总量指标,说明一个城市的电信业务规模和电信通信业务发展水平

image-20201212204313015

第二个主成分(Comp.2) 主要由

x2

每百人拥有固定电话数,

x3

每百人拥有移动电话数 决定, 这两个指标 是 平均量成分,反映了 电信行业中的电话人均普及情况

image-20201212204803598

降维:7个经济指标 用 2个综合指标 代替,而综合指标的信息没有损失多少 利用线性加权方法,以各主成分的贡献率为权数, 按公式 计算 各城市 电信业发展水平的 综合得分 并据此排名

score=0.738×PC1 0.223×PC20.738 0.223

举例:广州得分:

广州score广州=0.738×5.9068 0.223×−2.55970.738 0.223

由广州在PC1上得分,PC2上得分 根据公式得出综合得分 TODO: 综合得分应该是这么算的,计算了下,只有一点误差

image-20201212210334261

image-20201212205559351

Q&A

Q: 为什么要对数据做标准化(均值0,方差1)? A: 当不同特征量纲相差较大时,由于方差对于量纲,均值的敏感,将会导致量纲大的特征 对于 方差的影响很大,而我们认为这是不对的,不应当因为 公里数几千几万,相较于几元钱,而过分的影响最后方差 这也是相关系数的体现,相关性不应当受量纲影响

Q : 标准化后服从 正态分布(高斯分布)? A: 标准化(均值0,方差1) 后 服从标准正态分布(均值0,方差1)

Q: 标准化是不是有多种实现?看到一种:

均方根(x−xmean)/′均方根′

A : TODO: 标准化实现公式

Q: 标准化 和 归一化 异同? A: TODO: 标准化 和 归一化 异同?

Q: 如何对PCA结果主成分赋予新意义?即解释最后的主成分 A:根据PCA表达式的系数结合定性分析,主成分是原来变量的线性组合(原有变量 ---组合形成了--->最后的主成分) (PS:这点和因子分析正好相反,因子分析的 公共因子用于 解释/组合 原有变量)(数据背后隐藏的公共因子----形成解释了--->原有变量)

补充

standard deviation, $sdev:标准差 Proportion of Variance:方差的占比 Cumulative Proportion:累计贡献率

参考

感谢帮助!

  • 主成分分析(PCA)原理及R语言实现 | 降维dimension reduction | Principal component analysis
  • 《多元统计分析及R语言建模》(第五版)王斌会
  • 《R语言实战》[美]卡巴斯夫
  • 初识R语言——PCA的实现
  • 主成分分析(PCA)原理及R语言实现
  • R语言 PCA分析
  • R语言手动计算主成分分析(PCA)及其在R函数的实现
  • 本文作者: yiyun
  • 本文链接: https://moeci.com/posts/分类-数据分析/分类-杂记/principal-component-analysis/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

0 人点赞