背景
MarkerMAG 是一个专为微生物基因组学研究设计的软件工具,主要用于从宏基因组数据中识别和链接16S rRNA基因到元基因组组装的基因组(MAGs)。它通过将已知的16S rRNA基因标记与组装的基因组进行匹配,从而帮助研究人员更好地理解微生物群落的结构和功能。
image.png
作用原理
1.16S rRNA基因识别:
MarkerMAG 使用特定的工具(如 Barrnap 或 Usearch)从输入的宏基因组数据中识别出16S rRNA基因序列。
2.基因组组装和注释:
软件将识别出的16S rRNA基因与基因组组装的基因组(MAGs)进行匹配。这一过程通常包括将短读段数据组装成更长的基因组片段,并注释这些基因组片段以识别功能基因和标记基因。
3.链接和聚类:
MarkerMAG 通过将16S rRNA基因序列链接到相应的MAGs,帮助研究人员理解哪些微生物物种存在于样本中,以及它们的潜在功能。软件还可以对识别出的基因进行聚类,以减少冗余并提高分析的精度。
使用场合
1.宏基因组学研究:
MarkerMAG 广泛应用于宏基因组学研究中,特别是在研究复杂微生物群落的结构和功能时。它帮助研究人员从环境样本中提取微生物DNA,并分析这些DNA以了解微生物群落的组成。
2.环境微生物学:
在环境微生物学研究中,MarkerMAG 可用于分析土壤、水体或其他环境样本中的微生物群落,帮助理解微生物在生态系统中的作用。
3.临床微生物学:
MarkerMAG 也可以用于临床微生物学研究,帮助分析人体微生物组(如肠道、口腔微生物组)中的微生物组成,进而研究其与健康和疾病的关系。
使用目的
1.识别微生物物种:
MarkerMAG 的主要目的是从宏基因组数据中识别微生物物种。通过链接16S rRNA基因与MAGs,研究人员可以确定哪些微生物存在于样本中。
2.了解微生物功能:
除了识别物种,MarkerMAG 还帮助研究人员注释基因组中的功能基因,从而了解微生物的潜在功能。这对于研究微生物在环境中或人体内的作用至关重要。
3.优化和简化数据分析:
MarkerMAG 提供了一个自动化的工作流程,简化了宏基因组数据的分析过程。通过自动识别、链接和聚类16S rRNA基因,研究人员可以更高效地处理大量数据,并获得更准确的分析结果。
总结
MarkerMAG 是一个强大的工具,专为宏基因组学研究设计,通过识别和链接16S rRNA基因与MAGs,帮助研究人员识别微生物物种,了解微生物功能,并优化和简化数据分析过程。它广泛应用于环境微生物学、临床微生物学和其他相关领域,为理解微生物群落的结构和功能提供了重要支持。
Q & A环节
Q:16S rRNA不是本身可以比对silva数据库得到注释结果吗,是因为注释的结果不准确?
A:16S rRNA 基因确实可以通过比对 SILVA 等数据库来进行注释,以识别微生物物种。然而,MarkerMAG 的作用不仅仅是简单的16S rRNA基因注释,它解决了一些传统16S rRNA基因分析方法的局限,并提供了更全面和准确的微生物物种鉴定和功能分析。
背景与传统方法的局限
16S rRNA 基因注释:
通过16S rRNA基因序列比对 SILVA、Greengenes 等数据库,可以对微生物进行分类学注释。然而,这种方法通常只能提供属(genus)或科(family)级别的分类信息,对于物种级别的分辨率较低。
16S rRNA 基因序列不能提供微生物的功能信息,仅能用于分类学鉴定。
基因组组装与注释:
宏基因组数据分析包括对所有微生物基因组的片段进行组装(即 MAGs,metagenome-Assembled Genomes)和注释,提供了更高的分辨率和更全面的功能信息。
MarkerMAG 的核心功能
MarkerMAG 的主要目的是整合 16S rRNA 基因注释与 MAGs 组装和注释,从而提供更精确、更全面的微生物物种鉴定和功能分析。其核心功能包括:
链接 16S rRNA 基因与 MAGs:
通过将16S rRNA基因序列与基因组组装的片段(MAGs)进行匹配,MarkerMAG 可以准确地将分类学信息与完整基因组数据相结合。这一过程可以提高物种鉴定的分辨率,甚至达到物种级别。
提高注释准确性:
与单纯的16S rRNA基因注释相比,通过 MAGs,研究人员可以获得更高分辨率的分类学信息,同时结合基因组中的其他基因信息,可以提供更准确和全面的功能注释。
整合多种数据来源:
MarkerMAG 不仅利用16S rRNA基因序列,还整合了基因组组装数据,使得微生物物种鉴定和功能注释更为全面。这对于研究微生物在复杂生态系统中的作用,或在健康和疾病中的作用非常重要。
具体例子
假设你有一个环境样本,其中包含大量不同微生物的 DNA。通过宏基因组测序,你可以获得这些微生物的全部基因组数据。使用传统的16S rRNA基因分析,你可以确定样本中有哪些属或科的微生物,但无法详细了解每种微生物的功能。
使用 MarkerMAG,你可以:
识别 16S rRNA 基因序列:从样本中提取和识别 16S rRNA 基因序列。
链接到 MAGs:将这些 16S rRNA 基因序列与宏基因组组装的片段进行匹配,链接到具体的 MAGs。
全面注释:对 MAGs 进行分类学和功能注释,提供关于微生物物种和其潜在功能的详细信息。
通过这种方式,MarkerMAG 提供了比传统方法更高分辨率和更全面的信息,帮助研究人员更准确地识别和分析微生物物种及其功能。
总结
MarkerMAG 不仅仅依赖于16S rRNA 基因的分类学注释,它通过整合16S rRNA 基因与 MAGs,提供了更高分辨率的物种鉴定和更全面的功能注释。这使得它在复杂微生物群落的研究中,尤其是在生态系统和临床样本的分析中,具有显著的优势。
Q:既然我做了MAGs 为什么还要做16S rRNA测序的扩增子分析呢?
A:在微生物基因组学研究中,16S rRNA基因测序和宏基因组组装(MAGs)各自有其独特的优势和局限性。结合使用这两种方法可以提供更全面和准确的微生物群落分析。
16S rRNA测序和宏基因组组装的优缺点
16S rRNA测序
优势:
简便快捷:16S rRNA基因测序是标准化、成本较低的技术,可以快速提供微生物群落的组成信息。
高通量:能够处理大量样本,是研究多样性和微生物群落动态变化的有效方法。
数据库丰富:有大量16S rRNA基因序列的参考数据库(如SILVA、Greengenes),方便进行分类学注释。
局限:
分辨率有限:通常只能提供属或科级别的分类信息,物种级别的分辨率较低。
功能信息不足:无法提供关于微生物功能的信息,仅能用于分类学鉴定。
宏基因组组装(MAGs)
优势:
高分辨率:可以重建整个基因组,从而提供物种级别甚至亚种级别的分类信息。
功能分析:能够获得微生物的全部基因组信息,提供全面的功能注释,了解微生物的代谢潜力和生态功能。
局限:
成本较高:宏基因组测序和组装的成本较高,数据处理复杂,计算资源需求大。
组装难度:复杂样本中的基因组组装可能不完全,特别是对于稀有或低丰度的微生物,可能无法完整组装出基因组。
为什么要结合使用16S rRNA测序和宏基因组组装
全面性:16S rRNA测序提供微生物群落的快速概览,而宏基因组组装提供详细的分类学和功能信息。两者结合使用可以得到更全面的微生物群落分析。
互补性:16S rRNA测序可以作为初步筛选和评估的方法,帮助识别样本中主要的微生物群体。宏基因组组装则可以对这些群体进行深入分析,提供更高分辨率的分类信息和功能注释。
验证与补充:16S rRNA测序结果可以用来验证宏基因组组装的准确性和完整性。反之,宏基因组组装的结果也可以补充16S rRNA测序无法提供的功能信息。
数据整合:结合使用这两种方法,可以通过MarkerMAG这样的工具,将16S rRNA基因序列与宏基因组组装的基因组进行链接,增强数据整合和分析的能力。
实际应用中的例子
环境微生物学:在研究土壤或水体微生物群落时,16S rRNA测序可以快速识别主要的微生物群体,而宏基因组组装则可以进一步分析这些群体的功能潜力,如氮循环、碳固定等。
人类微生物组研究:在肠道微生物组研究中,16S rRNA测序可以提供健康和疾病状态下微生物群落的变化趋势,而宏基因组组装可以深入分析特定微生物的代谢潜力,帮助理解其对宿主健康的影响。
总结
结合使用16S rRNA测序和宏基因组组装的方法,可以利用两者的优势,提供更全面、准确和深入的微生物群落分析。这种整合方法在环境微生物学、人类微生物组研究以及其他相关领域具有广泛应用,为研究微生物群落的结构和功能提供了强有力的工具。
软件下载
使用conda 安装。
测试问题
使用测试数据测试数据时,发现整个流程根本跑不通。不知道是时间久了没人维护还是conda中依赖的软件版本不对。
整个流程源代码使用python撰写。下面是对脚本的修改内容:
1.软件使用barrnap进行rRNA预测,barrnap是一款可以预测rRNA的软件。barrnap源代码是使用perl撰写,其中barrnap在调用bedtools时,有一个-name的参数写成了-name+。因为是使用conda直接安装的MarkerMAG以及依赖的软件,所以不知道是barrnap的问题还是作者对barrnap软件进行了更改。(源代码171行)
# my $cmd = "bedtools getfasta -s -name+ -fo '$outseq' -fi '$fasta' -bed '".$bed->filename."'";
my $cmd = "bedtools getfasta -s -name -fo '$outseq' -fi '$fasta' -bed '".$bed->filename."'";
2.主程序的包link_16s.py中,bowtie2根本就没有-xeq这个参数,MarkerMAG的github上有些到软件依赖已经上传conda,不知道是conda依赖的bowtie2不对还是作者的问题,反正会报错。(源代码2506行)这个问题同样在另一个包get_cp_num.py中存在。(源代码2079,2082,2312,2315行)
# bowtie_parameter = '--xeq --local --all --no-unal -N 1 -L 30 --quiet' cailianhe
bowtie_parameter = '--local --all --no-unal -N 1 -L 30 --quiet'
3.还是参数问题,bowtie2-build根本就没有多线程的操作,整个代码中bowtie2都使用了--threads。(源代码2791,2939,2943,3649,3873行)这个问题同样在另一个包get_cp_num.py中存在。(源代码2074,2306行)
# bowtie_build_cmd = 'bowtie2-build --quiet --threads %s -f %s %s' % (num_threads, input_16s_qc, input_16s_qc_no_ext) cailianhe
bowtie_build_cmd = 'bowtie2-build --quiet -f %s %s' % (input_16s_qc, input_16s_qc_no_ext)
4.编码问题报错,主程序的包link_16s.py中的一个函数sort_csv_by_col,报错编码问题,以下是报错内容:
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/HWPROJ2/GB/GB_MICRO/USER/cailianhe/software/miniconda3/envs/MarkerMAG_env/lib/python3.7/encodings/iso8859_15.py", line 15, in decode
return codecs.charmap_decode(input,errors,decoding_table)
SystemError: <built-in function charmap_decode> returned a result with an error set
The above exception was the direct cause of the following exception:
SystemError: decoding with 'iso8859-15' codec failed (SystemError: <built-in function charmap_decode> returned a result with an error set)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/HWPROJ2/GB/GB_MICRO/USER/cailianhe/software/miniconda3/envs/MarkerMAG_env/lib/python3.7/encodings/iso8859_15.py", line 15, in decode
return codecs.charmap_decode(input,errors,decoding_table)
SystemError: <built-in function charmap_decode> returned a result with an error set
The above exception was the direct cause of the following exception:
这个报错没有找到原因,看起来是正常的,这部分脚本单提出来也没有问题,放在脚本里就会报错。尝试使用添加ascii读取也不行【df_in = pd.read_csv(file_in, encoding='ascii')】,使用import chardet包定义读入文件的格式返回的就是ascii。【如果有大佬发现解决办法欢迎私信~】
这个问题的解决办法是重新写了一个sort_csv_by_col函数,不使用pandas读csv的方式。以下是补充的子函数:
def sort_csv_by_col(file_in, file_out, col_header):
try:
with open(file_in, mode='r', encoding='ascii') as infile:
reader = csv.DictReader(infile)
rows = list(reader)
if col_header not in reader.fieldnames:
raise ValueError(f"Column {col_header} does not exist in the input file")
rows_sorted = sorted(rows, key=lambda x: float(x[col_header]), reverse=True)
with open(file_out, mode='w', newline='', encoding='ascii') as outfile:
writer = csv.DictWriter(outfile, fieldnames=reader.fieldnames)
writer.writeheader()
writer.writerows(rows_sorted)
print(f"Sorted data has been written to {file_out}")
except Exception as e:
print(f"An error occurred: {e}")
解决到这里已经差不多了,还有写细小的问题边测边改没有记录。下面是测试:
export PATH=./MarkerMAG_env/bin/:$PATH
export PATH=/MarkerMAG/:$PATH
MarkerMAG link \
-p Demo -r1 demo_R1.fasta -r2 demo_R2.fasta \
-marker demo_16S.fasta -mag demo_MAGs \
-x fa -t 6 -o output_dir
结果解读
1.在基因组层面的已识别链接摘要:
Marker | MAG | linkage | Round |
---|---|---|---|
matam_16S_7 | MAG_6 | 181 | Rd1 |
matam_16S_12 | MAG_9 | 102 | Rd1 |
matam_16S_6 | MAG_59 | 55 | Rd2 |
2.在 contig 层面的已识别链接摘要(附图):
Marker___MAG (linkages) | Contig | Round_1 | Round_2 |
---|---|---|---|
matam_16S_7___MAG_6(181) | Contig_1799 | 176 | 0 |
matam_16S_7___MAG_6(181) | Contig_1044 | 5 | 0 |
matam_16S_12___MAG_9(102) | Contig_840 | 102 | 0 |
matam_16S_6___MAG_59(39) | Contig_171 | 0 | 55 |
image.png
3.已链接的 16S rRNA 基因的拷贝数。
4.单个链接的可视化。
MarkerMAG 支持对已识别链接的可视化(需要 Tablet 软件)。可视化的输出文件(示例)可以在 [Prefix]_linkage_visualization_rd1/2 文件夹中找到。你可以通过双击相应的 ".tablet" 文件,查看链接的读段如何对齐到 MAG 的 contig 和 16S rRNA 基因。在链接的 MAG contig 和 16S rRNA 基因之间加入了 50 个 "N" 碱基。
image.png
看没看懂都点个赞呗~