[R语言] R语言PCA分析教程Principal Component Methods in R

文章推薦指數: 80 %
投票人數:10人

总的来说,主成分分析的主要目的是:. 识别数据集中的隐藏模式;; 通过消除数据中的噪声和冗余来降低数据的维度;; 识别相关变量。

[R语言]R语言PCA分析教程PrincipalComponentMethodsinR 落痕的寒假 2019-07-3119:20:46 29885 收藏 160 分类专栏: R语言 常用工具 数据分析与可视化 版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/LuohenYJ/article/details/97950522 版权 R语言 同时被3个专栏收录 17篇文章 6订阅 订阅专栏 常用工具 22篇文章 1订阅 订阅专栏 数据分析与可视化 51篇文章 4订阅 订阅专栏 R语言PCA分析教程PrincipalComponentMethodsinR(代码下载) 主成分分析PrincipalComponentMethods(PCA)允许我们总结和可视化包含由多个相互关联的定量变量描述的个体/观察的数据集中的信息。

每个变量都可以视为不同的维度。

如果数据集中包含3个以上的变量,那么可视化多维超空间可能非常困难。

主成分分析用于从多变量数据表中提取重要信息,并将此信息表示为一组称为主成分的新变量。

这些新变量对应于原件的线性组合。

主成分的数量小于或等于原始变量的数量。

PCA的目标是识别数据变化最大的方向(或主成分)。

换句话说,PCA将多变量数据的维度降低到两个或三个主要成分,这些成分可以图形化可视化,同时信息损失最小。

PCA属于机器学习降维方法质之一,但是仅仅对线性数据有用,非线性数据建议使用TSNE。

本文描述了PCA的基本概念,并演示了如何使用R软件计算和可视化PCA。

此外,我们将展示如何揭示解释数据集变化的最重要变量。

主要内容如下: 基础计算实例总结 1.基础 基础概念计算过程 1.1基础概念 了解PCA的细节需要线性代数的知识。

在这里,我们将仅通过简单的数据图形表示来解释基础知识。

在下图1A中,数据在XY坐标系中表示。

通过识别数据变化的主要方向(称为主成分)来实现降维。

PCA假设方差最大的方向是最“重要的”(即最主要的方向)。

在下图1A中,PC1轴是样本显示最大变化的第一个主方向。

PC2轴是第二个最重要的方向,它与PC1轴正交。

通过将每个样本投影到第一个主成分上,我们的二维数据的维数可以减少到一个维度(图1B)。

从技术上讲,每个主成分保留的方差量是通过所谓的特征值来测量的。

请注意,当数据集中的变量高度相关时,PCA方法特别有用。

相关性表明数据存在冗余。

由于这种冗余,PCA可用于将原始变量减少为较少数量的新变量(=主成分),解释原始变量的大部分方差。

总的来说,主成分分析的主要目的是: 识别数据集中的隐藏模式;通过消除数据中的噪声和冗余来降低数据的维度;识别相关变量。

1.2计算过程 目前很多书籍讲PCA并不那么通俗易懂。

PCA是用来降低数据维度的,维度降低后的主成分和原来的变量不是一个东西。

如果想获得原来数据中重要的变量,删除无关变量,请参考特征工程。

PCA计算过程很简单,具体如下: (1)数据处理假设我们有这样的2维数据:其中行代表了样例,列代表特征,这里有10个样例可以认为有10辆汽车,x是千米/小时的速度,y是英里/小时的速度。

通常x,y都是不同的变量,如果要放到一起来比较,一般都要进行数据标准化使得各个变量数据能够放到一块比较。

这里简单一点,只减去平均值。

分别求x和y的平均值,然后对于所有的样例,都减去对应的均值。

这里x的均值是1.81,y的均值是1.91,那么一个样例减去均值后即为(0.69,0.49),得到 (2)计算特征值在现实情况下,我们需要通过计算数值矩阵的相关系数矩阵或者协方差矩阵来求得特征值和特征向量,进而获得主要成分。

相关系数矩阵和协方差矩阵能够变量间相关性,主成分分析会删除和其他变量相关性强的变量,留下更具有代表性的变量。

相关系数矩阵相当于消除量纲的表示变量间相关性的一个矩阵,协方差系数矩阵是没有消除量纲的表示变量间相关性的矩阵。

相关系数矩阵是协方差系数矩阵的特例,通常在PCA中,如果数据量很少用相关系数矩阵,很多用协方差系数矩阵。

这里主要计算协方差系数矩阵,因为协方差系数更具有实际代表意义。

主要计算过程网上都有。

那么我们能够获得矩阵的特征值和特征向量(这部分是线性代数的内容)。

如下所示:这里特征值0.049对应特征向量为 ( − 0.735 , 0.677 ) T (-0.735,0.677)^T (−0.735,0.677)T;特征值1.284对应特征向量为 ( − 0.677 , − 0.735 ) T (-0.677,-0.735)^T (−0.677,−0.735)T。

主成分分析降维的意思就是根据特征值的大小挑选主成分变量,比如这里我们要把二维数据降为一维,就选取最大特征值1.284对应的特征向量计算主成分得分。

计算公式如下: P C 1 = D a t a A d j u s t × 特 征 向 量 ( − 0.677 , − 0.735 ) T PC1=DataAdjust×特征向量(-0.677,-0.735)^T PC1=DataAdjust×特征向量(−0.677,−0.735)TPC1就是我们说的主成分得分,特征向量(-0.677,-0.735)就是我们说得主成分系数。

我们所获得降维后的一维变量就是通过这个公式对每行数据通过上面公式获得的。

结果如下: (3)可视化描述上述过程可以简单用图来描述,我们有一个经过归一化的数据,这个数据各个样本点都是分散的,无规律的。

如果我们将原数据降为二维(这里实际维度没有变化,一维不好表示)。

那么结果如下:可以看到现在各个样本点分布像一条直线,与x轴平行。

样本点的x坐标就是第一主成分,第二主成分就是y坐标。

其中贡献率是表示投影后信息的保留程度的变量,计算公式就是前K个特征值除以总的特征值之和。

计算公公式如下: ∑ i = 0 K λ i ∑ i = 0 m λ i \frac{\sum_{i=0}^{K}\lambda_{i}}{\sum_{i=0}^{m}\lambda_{i}} ∑i=0m​λi​∑i=0K​λi​​比如本文例子有两个特征值1.284和0.049,如果我们降为一维主成分,那么第一主成分贡献率为 1.284 / ( 1.284 + 0.049 ) = 0.963 1.284/(1.284+0.049)=0.963 1.284/(1.284+0.049)=0.963。

PCA详细原理说明见:https://blog.csdn.net/LuohenYJ/article/details/78355954 2.计算 R包R代码 2.1R包 用于计算PCA的R软件中提供了来自不同软件包的多个函数: prcomp()和princomp()[内置],PCA()[FactoMineR包],dudi.pca()[ade4包],epPCA()[ExPosition包] 无论您决定使用什么功能,您都可以使用factoextraR包中提供的R功能轻松提取和可视化PCA的结果。

通过install.packages(“FactoMineR”,“factoextra”)安装所使用的包。

#调用R包 library("FactoMineR"); library("factoextra"); Warningmessage: "package'FactoMineR'wasbuiltunderRversion3.6.1"Loadingrequiredpackage:ggplot2 Welcome!RelatedBooks:`PracticalGuideToClusterAnalysisinR`athttps://goo.gl/13EFCZ 我们将使用演示数据集decathlon2从factoextra包,数据集如下: data(decathlon2) head(decathlon2) Adata.frame:6×13 X100mLong.jumpShot.putHigh.jumpX400mX110m.hurdleDiscusPole.vaultJavelineX1500mRankPointsCompetitionSEBRLE11.047.5814.832.0749.8114.6943.755.0263.19291.718217DecastarCLAY10.767.4014.261.8649.3714.0550.724.9260.15301.528122DecastarBERNARD11.027.2314.251.9248.9314.9940.875.3262.77280.148067DecastarYURKOV11.347.0915.192.1050.4215.3146.264.7263.44276.458036DecastarZSIVOCZKY11.137.3013.482.0148.6214.1745.674.4255.37268.078004DecastarMcMULLEN10.837.3113.762.1349.9114.3844.414.4256.37285.187995Decastar 但我们只选择部分数据进行计算,处理如下: decathlon2.activeSEBRLE11.047.5814.832.0749.8114.69CLAY10.767.4014.261.8649.3714.05BERNARD11.027.2314.251.9248.9314.99YURKOV11.347.0915.192.1050.4215.31 在主成分分析中,变量通常被缩放(即标准化)。

当变量以不同的尺度(例如:千克,千米,厘米…)测量时,尤其建议这样做;否则,获得的PCA输出将受到严重影响。

目标是使变量具有可比性。

通常,变量被缩放为具有标准偏差1和平均值为零。

数据标准化是在PCA和聚类分析之前广泛用于基因表达数据分析的方法。

当变量的平均值和/或标准偏差大不相同时,我们可能还希望缩放数据。

缩放变量时,数据转换公式如下: x i − mean ⁡ ( x ) s d ( x ) \frac{x_{i}-\operatorname{mean}(x)}{sd(x)} sd(x)xi​−mean(x)​这种方法是计算相关系数矩阵,默认是计算相关系数矩阵而不是协方差系数矩阵。

请注意,默认情况下在FactoMineR中,PCA之前会自动标准化数据;所以你不需要在PCA之前进行这种转换。

2.2R代码 本部分主要介绍R语言FactoMineR进行PCA的常用代码,具体实例见下一章。

PCA(X,scale.unit=TRUE,ncp=5,graph=TRUE) X:数据框。

行是个体,列是数字变量scale.unit:一个逻辑值。

如果为TRUE,则在分析之前将数据缩放为单位方差。

这种相同规模的标准化避免了一些变量因其较大的测量单位而成为主导。

它使变量具有可比性。

ncp:最终结果中保留的维数。

graph:一个逻辑值。

如果为TRUE,则显示图表。

我们将使用factoextraR包来帮助解释PCA。

无论你决定使用什么函数,你都可以轻松地提取和可视化PCA的结果使用factoextraR包中提供的R函数。

这些功能包括: get_eigenvalue(res.pca):提取主成分的特征值/方差fviz_eig(res.pca):可视化特征值get_pca_ind(res.pca),get_pca_var(res.pca):分别提取个体和变量的结果。

fviz_pca_ind(res.pca),fviz_pca_var(res.pca):分别可视化结果个体和变量。

fviz_pca_biplot(res.pca):制作主成分分析散点图biplot图。

我们检查特征值以确定考虑的主成分的数量。

可以使用函数get_eigenvalue提取主成分保留的特征值和方差(即信息)的比例。

eig.val5.13.51.40.2setosa4.93.01.40.2setosa4.73.21.30.2setosa iris数据集包含150个数据样本,分为3类,每类50个数据,每个数据包含4个属性。

可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。

“Species”列将用作分组变量。

我们首先计算主成分分析如下: #ThevariableSpecies(index=5)isremovedbeforePCAanalysis #第5列不进行PCA运算 iris.pca0.6的观测量/变量;ifcos2>1,例如:5,然后绘制具有最高cos2的前5个活动观测量/变量;contrib:如果contrib>1,例如:5,则绘制具有最高贡献的前5个观测量/变量。

具体使用如下: #Visualizevariablewithcos2>=0.6 #可视化cos2>0.6 fviz_pca_var(res.pca,select.var=list(cos2=0.6)) #Selectbynames #根据名字显示 name



請為這篇文章評分?