告别测序污染:手把手教你用Decontam+SCRUB+FEAST完成微生物组数据清洗全流程

发布时间:2026/6/1 5:01:59

告别测序污染:手把手教你用Decontam+SCRUB+FEAST完成微生物组数据清洗全流程 微生物组数据清洗实战DecontamSCRUBFEAST全流程解析在微生物组研究中数据质量直接影响后续分析的可靠性。测序过程中引入的污染物、试剂背景噪音以及样本间交叉污染可能导致结果偏差甚至错误结论。本文将带你完整走通从原始数据到清洁数据的全流程结合Decontam、SCRUB和FEAST三大工具构建一套可复用的污染校正工作流。1. 环境准备与数据导入1.1 工具安装与依赖配置首先确保R环境建议4.0版本和RStudio已就绪。这三个工具分别来自Bioconductor、GitHub和CRAN安装方式略有差异# Decontam安装Bioconductor if (!requireNamespace(BiocManager, quietly TRUE)) install.packages(BiocManager) BiocManager::install(decontam) # SCRUB安装GitHub install.packages(c(glmnet, torch, tidyverse)) devtools::install_github(shenhav-and-korem-labs/SCRuB) # FEAST安装GitHub Packages - c(Rcpp, RcppArmadillo, vegan, dplyr) install.packages(Packages) devtools::install_github(cozygene/FEAST)注意torch安装可能需要额外系统依赖Linux用户需提前配置libtorch1.2 数据结构标准化微生物组数据通常以OTU表物种丰度和样本元数据表形式存在。推荐使用phyloseq对象统一管理library(phyloseq) library(tidyverse) # 读取CSV格式的OTU表和元数据 otu - read.csv(otu_table.csv, row.names1) # 行名为OTU列名为样本 meta - read.csv(metadata.csv, row.names1) # 行名需与OTU表列名一致 # 转换为phyloseq对象 ps - phyloseq( otu_table(otu, taxa_are_rowsTRUE), sample_data(meta) )关键数据结构要求OTU表数值矩阵不含分类信息元数据必须包含样本类型标识如Control/Sample阴性对照建议至少3个技术重复2. 基于Decontam的污染物识别2.1 阴性对照质量评估正式分析前先检查阴性对照的测序深度是否合理library(ggplot2) df - data.frame( LibrarySize sample_sums(ps), SampleType sample_data(ps)$Sample_or_Control ) ggplot(df, aes(xreorder(rownames(df), LibrarySize), yLibrarySize, colorSampleType)) geom_point() theme_minimal()理想情况下阴性对照的文库大小应明显小于真实样本通常低1-2个数量级。如果出现阴性对照与样本文库大小重叠可能需要重新评估实验流程。2.2 污染物判定与过滤Decontam提供两种算法选择频率法frequency基于污染物在低生物量样本中相对丰度更高流行率法prevalence利用污染物在阴性对照中出现频率更高# 标记阴性对照样本 sample_data(ps)$is.neg - sample_data(ps)$Sample_or_Control Control # 使用流行率法推荐有多个阴性对照时使用 contam - isContaminant( ps, methodprevalence, negis.neg, threshold0.5 ) # 查看污染物统计 table(contam$contaminant) # TRUE为污染物 # 过滤污染物 ps.noncontam - prune_taxa(!contam$contaminant, ps)参数选择经验threshold通常0.1-0.5值越小筛选越严格batch参数适用于多批次实验设计detailedTRUE获取每个OTU的详细统计量3. SCRUB校正样本间污染3.1 原理与参数理解SCRUBSource Correction for Removing Unwanted Borrowing专门解决样本间交叉污染问题其核心优势在于同时考虑技术重复和样本类型信息采用概率模型估计污染比例保留低丰度但真实的生物学信号关键输入参数metadata_column指定样本分组列control_samples阴性对照样本名向量batch_column可选批次信息3.2 实际操作示例library(SCRuB) # 准备输入数据需转换为数据框 otu_df - as.data.frame(otu_table(ps.noncontam)) meta_df - as.data.frame(sample_data(ps.noncontam)) # 运行SCRUB scrub_res - SCRUB( otu_df, meta_df, control_samples rownames(meta_df)[meta_df$Sample_or_ControlControl], metadata_column SampleType ) # 获取校正后的OTU表 otu_scrub - scrub_res$corrected_abundances典型输出解读contamination_proportions各样本的估计污染比例corrected_abundances校正后的丰度矩阵contaminant_sources污染物主要来源分析提示SCRUB计算量较大大数据集建议在服务器运行4. FEAST溯源分析4.1 群落来源解析原理FEASTFast Expectation-maximization for microbial Source Tracking通过EM算法量化不同来源对目标样本的贡献度。在污染分析场景中可用于量化阴性对照对样本的污染贡献识别主要污染来源样本验证清洗效果4.2 实施步骤与可视化library(FEAST) # 准备输入数据需要指定源样本和目标样本 sources - rownames(meta)[meta$SampleType Control] # 以阴性对照为源 targets - rownames(meta)[meta$SampleType Sample] # 真实样本为目标 # 运行FEAST feast_res - FEAST( t(otu_scrub), # 需要转置为样本×OTU sources sources, targets targets, env meta$SampleType # 分组信息 ) # 结果可视化 plot_contribution(feast_res$contribution, metadata meta, group SampleType)关键输出contribution各源对目标的贡献矩阵p_value来源显著性imputation估算的潜在来源5. 流程整合与自动化将上述步骤整合为可复用的工作流# 定义完整清洗函数 clean_microbiome - function(otu_path, meta_path, output_dir) { # 1. 数据加载 ps - create_phyloseq(otu_path, meta_path) # 2. Decontam过滤 ps - run_decontam(ps, methodprevalence) # 3. SCRUB校正 scrub_res - run_scrub(ps) # 4. FEAST验证 feast_res - run_feast(scrub_res$corrected) # 保存结果 save_results(scrub_res, feast_res, output_dir) } # 实际调用 clean_microbiome( data/otu_table.csv, data/metadata.csv, results/cleaned )常见问题处理阴性对照信号过强检查实验环节考虑增加过滤严格度SCRUB收敛失败尝试减小learning_rate参数FEAST结果不稳定确保源样本数量足够≥3经过这套流程处理后的数据可显著提高下游α/β多样性分析、差异物种检测等结果的可靠性。在实际项目中建议保存中间结果并记录每个步骤的过滤统计量便于追溯和复现分析过程。

相关新闻