16S扩增子测序Top50属丰度含盐与无盐组差异统计检验及R实现咨询
16S扩增子属水平丰度盐处理vs无盐处理组间差异检验解决方案
前置说明
你当前使用的数据集为前50属的相对丰度表,第一列为属名,后3列为salt组重复样本,再后3列为non_salt组重复样本,每组共3个生物学重复。
问题1:如何对该类数据进行正态性检验
- 常用检验方法为Shapiro-Wilk检验,适合小样本场景,同时可配合QQ图可视化判断正态性
- 注意:你的每组仅3个生物学重复,Shapiro-Wilk检验的功效非常有限,且16S相对丰度属于成分数据,天然存在偏态、零值多的特点,绝大多数情况不符合正态分布,因此更推荐直接使用非参数检验开展组间比较
- 批量正态性检验R代码:
# 加载依赖包 library(dplyr) # 数据预处理:设置属名为行名,定义分组信息 data <- read.table("statisticalTest.salt_vs_non_salt.txt", header=T, sep='\t', check.names=F, row.names=1) group <- factor(c(rep("salt", 3), rep("non_salt", 3))) # 批量对每个属的两组分别做Shapiro-Wilk检验 norm_test_res <- apply(data, 1, function(x){ p_salt <- shapiro.test(x[group == "salt"])$p.value p_nonsalt <- shapiro.test(x[group == "non_salt"])$p.value return(c(salt_p = p_salt, nonsalt_p = p_nonsalt)) }) norm_test_res <- t(norm_test_res) %>% as.data.frame() # 输出结果中p值<0.05则认为对应组的属丰度不符合正态分布
问题2:如何在R中实现多个属的组间差异统计检验
根据数据正态性结果选择检验方法,绝大多数微生物组数据推荐使用非参数的Wilcoxon秩和检验,若确认符合正态可替换为t检验,检验后必须做多重检验校正避免假阳性:
# 批量Wilcoxon秩和检验 diff_res <- apply(data, 1, function(x){ test <- wilcox.test(x ~ group) # 计算组均值、log2倍数变化,加1e-6伪计数避免除零 salt_mean <- mean(x[group == "salt"]) nonsalt_mean <- mean(x[group == "non_salt"]) log2FC <- log2((salt_mean + 1e-6)/(nonsalt_mean + 1e-6)) return(c(pvalue = test$p.value, salt_mean = salt_mean, nonsalt_mean = nonsalt_mean, log2FC = log2FC)) }) # 整理结果并做FDR多重检验校正 diff_res <- t(diff_res) %>% as.data.frame() diff_res$padj <- p.adjust(diff_res$pvalue, method = "fdr") # 筛选显著差异属:通常阈值为校正后p值<0.05,|log2FC|>1 sig_genera <- diff_res[diff_res$padj < 0.05 & abs(diff_res$log2FC) > 1, ]
如果样本量更大(每组>10个重复),也可以选择DESeq2、MaAsLin2等专门针对微生物组数据开发的差异检验工具,结果可靠性更高。
问题3:数据中存在大量零值应如何处理
微生物组数据的零值分为两类:结构性零(该属在对应样本/组中确实不存在)和抽样零(测序深度不足未检测到),可按以下逻辑处理:
- 第一步:过滤低检出率属,保留在至少20%~30%样本中丰度大于0的属,避免仅在个别样本存在的属引入假阳性,代码示例:
# 保留检出率≥30%的属 keep <- rowSums(data > 0) >= 0.3 * ncol(data) data_filtered <- data[keep, ]
- 第二步:添加伪计数,如需做对数转换、计算倍数变化,可统一添加所有样本中最小非零丰度的1/10作为伪计数,避免log(0)、除零等计算错误。
- 第三步:选择兼容零值的检验方法,不要强行使用t检验等参数检验,Wilcoxon秩和检验属于非参数检验,无需正态假设,对零值和异常值耐受度更高;如果零值比例极高,可选择零膨胀模型、metagenomeSeq等专门适配零膨胀数据的分析方法。
内容的提问来源于stack exchange,提问作者bioinfonext
相关产品推荐
相关产品推荐

