microeco包与LEfSe分析结果差异解析及优化方案
背景介绍
microeco是一个强大的R语言微生物组分析工具包,它整合了多种微生物组数据分析方法,其中包括LEfSe(Linear discriminant analysis Effect Size)分析功能。LEfSe是一种广泛用于微生物组数据差异分析的算法,能够识别不同分组间具有统计学显著差异的生物标记物。
问题发现
用户在使用microeco包进行LEfSe分析时,发现与原始LEfSe软件包(Python版本)的结果存在两个主要差异:
- LDA值(线性判别分析得分)大小不一致,microeco计算得到的LDA值普遍偏大
- 部分物种的富集方向(在哪个组别中富集)与Python版本结果相反
原因分析
经过深入调查,发现造成这些差异的主要原因如下:
1. 数据标准化处理差异
在原始LEfSe软件中,使用format_input.py
脚本时通过-o 1000000
参数指定了标准化后的最大值不超过1,000,000。而microeco包内部默认也是将丰度乘以1,000,000进行标准化,但处理逻辑有所不同:
- 当输入数据已经是百分比形式(0-100范围)时,microeco直接读取这些值作为相对丰度
- 而LEfSe的Python版本会先将输入数据转换为0-1范围的相对丰度,再乘以1,000,000
2. 中位数与均值比较的差异
对于某些低丰度物种,当在两个组别中的中位数都为0时,microeco的比较结果可能出现混乱(可能依赖于组别顺序)。而LEfSe的Python版本在这种情况下可能更倾向于使用均值进行比较。
解决方案
针对上述问题,microeco提供了两种解决方案:
方案一:数据读取时进行标准化
在调用mpa2meco
函数时,设置rel = TRUE
参数,将输入数据转换为0-1范围的相对丰度:
ds_comp <- mpa2meco("abundance_table.txt",
sample_table = "group.txt",
rel = TRUE,
auto_tidy = TRUE)
方案二:调整LEfSe标准化参数
将lefse_norm
参数从默认的1,000,000调整为10,000:
ds_comp <- mpa2meco("abundance_table.txt",
sample_table = "group.txt",
auto_tidy = TRUE)
lefse_res <- trans_diff$new(dataset = ds_comp,
lefse_norm = 10000,
method = "lefse",
p_adjust_method = "none",
alpha = 0.05,
group = "group",
remove_unknown = F)
最佳实践建议
-
参数一致性:为了与LEfSe Python版本结果一致,建议同时采用以下设置:
lefse_norm = 10000
p_adjust_method = "none"
alpha = 0.05
-
低丰度物种处理:对于中位数都为0的物种,建议结合生物学意义和其他统计指标综合判断其重要性。
-
结果验证:对于关键物种的富集方向,建议通过可视化方法(如箱线图)验证其在不同组别中的分布模式。
未来优化方向
microeco开发团队已注意到这些问题,并计划在后续版本中:
- 优化
lefse_norm
参数的默认值,使其更符合LEfSe原始实现 - 改进中位数比较逻辑,特别是对于全零情况的处理
- 增加更多结果验证和可视化功能,方便用户交叉验证分析结果
结论
通过理解microeco与LEfSe Python版本在数据标准化和统计比较方法上的差异,用户可以更准确地解释分析结果,并根据研究需求选择合适的参数设置。microeco团队将持续优化这一功能,为用户提供更可靠、更一致的微生物组差异分析工具。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考