首页 > 其他分享 >【视频讲解】PCA主成分分析原理及R语言2实例合集|附代码数据

【视频讲解】PCA主成分分析原理及R语言2实例合集|附代码数据

时间:2024-07-19 23:32:24浏览次数:19  
标签:1.5 特征值 得分 合集 因子 实例 PCA 数据

原文链接:https://tecdat.cn/?p=37034

原文出处:拓端数据部落公众号 

分析师:Ruoyi Xu

在数据分析的浩瀚宇宙中,我们时常面对多变量的数据海洋。这些变量虽然信息丰富,却也给处理带来了巨大挑战:工作量激增,而关键信息却可能淹没在繁杂的数据之中。为了有效减少指标数量同时尽可能保留原有信息,我们引入了相关性这一强大工具,通过它,我们得以重构数据世界,从而诞生了主成分分析法(PCA)——一种广泛应用的数据降维利器。

【视频讲解】PCA主成分分析原理及R语言经济研究可视化2实例合集

PCA:概念解析

主成分分析法(PCA)是一种精妙的数据处理技术,旨在从原始的高维特征空间中提取出少数几个相互正交的主成分,这些主成分不仅保留了数据的主要变异信息,还极大地简化了后续分析过程。简单来说,PCA就像是在一个由多个坐标轴构成的复杂空间中寻找一组新的、相互垂直的坐标轴,这些新坐标轴能够最佳地代表原始数据的分布情况。

PCA的实施步骤

1. 数据预处理
  • 标准化:将不同尺度的数据转化为具有相同尺度的数据,常用的标准化方法包括均值标准化和均方差标准化。这是为了确保数据的准确性和一致性。

  • 去*均值:对每一位特征减去各自的*均值,即中心化数据。

2. 计算协方差矩阵
  • 协方差矩阵描述了数据之间的相关性,是后续特征值分解的基础。

3. 特征值分解
  • 对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。特征值表示了数据中的方差,而特征向量表示了数据的主要方向。

4. 特征值排序
  • 根据特征值的大小,对特征值进行排序。特征值越大,表示该特征所包含的信息越多,对数据的解释能力越强。

5. 特征选择(特征转化)
  • 选择主成分:根据特征值的排序结果,选择前k个最大的特征值对应的特征向量作为新的特征空间。选择的依据可以是特征值的大小、累计贡献率等。累计贡献率是指前k个特征值的和占总特征值和的比例,通常选择累计贡献率超过一定阈值(如80%)的特征值。

  • 数据转换:将原始数据投影到这k个特征向量构建的新空间中,得到降维后的数据。这个过程实际上是数据的特征转化,从原始的高维空间转换到了低维的主成分空间。

6. 解释主成分
  • 解释主成分是分析PCA结果的一种方法,可以帮助我们理解主成分的含义和作用。每个主成分都是原始变量的线性组合,具有解释原始变量方差的能力。

PCA的魔力所在

  • 信息保留:尽管PCA通过减少变量数量简化了数据,但它却能够最大限度地保留原始数据中的主要变异信息,使得降维后的数据依然具有高度的代表性。

  • 去相关性:通过主成分分析,原始变量间的相关性被消除,新生成的主成分之间彼此独立,这大大简化了后续的数据分析和模型构建过程。

  • 可视化:对于高维数据,直接可视化几乎是不可能的。而PCA能够将数据降至二维或三维空间,使我们能够直观地观察数据的分布情况和内在结构。

R语言主成分分析(PCA)葡萄酒可视化:主成分得分散点图和载荷图

我们将使用葡萄酒数据集进行主成分分析。

数据

数据包含177个样本和13个变量的数据框;vintages包含类标签。这些数据是对生长在意大利同一地区但来自三个不同栽培品种的葡萄酒进行化学分析的结果:内比奥罗、巴贝拉和格里格诺葡萄。来自内比奥罗葡萄的葡萄酒被称为巴罗洛。

这些数据包含在三种类型的葡萄酒中各自发现的几种成分的数量。

 
  1.   # 看一下数据
  2.   head(no)
 

输出

转换和标准化数据

对数转换和标准化,将所有变量设置在同一尺度上。

 
  1.   # 对数转换
  2.   no_log <- log(no)
  3.    
  4.   # 标准化
  5.   log_scale <- scale(no_log)
  6.   head(log_scale)
 

主成分分析(PCA)

使用奇异值分解算法进行主成分分析

 
  1.   prcomp(log_scale, center=FALSE)
  2.   summary(PCA)
 

基本图形(默认设置)

带有基础图形的主成分得分和载荷图

 
  1.    
  2.   plot(scores[,1:2], # x和y数据
  3.   pch=21, # 点形状
  4.   cex=1.5, # 点的大小
  5.    
  6.   legend("topright", # legend的位置
  7.   legend=levels(vint), # 图例显示
  8.    
  9.   plot(loadings[,1:2], # x和y数据
  10.   pch=21, # 点的形状
  11.    
  12.   text(loadings[,1:2], # 设置标签的位置
 

此外,我们还可以在分数图中的组别上添加95%的置信度椭圆。

置信度椭圆图函数

 
  1.   ## 椭圆曲线图
  2.   elev=0.95, # 椭圆概率水*
  3.   pcol=NULL, # 手工添加颜色,必须满足长度的因素
  4.   cexsize=1, # 点大小
  5.   ppch=21, # 点类型,必须满足因素的长度
  6.   legcexsize=2, # 图例字体大小
  7.   legptsize=2, # 图例点尺寸
  8.    
  9.   ## 设定因子水*
  10.   if(is.factor(factr) {
  11.   f <- factr
  12.   } else {
  13.   f <- factor(factr, levels=unique(as.character(factr)))
  14.   }
  15.   intfactr <- as.integer(f) # 设置与因子水*相匹配的整数向量
  16.    
  17.   ## 获取椭圆的数据
  18.   edf <- data.frame(LV1 = x, LV2=y, factr = f) # 用数据和因子创建数据框
  19.   ellipses <- dlply(edf, .(factr), function(x) {
  20.    
  21.   Ellipse(LV1, LV2, levels=elev, robust=TRUE, draw=FALSE) #从dataEllipse()函数中按因子水*获取置信度椭圆点
  22.   })
  23.   ## 获取X和Y数据的范围
  24.   xrange <- plotat(range(c(as.vector(sapply(ellipses, function(x) x[,1])), min(x), max(x))))
  25.   ## 为图块设置颜色
  26.   if(is.null(pcol) != TRUE) { # 如果颜色是由用户提供的
  27.   pgcol <- paste(pcol, "7e", sep="") # 增加不透明度
  28.    
  29.   # 绘图图形
  30.   plot(x,y, type="n", xlab="", ylab="", main=""
  31.   abline(h=0, v=0, col="gray", lty=2) #在0添加线条
  32.   legpch <- c() # 收集图例数据的矢量
  33.   legcol <- c() # 收集图例col数据的向量
  34.   ## 添加点、椭圆,并确定图例的颜色
  35.   ## 图例
  36.   legend(x=legpos, legend=levels(f), pch=legpch,
  37.   ## 使用prcomp()函数的PCA输出的轴图示
  38.   pcavar <- round((sdev^2)/sum((sdev^2))
 

基础图形

绘制主成分得分图,使用基本默认值绘制载荷图

 
  1.   plot(scores[,1], # X轴的数据
  2.   scores[,2], # Y轴的数据
  3.   vint, # 有类的因素
  4.   pcol=c(), # 用于绘图的颜色(必须与因素的数量相匹配)
  5.   pbgcol=FALSE, #点的边框是黑色的?
  6.   cexsize=1.5, # 点的大小
  7.   ppch=c(21:23), # 点的形状(必须与因子的数量相匹配)
  8.   legpos="bottom right", # 图例的位置
  9.   legcexsize=1.5, # 图例文字大小
  10.   legptsize=1.5, # 图例点的大小
  11.   axissize=1.5, # 设置轴的文字大小
  12.   linewidth=1.5 # 设置轴线尺寸
  13.   )
  14.   title(xlab=explain[["PC1"]], # PC1上解释的方差百分比
  15.   ylab=explain[["PC2"]], # PC2解释的方差百分比
  16.   main="Scores", # 标题
  17.   cex.lab=1.5, # 标签文字的大小
  18.   cex.main=1.5 # 标题文字的大小
  19.    
  20.   plot(loadings[,1:2], # x和y数据
  21.   pch=21, # 点的形状
  22.   cex=1.5, # 点的大小
  23.   # type="n", # 不绘制点数
  24.   axes=FALSE, # 不打印坐标轴
  25.   xlab="", # 删除x标签
  26.   ylab="" # 删除y标签
  27.   )
  28.   pointLabel(loadings[,1:2], #设置标签的位置
  29.   labels=rownames(PCAloadings), # 输出标签
  30.   cex=1.5 # 设置标签的大小
  31.   ) # pointLabel将尝试将文本放在点的周围
  32.   axis(1, # 显示x轴
  33.   cex.axis=1.5, # 设置文本的大小
  34.   lwd=1.5 # 设置轴线的大小
  35.   )
  36.   axis(2, # 显示y轴
  37.   las=2, # 参数设置文本的方向,2是垂直的
  38.   cex.axis=1.5, # 设置文本的大小
  39.   lwd=1.5 # 设置轴线的大小
  40.   )
  41.   title(xlab=explain[["PC1"]], # PC1所解释的方差百分比
  42.   ylab=explain[["PC2"]], # PC2解释的方差百分比
  43.    
  44.   cex.lab=1.5, # 标签文字的大小
  45.   cex.main=1.5 # 标题文字的大小
  46.   )
 

R语言主成分pca、因子分析、聚类对地区经济研究分析重庆市经济指标

最*我们被客户要求撰写关于重庆市经济指标的研究报告,包括一些图形和统计输出。

建立重庆市经济指标发展体系,以重庆市一小时经济圈作为样本,运用因子分析方法进行实证分析,在借鉴了相关评价理论和评价方法的基础上,本文提取出经济规模、人均发展水*、经济发展潜力、3个主因子,从重庆市统计年鉴选取8个指标构成的指标体系数据对重庆市38个区县经济发展基本情况的八项指标进行分析,并基于主因子得分矩阵对重庆市38个区县进行聚类分析

结果表明:根据综合得分,可以看出各区县社会经济发展水*排前三的是渝中区、渝北区、九龙坡区,得分最低的三个是巫山县、巫溪县、城口县,结合总体的分析可以看出渝中区、九龙坡区在经济总体规模和建筑业方面较好,而重庆周边的地区经济实力较差,投资环境不好,特别是在建筑方面的缺乏,以至于经济发展相对而言薄弱的地区,不论从哪方面来说重庆各区县中渝中区的经济实力是最好的。

评价指标的建立

评价地区的之间的经济发展水*,必须建立适当的指标体系。考虑到地区经济指标的复杂性、多样性和可操作性,本文在此基础上建立了一套较为完整的易于定量分析的地区经济评价指标体系,分别从不同的角度反映地区经济发展特征。

本文所建立的指标体系共包括8个指标,分别从经济规模、人均发展水*、经济发展潜力等方面来反映地区经济发展特征。具体指标如下:

地区生产总值(万元)(X1)              

社会消费品零售总额(万元)(X2)

工业总产值(万元)(X3)

建筑业总产值(万元)(X4)

高技术生产总值(万元)(X5)

全社会固定资产投资(万元)(X6)

人均可支配收入(元)(X7)

人均地区生产总值(元)(X8)

因子分析在地区经济研究中的应用

因子分析模型及其步骤

因子分析是一种数据简化的技术。它通过研究众多变量之间的内部依赖关系,探求观测数据中的基本结构,并用少数几个假想变量来表示其基本的数据结构。这几个假想变量能够反映原来众多变量的主要信息。原始的变量是可观测的显在变量,而假想变量是不可观测的潜在变量,称为因子。设p个变量,则因子分析的数学模型可表示为:

图片

图片

为公共因子,是不可观测的变量,他们的系数称为因子载荷。是特殊因子,是不能被前m个公共因子包含的部分。因子分析步骤如下:

(1)将原始数据标准化,仍记为X;(2)建立相关系数矩阵R;(3)解特征方程,计算特征值和特征向量,当累计贡献率不低于85%时,提取k个主成分代替原来的m个指标,计算因子载荷矩阵A;(4)对A进行最大正交旋转交换;(5)对主因子进行命名和解释。如需进行排序,则计算各个主因子的得分,以贡献率为权重,对加权计算综合因子得分。

样本选取及数据来源

本文选取了重庆市38个区县作为样本进行分析,目的在于探索如何基于R统计软件的因子分析和聚类分析方法研究地区经济发展。具体数据如下:

数据分析过程

将原始数据录入R软件中,选取地区生产总值(万元)(X1)、社会消费品零售总额(万元)(X2)、工业总产值(万元)(X3)、建筑业总产值(万元)(X4)、高技术生产总值(万元)(X5)、全社会固定资产投资(万元)(X6)、人均可支配收入(元)(X7)、人均地区生产总值(元)(X8)。

在进行因子分析之前,我们通过观察相关系数矩阵,并用KMO and Bartlett’s Test检验一下数据是否适合作因子分析。再做描述性分析Analysis-factor-description得到初始公因子方差、因子、特征值以及由每个因子解释的百分比和累计百分比。分析结果如下:

coebaltt(COR,)#Bartlett球形检

图片

Bartlett 的球形度检验的p值(显著性概率值sig)<0.05,表明通过检验,分布可以*似为正态分布,由此则可以进行因子分析。

sreeot(PCA,type="lines")

图片

图片

从表可以得出,提取3个因子的累计方差贡献率已经达到89.854%>86%,信息损失仅为10.146%,从第4个因子开始方差贡献率都低于5%,因此选取3个公因子进行因子分析效果较为理想;从图的碎石图可以看出从第4个因子开始,特征值差异变化很小,综上所述:在特征值大于0.5的条件下,所提取的三个因子能通过检验并能很好的描述8个指标,所以提取前3个特征值建立因子载荷矩阵。 

图片

表中为初始因子载荷矩阵表, F1、F2、F3分别作为第一、第二、第三公共因子。建立了因子分析数学目的不仅仅要找出公共因子以及对变量进行分组,更重要的要知道每个公共因子的意义,以便进行进一步的分析,如果每个公共因子的含义不清,则不便于进行实际背景的解释。由于因子载荷阵是不唯一的,所以应该对因子载荷阵进行旋转。目的是使因子载荷阵的结构简化,使载荷矩阵每列或行的元素*方值向0和1两极分化。有三种主要的正交旋转法。四次方最大法、方差最大法和等量最大法。

因此需求进行因子旋转,使得因子对变量的贡献达到极化的效果。为此采用方差最大化的正交旋转方式,使各变量在某个因子上产生较高载荷,而其余因子上载荷较小,从而得到旋转后的因子载荷矩阵,如下表所示:

图片

由表和旋转后的因子图可以看出,通过旋转后的公共因子的解释原始数据的能力提高了,表现为公共因子F1在X1(地区生产总值),X6(全社会固定资产投资)和X8(人均地区生产总值)上的载荷值都很大。因此我们可以把第一公共因子确立为综合经济实力因子,宏观上反映了地区经济发展规模的总体情况,在这个因子上的得分越高,说明城市经济发展的总体情况越好。

利用各公共因子方差贡献率计算综合得分,并计算综合得分=因子1的方差贡献率因子1的得分+因子2的方差贡献率因子2的得分+因子3的方差贡献率*因子3的得分。将数据按综合得分降序排列,得到部分因子得分和综合得分情况如下图所示:

图片

图片

图片

结果讨论

基于上述因子得分,可以得出2012年重庆38个区县的经济发展状况如下:

1、根据经济实力因子F1得分大于1的依次有渝中区、渝北区、九龙坡区、江北区和万州区,分数分别为4.4211、1.8967、1.7808、1.201、1.2804。说明在经济总体规模和建筑业方面,渝中区、渝北区、九龙坡、江北区和万州区在重庆市的38个区县中是最好的,规模较大,经济实力最强,发展前景很好,经济发展实力雄厚的地区。

2、根据经济发展潜力因子F2得分大于1的有沙坪坝区和渝北区,分数分别为3.7052、3.4396。说明在高技术科技和工业方面比较发达,固定资产投资最大,这两个地区都在主城,对外开放程度高,科技创新方面比较好,有自己的工业发展,已基本形成了自己的产业结构,充分发挥了自己的地理优势和资源环境优势,发展潜力较大。

基于主因子得分的聚类分析

系统聚类分析

聚类分析又称群分析,就是将数据分组成为多个类。在同一个类内对象之间具有较高的相似度,不同类之间的对象差别较大。在社会经济领域中存在着大量分类问题,比如若对某些大城市的物价指数进行考察,而物价指数很多,有农用生产物价指数、服务项目价指数、食品消费物价指数、建材零售价格指数等等。由于要考察的物价指数很多,通常先对这些物价指数进行分类。总之,需要分类的问题很多,因此聚类分析这个有用的工具越来越受到人们的重视,它在许多领域中都得到了广泛的应用。 
聚类分析内容非常丰富,有系统聚类法、有序样品聚类法、动态聚类法、模糊聚类法、图论聚类法、聚类预报法等;最常用最成功的聚类分析为系统聚类法,系统聚类法的基本思想为先将n个样品各自看成一类,然后规定样品之间的“距离”和类与类之间的距离。选择距离最*的两类合并成一个新类,计算新类和其他类(各当前类)的距离,再将距离最*的两类合并。这样,每次合并减少一类,直至所有的样品都归成一类为止。 
系统聚类法的基本步骤: 
1、计算n个样品两两间的距离。 
2、构造n个类,每个类只包含一个样品。 
3、合并距离最*的两类为一新类。 
4、计算新类与各当前类的距离。 
5、重复步骤3、4,合并距离最*的两类为新类,直到所有的类并为一类为止。 
6、画聚类谱系图。 
7、决定类的个数和类。 
系统聚类方法:1、最短距离法;2、最长距离法;3、中间距离法;4、重心法;5、类*均法;6、离差*方和法(Ward法)。 

基于主因子得分对重庆市38个区县经济发展分析,采用聚类方法选择组间链接法,计算距离选择*方欧式距离,标准化数据才用标准正太数据化处理。得到如下结果:

rct.st(hc,k = 6, border = "red")

图片

由树状图可知,可以将重庆各区县按经济中和实力实际情况分为六类:

第一类只包括渝中区,渝中区是重庆市的中心城市,是重庆市的政治经济文化中心、基础教育高地、具有特殊的区位优势和突出的战略地位。产业结构的现状特征是第三产业占绝对优势,其中金融业、商贸业以及中介服务业为主导行业,属于经济发展实力雄厚的地区。

第二类只包括渝北区,渝北区先后启动了总体规划*65*方公里的重庆科技产业园、重庆现代农业园区、渝东开发区等项目,被市政府命名为"重庆农业科技园区",所以该地区在高技术生产总值贡献很大,而且投资环境优越,且大部分地区有个自己中心商业地带,对外开放程度高,区位优势很明显,产业结构合理,属于经济发展较强的地区。

关于分析师

在此对Ruoyi Xu对本文所作的贡献表示诚挚感谢,她在重庆大学完成了数据科学与大数据技术专业学位,专注深度学习、数据挖掘、数据分析领域。擅长Python 。

标签:1.5,特征值,得分,合集,因子,实例,PCA,数据
From: https://www.cnblogs.com/tecdat/p/18312535

相关文章

  • 郑州轻工业大学zzulioj1071~1090合集
    郑州轻工业大学zzulioj1071~1090合集本人小趴菜一颗,写博客是为了监督自己的学习以及分享学习资源给需要的人,欢迎大家评论区指出问题。同时由于本人比较懒,注释就不再写了,当然一些自己经常犯迷糊的地方还是会标注的,大家有什么问题也可以指出来,大家一起学习进步。郑州轻......
  • 【专题】2024年中国AIGC行业应用价值研究报告合集PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=36570原文出处:拓端数据部落公众号大模型的发展标志着AIGC时代的来临,没有大模型支撑的AI已成为旧时代产物,缺乏竞争力。技术的突破始终是AI发展的关键,而商业应用则是推动其迅速发展的加速器。AI的持久繁荣依赖于其商业化的成功。展望2024年,我们有......
  • 调试合集(内含VS快捷键)
    目录一、BUG二、调试什么是调试?调试过程调试工具和技术三、VS常用快捷键四、VS中的常用调试功能(附快捷键)监视窗口自动窗口和局部变量内存窗口调用堆栈五、Debug实例求n的阶乘之和一、BUG在当今互联网盛行的时代无论你是否从事IT相关的行业或者学习,都应该听说过bug......
  • 高内聚,低耦合的解释及实例【包学包会】
    高内聚(HighCohesion)定义:高内聚指的是模块内部各个部分之间的联系紧密,功能高度相关。一个高内聚的模块,其内部的各个功能都是围绕着一个单一的任务或目的来设计的。优点:易于理解和维护:由于模块内部功能相关,理解和修改这个模块的代码变得更加容易。增强代码复用性:模块的功......
  • HTML5+CSS3小实例:纯CSS实现奥运五环
    实例:纯CSS实现奥运五环技术栈:HTML+CSS效果:源码:【HTML】<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"&g......
  • 暑期成绩表合集
    暑假集训CSP提高模拟1#使用者总分#1Start#2mine#3小凯的疑惑#4春节十二响1wang54321345451001001002GGrun22020100100-3xrlong21010100100030x7f2101001001003Ishar-zdl210-10010100......
  • C 语言实例 - 数组拆分与合并
    将一个数组拆分为两个数组,一个为奇数数组,一个为偶数数组实例#include<stdio.h>intmain(){intarray[10]={0,1,2,3,4,5,6,7,8,9};inteven[10],odd[10];intloop,e,d;e=d=0;for(loop=0;loop<10;loop++){......
  • AI绘画Stable Diffusion常用插件合集
    StableDiffusion常用插件,我已经给大家整理好了,下方扫码自取就好。拥有这些SD常用插件,让您的图像生成和编辑过程更加强大、直观、多样化。以下插件集成了一系列增强功能,覆盖从自动补全提示词到高分辨率图像放大,从双语界面到无边图像浏览,为用户提供了无缝的StableDiffusi......
  • 吐血整理如何在Google Earth Engine上写循环 五个代码实例详细拆解
    在这里同步一篇本人的原创文章。原文发布于2023年发布在知乎专栏,转移过来时略有修改。全文共计3万余字,希望帮助到GEE小白快速进阶。引言这篇文章主要解答GEE中.map()和.iterate()函数的用法。首先解答一个疑问,为什么需要自己写循环?确实,GEE为各种数据类型提供了无数常用的内置......
  • 【专题】2023中国机器人产业分析报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=34144原文出处:拓端数据部落公众号仿生机器人作为一类结合了仿生学原理的机器人,具备自主决策和规划行动的能力,正逐渐进入大众视野。它们的核心技术要素包括感知与认知技术、运动与控制技术、人机交互技术和自主决策技术。阅读原文,获取专题报告合集......