偏最小二乘法判别分析(PLS-DA,Partial Least Squares Discriminant Analysis)经常用来处理分类和判别问题。其与PCA类似,不同的是PCA是无监督的,PLS-DA是有监督的。
当样本组间差异大而组内差异小时,无监督分析方法可以很好的区分组间差异。反之样本组间差异不大,无监督的方法就难以区分组间差异。另外如果组间的差异较小,各组的样本量相差较大,样本量大的那组将会主导模型。有监督的分析(PLS-DA)能够很好的解决这些问题。
PLS是偏最小二乘分析,DA是判别分析。再加一个o就是加了一个正交,OPLS-DA就是正交偏最小二乘法判别分析。
当变量数量远大于样品数量时(行数小于列数), PLS或 PLS-DA模型容易过拟合,但是PCA效果也不好。但是加入正交矫正之后数据检出假阳性会降低,所以会更准确。数据处理的时候一般是先做PCA,然后做OPLS-DA。
16S扩增子分析数据中也慢慢应用了这种方法,以区分组间的样本差异。
1#安装
2if (!requireNamespace("BiocManager", quietly = TRUE))
3 install.packages("BiocManager")
4# The following initializes usage of Bioc devel
5BiocManager::install(version='devel')
6BiocManager::install("mixOmics")
7
8#使用
9library(mixOmics)
10library(ggplot2)
11
12plsda(X,
13 Y,
14 ncomp = 2,
15 scale = TRUE,
16 mode = c("regression", "canonical", "invariant", "classic"),
17 tol = 1e-06,
18 max.iter = 100,
19 near.zero.var = FALSE,
20 logratio="none", multilevel=NULL,
22 all.outputs = TRUE)
23#X:OTU
24#Y:分组
25#ncomp:展示前几轴。默认2
26#scale:标准化
27#mode:用哪种算法
28#max.iter: 迭代次数
29
30## First example
31data(breast.tumors)
32X <- breast.tumors$gene.exp
33Y <- breast.tumors$sample$treatment
34
35plsda.breast <- plsda(X, Y, ncomp = 2)
36plotIndiv(plsda.breast, ind.names = TRUE, ellipse = TRUE, legend = TRUE)
Reference
http://blog.sina.com.cn/s/blog_942438cf0102wth0.html
http://www.biotech-pack.com/pls-da-opls-da-two-dimensional-map.html
http://blog.sciencenet.cn/blog-3406804-1163309.html
https://www.rdocumentation.org/packages/mixOmics/versions/6.3.1/source
END