前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据分析的一个样本问题:所有样本一起分析还是分组分别分析?

数据分析的一个样本问题:所有样本一起分析还是分组分别分析?

作者头像
Listenlii-生物信息知识分享
发布2021-07-30 15:10:31
9150
发布2021-07-30 15:10:31
举报
文章被收录于专栏:Listenlii的生物信息笔记

分析数据的时候发现一个问题,没有想的太明白,在此写出来,欢迎一起讨论。

假设有一批数据,50个样本,其中每十个样本为一组。

现在想做一个NMDS看一下组间差异。

代码语言:javascript
复制
# 构造一批样本和分组
sample = matrix(NA,nrow = 1000,ncol = 50)
for (i in 1:50){    
   sample[,i] = round(rnorm(1000,mean = 10*i,sd = 5*i),0)
}
sample = as.data.frame(sample)
colnames(sample) = paste("s",rep(1:50),sep="")
rownames(sample) = paste("OTU",rep(1:1000),sep="")

group = data.frame(s = paste("s",rep(1:50),sep=""),
                   g = c(rep("a",10),rep("b",10),
                         rep("c",10),rep("d",10),rep("e",10)))


### NMDS
bray.mds<-metaMDS(t(sample), distance="bray", k=2, trymax=100)

outbray = bray.mds$points
out.bra = outbray[,1:2]
stress.bra = bray.mds$stress
data.plot = cbind(out.bra,group) 

p1 = ggplot(data.plot,aes(MDS1,MDS2))+
    geom_point(aes(colour = g,shape = g),alpha=0.5,size = 3)+
    xlab("MDS1")+ylab("MDS2")+ labs(title = paste("NMDS\n","stress=",round(stress.bra,3),sep="\t"))+
    plot_theme + theme(plot.title=element_text(hjust=0.5))+
    stat_ellipse(aes(colour = g),level=0.95,linetype = 2,size=1.5);p1  

1. 50个样本我都需要,画出来的图如下图上半部分所示。

2. 如果我只需要分析前3组样本,这时候应该先选出前3组样本,然后做NMDS画图;还是先用所有样本做出来NMDS结果,再筛选前3组样本的结果画图?

这时候似乎前者比较合理,毕竟后20个样本用不到,为什么要一起做NMDS?

如果是前者,结果如图中左下所示;如果是后者,图形和上半部分相同,只是单独拿出前三组。

3. 如果50个样本我都需要,但是前3组样本需要一起比较;而后2组样本需要一起比较。这种情况其实非常常见,测了很多样本,包含多种分组方式,需要分别分析。

这时是先用50个样本做NMDS,然后结果中挑出前后两部分展示,这时图形仍和下图上半部分相同,只是拆成两半;还是先分别挑出两批样本,各自做NMDS各自画图,这时图形如下图下半部分所示。

我的问题是,对于NMDS这类的分析,降维的过程需要利用输入的所有样本。随着放入模型样本的不同,相同的数据之间的关系会发生变化。就如上图所示,模型的Stress值和样本间关系(置信区间)都发生了变化。

对于2的情况,因为存在没有用到的样本,因此先把用到的样本挑出来比较合理;

但是3的情况,因为所有样本都会被用到,我感觉两种做法似乎都有道理。拿全部样本一起做是考虑所有样本距离的条件下进行降维。然后不同组分别展示;而先拆分样本是只考虑这些要直接比较的样本之间的关系,但没有考虑整体样本之间的关系。这两种方法就好像是全局最优解和局部最优解的关系一样。

不仅仅是NMDS,其他β多样性分析,如PCA,DCA,PCoA,CCA等都会存在这样的问题。分析开始时输入的样本决定了最后组间的关系。

所以,应该用哪种方式分析数据呢?

这篇文章写好之后先发到了微信群里。大家的回答是用两种策略的都有。

在DESeq2中同样存在这样的问题:

https://www.bioconductor.org/packages/release/bioc/vignettes/DESeq2/inst/doc/DESeq2.html#if-i-have-multiple-groups-should-i-run-all-together-or-split-into-pairs-of-groups

作者建议全部样本一起做,再从结果中筛出自己需要的。

但是对于极端情况,如下图中C组内变异很强,导致A和B聚在一起。这时候如果想分析A和B,就可以将A和B的样本单独拿出来再分析。但是这种极端情况并不常见,因此作者还是建议全部样本一起做。

之前遇到一个问题一并记录一下:

有人拿CCA的结果用pCCA做方差分解和直接用varpart的结果做方差分解结果竟然不一样。最后发现是CCA模型用到的环境因子比较多,而用pCCA做方差分解时输入的环境因子少。由于CCA得到的解释度为总的解释度,会用于pCCA的方差分解中,这样的结果肯定是不对的。要保证CCA和pCCA环境因子完全一致。

而varpart不会存在这样的问题,可以直接使用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Listenlii 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档