小白向大佬学生信

mixOmics

2020-04-27  本文已影响0人  nnlrl

在分析生物学问题时, 我们会想着从多个角度入手分析样本。当我们拥有多种不同的组学数据的时候,组学的独立分析忽略了不同特征之间的关系,可能会遗漏关键的信息。mixOmics为我们提供了一种思路,我们可以将不同的组学数据在进行预处理后共同分析,并将研究问题主要放在特征的选择上,它可以应付多组学大样本量的分析,通过将特征投影到低维的子空间中捕获关键的变异源以便进行后续研究。mixOmics采用了有监督判别分析,在降维的同时识别最具判别性的因素,并将其用于预测新的样本。

mixOmics中主要包括了三种分析模式:

同时mixOmics也包括了多种可视化手段用以展示结果,针对样本的plotIndiv, plotArrow, plotDiablo, 针对特征的plotVar, plotLoadings, circosPlot, cim, network以及用于模型准确性验证的auroc, plot.tune, plot.pref

PLSDA和sPLSDA

可用于定量和定性

对于这组方法,需要选择三个参数:

library(mixOmics)
data(srbct)
X <- srbct$gene
Y <- srbct$class 
summary(Y) ## class summary

## EWS  BL  NB RMS 
##  23   8  12  20
MyResult.plsda2 <- plsda(X,Y, ncomp=10)
set.seed(30) # for reproducbility in this vignette, otherwise increase nrepeat
MyPerf.plsda <- perf(MyResult.plsda2, validation = "Mfold", folds = 3, 
                  progressBar = FALSE, nrepeat = 10) # we suggest nrepeat = 50

plot(MyPerf.plsda, col = color.mixo(5:7), sd = TRUE, legend.position = "horizontal")
list.keepX <- c(5:10,  seq(20, 100, 10))

set.seed(30) # for reproducbility in this vignette, otherwise increase nrepeat
tune.splsda.srbct <- tune.splsda(X, Y, ncomp = 3, # we suggest to push ncomp a bit more, e.g. 4
                                 validation = 'Mfold',
                                 folds = 3, dist = 'max.dist', progressBar = FALSE,
                                 measure = "BER", test.keepX = list.keepX,
                                 nrepeat = 10)   # we suggest nrepeat = 50
error <- tune.splsda.srbct$error.rate
ncomp <- tune.splsda.srbct$choice.ncomp$ncomp

select.keepX <- tune.splsda.srbct$choice.keepX[1:ncomp]  

随后便可以使用选择好的参数构建模型

MyResult.splsda<- splsda(X, Y, ncomp = ncomp, keepX = select.keepX)

#样本
plotIndiv(MyResult.splsda, ind.names = FALSE, legend=TRUE,
          ellipse = TRUE, title="sPLS-DA - final result")
#由于我们选择了前三个主成分,我们也可以绘制3D图片展示所有主成分,注意安装rgl包
#plotIndiv(MyResult.splsda, style="3d")

#特征
plotVar(MyResult.splsda)                            # 3 Plot the variables

#添加背景
background <- background.predict(MyResult.splsda, comp.predicted=2,
                                 dist = "max.dist") 
plotIndiv(MyResult.splsda, comp = 1:2, group = srbct$class,
          ind.names = FALSE, title = "Maximum distance",
          legend = TRUE,  background = background)

#AUC
auc.plsda <- auroc(MyResult.splsda)

当我们构建了一个判别模型并通过AUC验证了模型的准确性后,我们还需要知道对结果贡献最大的特征,挑选出来并用于后续的分析

#在指定主成分中选择贡献最大的特征
selectVar(MyResult.splsda2, comp=1)$value

plotLoadings(MyResult.splsda2, contrib = 'max', method = 'mean')

DIABLO

DIABLO利用广义典型分析使用相同分析中多个组学的数据进行整合分析。这是mixOmics进行整合分析主要使用的方法,同时也有更多的函数支持。

#导入示例数据,包括mrna,mirna以及蛋白质谱
library(mixOmics)
data(breast.TCGA)
# extract training data and name each data frame
X <- list(mRNA = breast.TCGA$data.train$mrna, 
          miRNA = breast.TCGA$data.train$mirna, 
          protein = breast.TCGA$data.train$protein)
Y <- breast.TCGA$data.train$subtype
summary(Y)

在DIABLO训练过程中,我们需要注意3个参数:

list.keepX <- list(mRNA = c(16, 17), miRNA = c(18,5), protein = c(5, 5))

MyResult.diablo <- block.splsda(X, Y, keepX=list.keepX)
plotIndiv(MyResult.diablo) ## sample plot

plotVar(MyResult.diablo) ## variable plot

我们也可以进行一协调整

#根据亚型分组
plotIndiv(MyResult.diablo, 
          ind.names = FALSE, 
          legend=TRUE, cex=c(1,2,3),
          title = 'BRCA with DIABLO')

#某些数据集中可以省略标签以提高可读性。例如她,我们只显示蛋白质的名称
plotVar(MyResult.diablo, var.names = c(FALSE, FALSE, TRUE),
        legend=TRUE, pch=c(16,16,1))

#不同数据之间两两比较绘图,展示分类效果以及数据之间的相关性
plotDiablo(MyResult.diablo, ncomp = 1)

#circos图表示不同类型变量之间的相关性,cutoff限制展示的数量
circosPlot(MyResult.diablo, cutoff=0.7)

#cimDiablo使用层次聚类并按特征的表达水平绘制热图,行标签指定样本,列标签指定主成分中贡献最大的特征
cimDiablo(MyResult.diablo, color.blocks = c('darkorchid', 'brown1', 'lightgreen'), comp = 1, margin=c(8,20), legend.position = "right")

# 还可以使用network绘制网络图
#network(MyResult.diablo, blocks = c(1,2,3),color.node = c('darkorchid', 'brown1', 'lightgreen'), cutoff = 0.6, save = 'jpeg', name.save = 'DIABLOnetwork')

#AUC用于评估模型的准确性,同时还可以使用混淆矩阵
Myauc.diablo <- auroc(MyResult.diablo, roc.block = "miRNA", roc.comp = 2)
confusion.mat <- get.confusion_matrix(
                truth = breast.TCGA$data.test$subtype, 
                predicted = Mypredict.diablo$MajorityVote$centroids.dist[,2])
kable(confusion.mat)

在构建完模型后,我们同样也可以使用selectVar, plotLoadings来进行特征的筛选

上一篇 下一篇

猜你喜欢

热点阅读