主成分分析(PCA)原理及应用

article/2025/9/11 1:10:48

在进行统计学分析中往往面临着比较难以抉择的权衡。以农学研究为例,在实验设计时,考虑到研究结论更能反应作物真实状态下的农艺性状,研究人员会尽可能的纳入较多的指标,但是,随着而来的是铺天盖地的数据让人难以下手,主成分分析(principal component analysis,PCA)便很好的解决了这一问题。

在生物学相关(因为我主要从事生物学研究 ^ _^)领域,PCA应用范围极广。光我接触过的便有数种:群体遗传学遗传成分的划分、代谢组学关键化合物的分离、群落学不同群落差异的评估、环境DNA组分的划分……

1 PCA原理

假设我们分别调查了几个群落的物种丰富度和各物种的多度,正如上述所言,就算只对三个群落进行调查,每个群落三个生物学重复,但是哪怕是群落构成单一如农田生态系统也有近百种物种构成,这时我们拿到的数据就是一个 9 × 100 9\times100 9×100的数据矩阵。

为了方便理解,假设我调查了 i i i个群落,其中物种最多的群落有 j j j个物种,这时我们就得到了下面的一个数据矩阵 A i × j A_{i\times j} Ai×j
A i × j = [ x 11 x 12 … … x 1 j x 21 x 22 … … x 2 j . . … … . x i 1 x i 2 … … x i j ] A_{i\times j}= \begin{bmatrix} x_{11} & x_{12}& …… & x_{1j}\\ x_{21} & x_{22}& …… & x_{2j}\\ . & . & …… & . \\ x_{i1} & x_{i2} & …… & x_{ij} \\ \end{bmatrix} Ai×j= x11x21.xi1x12x22.xi2……………………x1jx2j.xij
而每个物种即构成了一个这个矩阵的列向量 x → j \overrightarrow x_j x j

( x → 1 , x → 2 , … … , x → j ) (\overrightarrow x_1,\overrightarrow x_2,……,\overrightarrow x_j) (x 1,x 2,……,x j)
避开晦涩的数学推导过程,通俗的以几何图形的方式理解。在这个物种构成矩阵,可形成一个 j j j维的空间,每个物种的列向量 x → j \overrightarrow x_j x j为其所在维度的坐标系:

每个样本构成的行向量:
( x → 1 , x → 2 , … … , x → i ) (\overrightarrow x_1,\overrightarrow x_2,……,\overrightarrow x_i) (x 1,x 2,……,x i)
可看作是在此 j j j维空间内的 i i i个点,其对应的物种构成即为 j j j维坐标:

通过对每个向量构成元素的离散度(方差 S 2 S^2 S2)进行比较,离散度最大的向量对组间变异(即群落构成差异)的解释率最高,那么这个向量 x → n \overrightarrow x_n x n即为主成分1(PC1):

为避免各解释向量间的交互效应,过PC1轴取其正交平面 α \alpha α。在 α \alpha α平面内再次取离散度最大的向量轴 x → m \overrightarrow x_m x m作为主成分2(PC2):

最后将结果在二维的平面展示就是我们经常看到的PCA可视化结果:
在这里插入图片描述

通过此方法即可快速找出数据矩阵中对组间变异解释度(贡献率)最高的几个指标,在此例子中就是对各群落结构差异贡献最大的几个物种。同理,将此思路推广到其他几个应用领域即为:对农产品品质差异影响最大的农艺性状;对代谢组差异贡献最大的代谢物……

2 实战

vegan包是生态学分析中较为常用的包,特别是各种排序图绘制功能(包括PCA),但缺点是绘制的图可能不及ggplot系列(没错,ggplot也有针对PCA的功能)美观。

2.1 vegan

此时使用的数据是一个模拟的宏基因组数据,三个样点,每个样点20个重复,总计60个样本。
首先加载包、读取数据:

#加载包,前两个为依赖包
library(permute)
library(lattice)
library(vegan)#1.
#设置工作环境,读取数据
getwd()
setwd("D:/dir/CSDN/PCA/")#读取数据
data<-read.csv("example.csv",header=T)head(data)
#site otu_1 otu_2 otu_3 otu_4 otu_5 otu_6 otu_7 otu_8 otu_9 otu_10 otu_11 otu_12 otu_13 otu_14 otu_15 otu_16 otu_17 otu_18 otu_19 otu_20 otu_21 otu_22#site_1     1     0     0     0     0     0     0     0     0      0      1      0      0      0      0      0      2      0      0      0      0      1#site_1     0     0     0     0     0     0     0     1     0      0      0      0      0      0      0      0      0      2      0      0      0      0#site_1     0     6     0     0     0     0     0     1     0      0      0      0      0      0      0      0      1      0      0      0      0      0#site_1     1     0     6     1     6     1     5     0     0      1      1      0      1      0      0      1      1      0      0      0      0      0#site_1     0     0     0     0     0     0     0     0     0      0      0      0      0      0      0      0      4      0      0      0      0      0#site_1     2     5     0    55     7     0     0     0     0      0      0      0      2      0      0      0      6      0      0      2      0      4

根据数据维度对数据进行切片降维:

#2.
#数据分析#查看数据维度,因为降维过程不需要样点信息列
dim(data)
#输出为:
#[1] 60 94#根据前一步输出提取数据的主要部分,并降维
data_pca<-rda(data[,2:94])#查看主要结果
summary(data_pca)

由于是模拟数据的缘故,解释率可能会比较奇怪:
在这里插入图片描述
最后就是可视化:

#  生成坐标系
#  注意根据pca结果更改坐标轴名称
fig<-ordiplot(data_pca,type="none",xlab="PC1(13.12%)",ylab="PC2(11.70%)")#  将各样本点映射到坐标系
points(fig,"sites",pch=16,col="#FF4900FF",cex=1,select=data$site=="site_1")
points(fig,"sites",pch=16,col="#FF80FFFF",cex=1,select=data$site=="site_2")
points(fig,"sites",pch=16,col="#2A7AB7",cex=1,select=data$site=="site_3")

在这里插入图片描述
显示各OTUs信息:

#  显示各指标(列向量)
text(fig, "species", col="grey", cex=1)

在这里插入图片描述


#  也可以显示列向量为点
points(fig, pch=16,"species", col="grey", cex=1)

在这里插入图片描述
添加图例以及置信椭圆:

#  添加图例
legend(0,10, c("Site 1","Site 2", "Site 3"), text.col = c("black","black","black"),pch = c(16,16,16),col=c("#FF4900FF","#FF80FFFF","#2A7AB7"),cex=1,merge = F,bty = "n")#  读取分组信息
env<-read.csv("site.csv",header=T)#  添加置信椭圆
with(env,ordiellipse(data_pca,site,kind="se",col=c("#FF4900FF","#FF80FFFF","#2A7AB7"),conf = 0.99))

在这里插入图片描述

2 ggplot2

此次使用的数据是来自于三种生境的授粉昆虫多样性调查,每种生境分别做了12次重复。数据分析涉及的包为:ggplot2factoextraFactoMineR。相关的分析方法和原理与vegan类似:

library(ggplot2)
library(factoextra)
library(FactoMineR)#  1.
#  读取数据
setwd("D:/dir/CSDN/PCA/")
data<- read.csv("example2.csv")#  2.
#  降维,注意这提供了另一种切片方法
data_pca<- PCA(data[,-1], graph = FALSE)
summary(data_pca)#  3.
#  可视化
fviz_pca_ind(data_pca,geom.ind = "point", pointsize =3,pointshape = 21,fill.ind = data$site, addEllipses = TRUE, legend.title = "Groups",title="")+theme_grey() +theme(text=element_text(size=12,face="plain",color="black"),axis.title=element_text(size=11,face="plain",color="black"),axis.text = element_text(size=10,face="plain",color="black"),legend.title = element_text(size=11,face="plain",color="black"),legend.text = element_text(size=11,face="plain",color="black"),legend.background = element_blank(),legend.position="right")
#出图
#脚本参考自EasyCharts团队

在这里插入图片描述
最后,ggplot2做为强大的可视化工具,也可接受vegan包结果的投影,并使用ggplot的可视化思路进行绘图(之前做过,存脚本的磁盘坏了……)。

END


http://chatgpt.dhexx.cn/article/OsKnNgx1.shtml

相关文章

PCA主成分分析原理与基础知识

笔记的主要内容是 PCA&#xff08;主成分分析&#xff09; 原理和基本知识&#xff0c;相关数学原理和核心概念。 什么是PCA分析&#xff1f; 主成分分析(PCA, principal component analysis)是一种数学降维方法,利用正交变换把一系列可能线性相关的变量转换为一组线性不相关的…

【机器学习】五、主成分分析原理

主成分分析(Principal Component Analysis)&#xff0c;简称PCA&#xff0c;是机器学习中一种常用来进行数据降维操作的方法。PCA通过矩阵变换&#xff0c;将高维数据变换到低维。本文主要分享PCA的数学原理&#xff0c;帮助大家了解PCA降维的理论基础。码字不易&#xff0c;喜…

主成分分析原理详解

本博客前三节参考https://blog.csdn.net/program_developer/article/details/80632779 至于协方差矩阵的公式推导参考 http://blog.codinglabs.org/articles/pca-tutorial.html 1、背景 在许多领域的研究与应用中&#xff0c;通常需要对含有多个变量的数据进行观测&#xff0…

主成分分析原理及Python实现

主成分分析&#xff08;Principal Components Analysis, PCA&#xff09;是一种常用的数据分析手段&#xff0c;是图像处理过程中常用到的降维方法。对于一组不同维度之间可能存在线性相关关系的数据&#xff0c;PCA能够把这组数据通过正交变换变成各个维度之间线性无关的数据&…

主成分分析原理以及SPSS和Python实现

目录 [ 0 ] 一句话定义[ 1 ] 使用目的和使用条件[ 2 ] 基本思想和直观理解[ 3 ] 具体计算步骤[ 4 ] 求各个成分的累计贡献率[ 5 ] 主成分分析的SPSS和Python实现SPSS实现相关设置结果分析 Python实现 [ 6 ] 总结 [ 0 ] 一句话定义 主成分分析(principal component analysis,PCA…

主成分分析原理

文章目录 一、主成分操作步骤二、spss里面的设置三、一些概念的解释 一、主成分操作步骤 1、为消除量纲的影响&#xff0c;先对数据进行标准化处理&#xff1b; 2、计算相关系数&#xff1a;一般认为各变量之间的相关系数大于0.3较好&#xff1b; 3、KMO检验和Barlett&#…

PCA: Principal Components Analysis,主成分分析法原理

PCA&#xff1a; Principal Components Analysis&#xff0c;主成分分析法原理 1、引入 PCA算法是无监督学习专门用来对高维数据进行降维而设计&#xff0c;通过将高维数据降维后得到的低维数能加快模型的训练速度&#xff0c;并且低维度的特征具有更好的可视化性质。另外&…

【数据处理方法】主成分分析(PCA)原理分析

笔者最近在学习的过程需要使用一些数据分析和处理的方法&#xff0c;而PCA就是其中常用的一种手段。但在自学的过程中&#xff0c;由于笔者水平有限&#xff0c;对一些博客中的公式不是能很好理解&#xff08;数学不好的辛酸Ծ‸Ծ&#xff09;&#xff0c;导致总是对整个方法的…

主成分分析法原理简单理解及技术实现

主成分分析法 主成分分析是利用降维的思想,在损失很少信息的前提下,把多个指标转化为几个综合指标的多元统计方法。通常把转化生成的综合指标称为主成分,其中每个主成分都是原始变量的线性组合,且各个主成分之间互不相关,使得主成分比原始变量具有某些更优越的性能…

win10+tensorflow1.14+cuda10安装踩坑

tensorflow1.14安装记录 需要python3.7&#xff0c;cuda10&#xff0c;cudnn7.6&#xff0c;visual studio 2017 可以用visual studio 2017 community 版本 &#xff0c;win10 sdk要加上&#xff0c;build tools要装上 cuda10.0安装不上报错visual studio integration faile…

Win10 下载torch以及CUDA配置

下载torch以及CUDA配置 下载torch和torchvision安装torch和torchvision安装CUDA检查是否成功 下载torch和torchvision 进入该网站&#xff0c;下载对应的torch和torchvision版本。 https://download.pytorch.org/whl/torch_stable.html以该图为例&#xff0c;cu102代表CUDA10…

Ubuntu 18.10 下安装CUDA10/CUDA10.1

GPU&#xff1a;GeForce840M 显卡驱动&#xff1a;预装&#xff0c;版本390 笔记本 1.降级gcc 使用gcc5 sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install gcc-5 g-5 sudo update-alternatives --install /usr/bin/gcc gcc /us…

查看CUDA和cuDNN的版本号 | Win10安装CUDA10和cuDNN

文章目录 &#x1f514; Linux下查看CUDA和cuDNN的版本&#x1f499; Win10安装CUDA10和cuDNN&#xff0c;感谢原作者&#xff0c;链接如下&#x1f680;&#x1f680; 文末专栏推荐部分 &#x1f680;&#x1f680;❤️ 当生成器和判别器趋于平衡&#xff0c;那便是爱情 &…

【NVIDIA】Win10 + CUDA10 + cuDNN 安装教程(转载)

目录 一、前言 二、官方安装教程及软件包 1、官方教程 2、CUDA Toolkit 10.0 Download 3、cuDNN Download 三、Win10安装CUDA10及cuDNN 1、CUDA安装 2、cuDNN配置 3、万事大吉&#xff0c;只欠重启 四、一些后事 问题1&#xff1a;安装过程中电脑自动重启。 问题2&a…

英伟达CUDA 10终于开放下载了

栗子 发自 凹非寺量子位 出品 | 公众号 QbitAI 英伟达的CUDA 10工具包&#xff0c;终于可以下载了。 与9字头的前辈相比&#xff0c;10.0是第一次为图灵GPU定制的版本。 英伟达新近发布的GeForce RTX 20系列和Quadro RTX系列显卡&#xff0c;以及新一代GPU Tesla T4&#xff0c…

win10+cuda10+tensorflow-gpu最新安装教程

win10cuda10tensorflow-gpu最新安装教程 背景简介安装包准备安装过程总结 背景简介 作为刚入门深度学习的小白&#xff0c;新购置了一台机子&#xff0c;准备兴高采烈的开始用GPU跑深度学习算法&#xff0c;百度了一通win10下安装cuda和tensorflow-gpu的教程&#xff0c;十分繁…

30 系列显卡是新一代架构,新驱动不支持 cuda 9 以及 cuda 10,所以必须安装 cuda 11

30 系列显卡是新一代架构&#xff0c;新驱动不支持 cuda 9 以及 cuda 10&#xff0c;所以必须安装 cuda 11 最近在训练一个深度学习模型&#xff0c;要求的环境是python3.7 torch1.3, 而torch1.3支持的cuda版本为9.2或10.2 但是我所用的显卡为3090, 所以网上的解决办法都试遍…

在CUDA10的环境下安装支持gpu的tensorflow版本(亲测有效)

由于英伟达官方宣称CUDA10有着巨大的性能提升&#xff0c;我便迫不及待的想尝试用它来训练深度学习模型&#xff0c;然而现在Tensorflow的最新官方GPU版本1.12并不支持在CUDA10下的模型训练&#xff0c;因此便翻墙到国外论坛找材料&#xff0c;最终找到了可以完美适配CUDA10的t…

Ubuntu18 Cuda10升级Cuda11+Cudnn8+TensorRT7.1+Opencv3

文章目录 0 前沿1 显卡驱动和CUDA安装2 TensorRT3 Opencv3 0 前沿 目前TensorRT已经升级到TensorRT7.2版本&#xff0c;开始需要Cuda11cudnn8支持&#xff08;7.1版本也有10.2版本&#xff09;&#xff0c;这里简单记录以下安装流程及个别bug处理 1 显卡驱动和CUDA安装 下载…

【NVIDIA】Win10 + CUDA10 + cuDNN 安装教程

目录 一、前言 二、官方安装教程及软件包 1、官方教程 2、CUDA Toolkit 10.0 Download 3、cuDNN Download 三、Win10安装CUDA10及cuDNN 1、CUDA安装 2、cuDNN配置 3、万事大吉&#xff0c;只欠重启 四、一些后事 问题1&#xff1a;安装过程中电脑自动重启。 问题2&…