多组学排序利器:PLS-DA用ggplot可视化才好

写在前面

PLS_DA 我在第一次使用的时候用于代谢组数据的区分,样本数量少,并且组件区分不是很明显。后来也就无所谓是什么数据了,作为一种降维方法,运用于什么组学倒是无所谓,只要找到我们需要的差异,也就好了。还记得第一次使用这个R包是17年mixOmics,用于PLS-DA分析等一些排序,这个包说实话是一个应用类型的包,由分析过程和可视化过程,但是封装的比较封闭,所以如今我将数据提取出来,使用熟悉的ggplot绘制结果,相信可以更加方便大家的使用。

PLS_DA 简介

偏最小二乘法判别分析(pls-da ,Partial least squares discrimination analysis)

PLS-DA采用了偏最小二乘回归模型,其响应变量时一组反应统计单元同类别关系的分类信息,是一种有监督的判别分析方法。其与PCA相对应,PCA是一种无监督的判别分析方法。

偏最小二乘法判别分析原理:

偏最小二乘法判别分析是一种用于判别分析的多变量统计分析方法。判别分析是一种根据观察或测量到的若干变量值,来判断研究对象如何分类的常用统计分析方法。其原理是对不同处理样本(如观测样本、对照样本)的特性分别进行训练,产生训练集,并检验训练集的可信度。例如,肺炎和普通感冒两类患者群体利用最小偏二乘法判别分析,第一步归纳总结出肺炎和普通感冒的区别(特性),这一步就可以得到具有什么症状的人是肺炎,具有什么症状的人是普通感冒。第二步可以验证我们得到的普通感冒和肺炎区别(特性)判别的准确率,我们虽然建立了训练集,但由于样方少,样方不足以代表总体,样方受污染,所收纳样方的特性不足,等等原因都是影响我们训练集准确率因素,换个方向思考,我们建立一个较为具有代表意义的训练集,我们就可以反过来验证样本,可以得出医生可能误诊,原本是肺炎患者误诊成普通感冒,原本是普通感冒误诊为肺炎,并算出误诊率。误诊产生的原因可能由于现有技术不够发达,医师经验不足等等原因。偏最小二乘法判别分析好处:解释样本观测数目少。可以减少变量间多重共线性产生的影响所谓的多重共线性是指一些自变量之间存在较强的线性关系。这种情况在实际应用中非常普遍,如研究高血压与年龄、吸烟年限、饮白酒年限等因素的关系,这些自变量通常是相关的,如果这种相关程度非常高,使用最小二乘法建立回归方程就有可能失效。

PCA和PLS-DA

PCA和PLS是两种检验模式,前者是无监督的模式,就是不知道分组的,是主成分分析,后者是有监督模式的偏最小二乘法分析,加了DA就是加了一个判别分析,加了一个o就是加了一个正交,所以OPLS-DA就是正交偏最小二乘法判别分析,现在做数据处理的时候一般是先做PCA,加了正交矫正之后数据检出假阳性会降低,所以更准确了。

if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager")
BiocManager::install('mixOmics')

实战

# devtools::install_github("taowenmicro/ggClusterNet")
# devtools::install_github("taowenmicro/EasyMicrobiome")
library(ggClusterNet)
library(mixOmics)
data(ps)
ps
count = vegan_otu(ps)
map = as.data.frame(sample_data(ps))
map$Group
#PLS-DA分析,这里也是选取2个主成分
plsda.datatm <-plsda(count, map$Group, ncomp = 2)
#PLS-DA without centroids
mi=c("#1B9E77" ,"#D95F02")
plotIndiv(plsda.datatm , comp = c(1,2),
group = map$Group, style = 'ggplot2' )
plotIndiv(plsda.datatm , comp = c(1,2),
group = map$Group, style = 'ggplot2',ellipse = TRUE,
size.xlabel = 20, size.ylabel = 20, size.axis = 25, pch = 15, cex = 5)

虽然说默认的图片内容都挺全面的,但是修改起来不太容易,所以这里换用ggplot出图。

ggplot出图

#----提取数据作图
a = unclass(plsda.datatm)
#--提取坐标值
plotdata = as.data.frame(a$variates$X)
plotdata$SampleType = map$Group
#-提取解释度
eig = a$explained_variance$X
eig[1]
library(ggalt)
library(BiocManager)
# install("ggalt")
p = ggplot(data = plotdata,aes(x=comp1,y=comp2,group=SampleType,color=SampleType))+geom_point(size=5)+
stat_ellipse(type = "t", linetype = 2)+
geom_encircle(s_shape=1, expand=0) +
labs(x=paste("X-variate 1 (", format(100 * eig[1]), "%)", sep=""),
y=paste("X-variate 2 (", format(100 * eig[2] ), "%)", sep=""))+
labs(title = "PLS-DA")
p
mi=c("#1B9E77" ,"#D95F02", "#7570B3","#E7298A")
p=p+theme_bw()+scale_colour_manual(values = mi)+
theme(plot.title = element_text(hjust = 0.5))+
guides(color=guide_legend(title = NULL),shape=guide_legend(title = NULL))+
geom_hline(yintercept=0) + geom_vline(xintercept=0)
p

配上我们挑选的颜色,有没有一种熟悉的感觉。

加主编微信 加入群聊

关于微生信生物 你想要的都在这里

微生信生物

reference

  • http://www.tinygene.com/statistical-approaches-to-estimating-microbial-diversity/pls-da

  • https://www.bioconductor.org/packages/devel/bioc/vignettes/ropls/inst/doc/ropls-vignette.html

(0)

相关推荐