用户工具

站点工具


pls-da分析

简介

PLS-DA(Partial Least Squares Discriminant Analysis),即偏最小二乘法判别分析,是多变量数据分析技术中的判别分析法,经常用来处理分类和判别问题。通过对主成分适当的旋转,PLS-DA可以有效的对组间观察值进行区分,并且能够找到导致组间区别的影响变量。PLS-DA采用了经典的偏最小二乘回归模型,其响应变量是一组反应统计单元间类别关系的分类信息,是一种有监督的判别分析方法。因无监督的分析方法(PCA)对所有样本不加以区分,即每个样本对模型有着同样的贡献,因此,当样本的组间差异较大,而组内差异较小时,无监督分析方法可以明显区分组间差异;而当样本的组间差异不明晰,而组内差异较大时,无监督分析方法难以发现和区分组间差异。另外,如果组间的差异较小,各组的样本量相差较大,样本量大的那组将会主导模型。有监督的分析(PLS-DA)能够很好的解决无监督分析中遇到的这些问题。

数据准备及分析

Bioconductor 安装 ropls
BiocManager::install('ropls')
数据集以自带的sacurine数据集为例(183位成人的尿液样品),详情 ?sacurine
library(ropls)
data(sacurine)
PLS-DA,详情 ?opls
#监督分组以性别为例,orthoI = 0 时执行 PLS-DA
sacurine.plsda <- opls(x = sacurine$dataMatrix, y = sacurine$sampleMetadata[, 'gender'], orthoI = 0)
sacurine.plsda
相关信息查看
names(attributes(sacurine.plsda))    #查看包含信息
head(sacurine.plsda@scoreMN)    #例如,样本在 PLS-DA 轴上的位置
head(sacurine.plsda@loadingMN)    #例如,代谢物在 PLS-DA 轴上的位置
默认 plot() 作图,如查看样本差异以及帮助寻找重要的代谢物
par(mfrow = c(1, 2))
plot(sacurine.plsda, typeVc = 'x-score', parAsColFcVn = sacurine$sampleMetadata[, 'gender'])
plot(sacurine.plsda, typeVc = 'x-loading')
使用ggplot2可视化
library(ggplot2)
plot1 = sacurine.plsda@scoreMN[,1:2]
plot1 = data.frame(plot1)
# 解释率
x_lab <- sacurine.plsda@modelDF[1, "R2X"] * 100
y_lab <- sacurine.plsda@modelDF[2, "R2X"] * 100
head(plot1)
p = ggplot(plot1, aes(p1, p2, color = sacurine$sampleMetadata[, 'gender'], shape = sacurine$sampleMetadata[, 
'gender']))+ 
# 选择X轴Y轴并映射颜色和形状
geom_point(size = 3)+ # 画散点图并设置大小
geom_hline(yintercept = 0,linetype="dashed") + # 添加横线
geom_vline(xintercept = 0,linetype="dashed") + # 添加竖线
scale_color_discrete()+ # 设置颜色,此处为Integrative Genomics Viewer配色
theme_bw() + # 加上边框
stat_ellipse(level = 0.95)+ # 添加置信椭圆
# 自动提取主成分解释度进行绘图
labs(x = paste('Component1(', x_lab,'%)', sep = ''),
     y = paste('Component2(', y_lab,'%)', sep = '')) +
theme(legend.position = c(0.85,0.85)) # 设置图例位置,此处为相对位置
p
VIP 值帮助寻找重要的代谢物
vipVn <- getVipVn(sacurine.plsda)
vipVn_select <- vipVn[vipVn > 1]    #这里也通过 VIP>1 筛选下
head(vipVn_select)
vipVn_select <- cbind(sacurine$variableMetadata[names(vipVn_select), ], vipVn_select)
names(vipVn_select)[4] <- 'VIP'
vipVn_select <- vipVn_select[order(vipVn_select$VIP, decreasing = TRUE), ]
head(vipVn_select)    #带注释的代谢物,VIP>1 筛选后,并按 VIP 降序排序
plot(vipVn_select)
分析脚本

/TJPROJ5/META_ASS/16s/mengyanliang/work/Process_optimization/2022_Q3/PLS-DA_ropls/Ropls.R

结果示例

pls-da分析.txt · 最后更改: 2022/10/12 07:31 由 mengyanliang