文献题目:Orchestrating single-cell analysis with Bioconductor
发表时间:2020 Feb
发表杂志:Nature Methods
长文慎入,可以收藏之后慢慢阅读。
最近的技术发展已经能够在单个细胞中分析大量的基因组特征。然而,单细胞数据存在独特的挑战,需要开发专门的方法和软件,以成功获得生物学发现。Bioconductor项目迅速发展满足这些需求,使用开源软件,并以R包的形式分布。以最先进的计算方法、标准化的数据基础应用和交互式数据可视化工具为特色,同时我们为用户提供了单细胞分析方法的概述和在线书籍(https://osca.bioconductor.org)
NOTE:这篇文献感觉很专业,有很多专业名词(统计模型之类的)。这篇文献主要是让大家对单细胞分析有一个大体的认识,以及对每个重要步骤涉及的软件包有个简单的了解。个人认为可以挑选部分重点理解,不需要全文理解。
自2001年以来,Bioconductor项目吸引了来自不同科学领域的开发者和用户,推动了使用R语言分析高通量生物数据的开源软件包的开发。虽然bulk profiling分析技术已经产生了重要的科学发现和方法,但最近测序技术在单细胞分辨率的样品分析方面的进展也已经出现,可以回答以前难以理解的科学问题。Bioconductor已经拥有了大量用于分析bulk profiling数据的软件包,最近它已经扩展到单细胞数据分析领域,并且快速增长(图1)。
目前的单细胞检测既可以是高通量,测量成千上万个细胞,也可以是高维,测量每个细胞内的数千个特征。与bulk分析相比,有两个单细胞数据的特征:(1)观测的数量规模的增加(即细胞);(2)由于所测性状的生物波动或定量小分子的灵敏度有限,数据的稀疏性增加。这些独特的特征推动了单细胞数据分析统计方法的发展。此外,随着单细胞技术的成熟,不断增加的复杂性和数据量要求在数据访问、管理和基础构架方面进行根本性的改变,同时使用专门的方法来促进可塑化的分析。
为了应对这些挑战,为单细胞数据分析开发的软件包已经成为Bioconductor项目的一个组成部分。在这里,我们主要关注单细胞RNA-seq (scRNA-seq)数据的分析,其中提到的许多概念也适用于其他类型的单细胞分析。我们涵盖了数据导入、存储单细胞分析数据的常用数据容器、将原始单细胞数据转换为适合下游分析的数据、交互式数据可视化和下游分析的快速和稳定的方法。为了帮助用户利用这个框架,我们提供了一本在线书籍(https://osca.bioconductor.org),其中包括安装、帮助、与scRNA-seq分析的特定方面相关的专门主题,以及分析各种scRNA-seq数据集的完整工作流程。
数据基本构架
Bioconductor最大的优势之一是可以为复杂的、高度相互依赖的数据集提供通用表示和基本构架。Bioconductor使用标准化的数据容器来实现不同软件包的模块化和互操作性,同时保持终端用户的可访问性。为此,Bioconductor采用了一种灵活的面向对象范式,称为S4,能够将多个对象组件封装到一个实体中,具有丰富的、用户友好的界面。这种方法对生物分析特别重要,因为在整个分析过程中,在原始数据和metadata之间往往有许多需要保存的联系。
SingleCellExperiment容器
Bioconductor使用SingleCellExperiment class存储单细胞实验数据和metadata(图2)。原始数据,如count矩阵,以一个或多个矩阵的形式存储在分析组件中,其中行代表特征(例如,基因和转录本),列代表细胞。此外,原始数据的低维表示,以及描述细胞或特征的metadata也可以存储在SingleCellExperiment对象中。通过SingleCellExperiment class,所有与scRNA-seq实验相关的数据和结果都可以存储在单一实体中。通过标准化单细胞数据和结果的存储,Bioconductor促进了单细胞分析包之间的互操作性,促进了复杂分析工作流程的开发和使用。
数据处理
本节的目的是描述大多数scRNA-seq分析中常见的数据处理步骤。这些初步的步骤遵循一个一般的工作流程(图3):(1)预处理原始测序数据,产生每个基因(或转录本)每个细胞的表达count matrix,然后创建一个SingleCellExperiment对象;(2)应用质量控制指标,并随后去除低质量的细胞,否则会干扰下游分析;(3)将counts转化为标准化表达值,消除细胞和基因特异性偏差;(4)进行特征选择,选择生物学相关基因进行下游分析;(5)采用降维方法,压缩数据,降低噪声;(6)如果需要,整合多个批次的scRNA-seq数据。
预处理
对于scRNA-seq数据,预处理包括测序reads与参考转录组比对,并将其量化为每个细胞和每个基因的表达值count matrix。虽然各种预处理方法可以用命令行进行,Bioconductor包例如scPipe和scruff 等提供一个预处理流程,完全是用R语言进行的。预处理工作流程使用命令行软件,Bioconductor包DropletUtils和tximeta 可以从各种工具导入结果,包括细胞Cell Ranger(10X Genomics),Kallisto-Bustools和Alevin。值得注意的是,Alevin和Kallisto等伪对齐方法显著减少了计算时间和内存使用。
在以上所有的工作流程中,最终的结果是将一个count matrix导入R,并创建一个SingleCellExperiment对象。对于特定的文件格式,我们可以使用DropletUtils(用于10X数据)或tximeta(用于伪对齐方法)包中的专用方法。
质量控制
scRNA-seq数据中低质量的文库可能源于多种原因,如分离过程中细胞损伤或文库制备失败(例如,逆转录或PCR扩增效率低下)。这些通常表现为“细胞”有低counts总数,表达的基因很少和高线粒体reads比例。这些低质量的库是有问题的,因为它们可能导致下游分析中的错误结果。
对于基于液滴的方法,通常排除不完全包含一个细胞的液滴数据。DropletUtils包根据观察到的每个微滴条形码的频率,以及它们各自的表达谱与环境溶液的比较,区分空孔的微滴和含有细胞的微滴。它还可以去除基于液滴的实验中barcode交换产生的artificial细胞。类似地,可以使用scran或scds包来识别可能包含多个细胞(doublets)的液滴,它们将有问题的液滴与模拟doublets的表达曲线进行比较。
在排除空液滴并识别出潜在的doublets液滴后,还要过滤掉含有潜在受损细胞或read覆盖不好的液滴。文库的大小(定义为每个细胞的所有相关特征的counts之和)是一个经常用于过滤的指标。文库较小的细胞更有可能是低质量的,因为在文库制备过程中,RNA丢失了,要么是由于细胞裂解,要么是由于cDNA捕获和扩增效率低下。另一个指标是每个细胞中表达特征的数量,定义为该细胞中非零counts的内源性基因的数量。表达基因很少的细胞可能质量较差,如多样转录本细胞群尚未成功捕获。线粒体基因组中基因的reads比例也可以使用,因为高比例表明可能由于细胞损伤而丢失细胞质RNA,其中线粒体比单个转录分子大,不太可能通过细胞膜上的孔逃脱。scater包简化了这些指标的计算。
标准化
在scRNA-seq数据中,常常可以观察到文库之间覆盖率的系统性差异,例如测序深度的差异。这通常是由于跨细胞的cDNA捕获或PCR扩增效率的差异,这是由于很难用最少的起始材料获得一致的文库。Normalization的目的是消除这些系统性差异,使它们不会干扰细胞间表达谱的比较,例如在聚类或差异表达分析期间。
在这里,我们考虑单个scRNA-seq实验中缓和系统差异在的方法,以类似的方式偏向所有基因。这包括,例如,测序深度的变化,以一定的factor衡量所有基因的预期覆盖范围。文库大小normalization是执行scaling标准化的最简单策略,在scater中实现。虽然这种方法假设任何一对细胞之间的差异表达基因(DEGs)不存在不平衡,但由于对聚类分离的影响很小,标准化的准确性通常不是探究性scRNA-seq分析的主要考虑因素。
然而,准确的标准化对于每个基因统计的估计和解释是很重要的,如在DEGs中。当多个细胞类型出现在给定的scRNA-seq dataset中时,最常观察到系统地改变对数倍变化的组合偏差。通过解卷积(deconvolution)进行的归一化克服了这个问题,它汇集了来自许多细胞的counts,增加counts的大小,以进行精确的size factor估计,然后解卷积为每个细胞的因子进行标准化,在scran中实现。
另外,BASiCS、zinbwave和MAST提供了基于模型的normalization方法,这些方法不仅可以处理此类文库的大小或组成的偏差,而且还可以根据已知的协变量或其他可能隐藏有生物学意义变异的内在技术因素进行调整。这些方法支持更复杂的scaling策略,如数据的非线性转换。
Imputation
针对单细胞检测中数据稀疏性的问题,提出了一种Imputation方法。由于scRNA-seq实验经常不能测量某些基因的表达,导致数据中大量的零,zero-inflated的模型已经被开发出来。然而,零"膨胀"的程度因试验类型或方案的不同而不同,这表明最佳的方法是依赖于试验的。此外,imputation用于scRNA-seq数据已被证明会产生假阳性结果,并降低细胞类型特异性标记物的再现性。
特征选择
scRNA-seq数据的探索性分析通常旨在描述细胞间的异质性。诸如聚类和降维等过程,根据它们的基因表达谱来比较细胞。然而,在这些计算中使用的基因的选择对下游方法的行为和性能有重大影响。特征选择方法的目的是在去除含有随机噪声的基因的同时,识别含有系统生物学有用信息的基因。通过限制对这些基因的分析,有趣的生物结构得以保留,而不保留结构模糊的variance。此外,关注这样一个转录组子集可以显著减少数据集的大小,提高下游分析的计算效率。见参考文献50,51的特征选择方法的综述。
特征选择最简单的方法是根据它们在群体中的表达来选择最variable的基因。这假定真正的生物差异将表现为受影响基因的变异增加,而其他基因仅受技术噪音或不感兴趣的生物变异基线水平的影响。但是对数变换并不能达到完全的variance稳定化。这意味着基因的variance更多地受其丰度的影响,而非潜在的生物异质性。因此,计算每个基因的variance特征选择需要建模mean-variance之间的关系。scran、BASiCS和scFeatureFilter等包采用了这种方法。
也有人提出了不同的variance指标,比如基于variance选择基因,这种度量标准用来量化每个基因在细胞间持续表达的零模型中的匹配程度。与基于variance的特征选择方法,该方法是基于原始的唯一分子标识符(unique molecular identifier, UMI)counts来计算偏差的,因此该方法对标准化带来的误差不那么敏感。偏差可以使用glmpca包计算。
降维
降维的目的是减少数据中单独维数。这是可能的,因为不同的基因是相关的(如果他们受到相同的生物过程的影响)。因此,我们不需要为单个基因存储单独的信息,而是可以将多个特征压缩到一个维度。因此,降维方法创建低维,旨在保留数据集中最有意义的结构。这还有一个额外的好处,就是通过对多个基因进行平均,可以获得数据中更精确的表示(例如,与特定信号通路相关),从而减少噪音。下游分析的计算工作也减少了,因为计算只需要执行几个维度,而不是数千个基因。更 aggressive的降维方案产生二维或三维,可以直接可视化,以协助解释结果。
scRNA-seq数据降维的常见的第一步是主成分分析(PCA)。主成分分析法发现高维空间中捕捉最大数量variation的轴(主成分,PCs)。顶部PCs捕获数据集中异质性的主要factors,因此可以用于有效地进行降维。这利用了经过充分研究的PCA的理论特性——即,由顶部PCs形成的低排序近似是给定矩阵排序的原始数据的最佳近似(这句话不会翻译,原话: that a low-rank approximation formed from the top PCs is the optimal approximation of the original data for a given matrix rank.)。考虑到这个特性,使用顶部PCs执行的计算有助于数据压缩和去噪,其中包括诸如聚类等下游分析。
无论采用何种方法,可视化的降维必然包括丢弃信息和扭曲细胞之间的距离。因此,直接分析用于绘图的低维坐标是不明智的。相反,这些图只应用于解释或传达基于更准确、更高级的数据表示的定量分析结果。这确保了分析可以利用压缩到二维空间时丢失的信息。例如,考虑到在二维图上可视化的聚类与使用顶部PC进行聚类识别的差异,人们将倾向于选择后者。
SingleCellExperiment class有一个专门的组件reducedDims,用于存储试验数据的低维表示(图2)。scater包为降维算法提供了方便的包装函数,包括主成分分析(PCA)、t-SNE和UMAP。Diffusion map方法可以通过destiny包获得。zinbwave和glmpca包分别使用零膨胀负二项式模型和多项式模型,用于基于模型的降维方法,可以考虑混杂因素。
整合数据
由于限制,大型scRNA-seq项目通常需要跨多个批次生成数据。然而,不同批次的处理往往存在不可控制的差异,如操作人员的变化或试剂质量的差异。这导致不同批次细胞中观察到的表达水平存在系统性差异。此外,随着scRNA-seq数据的普及和参考数据集的可用,在分析环境中遇到这样的混杂因素将是不可避免的。这样的批量效应是有问题的,因为它们可能是数据异质性的主要驱动因素,掩盖了相关的生物学差异,并使结果的解释复杂化。
虽然可以使用通用线性建模框架来整合不同的数据集,但这些框架在scRNA-seq实验背景中可能不是最优的。这通常是由于潜在的假设,即细胞群的组成要么是已知的,要么是不同批次的细胞是相同的。为了克服这些限制,定制的方法已被开发用于修正单细胞数据的批次效应,不需要对群体组成的先验知识。这使得在通常无法获得这些知识的情况下,可以对scRNA-seq数据进行探索性分析。
在校正批次效应之前,检查批次效应的存在是很重要的。这可以通过对所选基因的对数表达值执行PCA分析来检查,然后进行基于图的聚类以获得population结构。理想情况下,聚类应该由来自重复scRNA-seq数据集的细胞组成。然而,如果聚类由单个批次的细胞组成,这表明由于技术差异,同一类型的细胞被人为分离。像t-SNE和UMAP这样的方法通常也将显示不同批次的细胞之间的强烈分离,这与这种聚类结果一致。值得注意的是,当涉及的批次可能确实包含独特的亚群时,这种依赖混杂程度的判断可能并不有效,但仍然是一个有用的初步估计。
通过预先标记细胞(参见“Annotation”一节)的监督整合可以通过软件包(如scMerge和scmap)使用,以指导对基因表达值进行批次校正的应用或调整低维表示。另一方面,非监督方法,如相互最近邻(MNN),可以识别来自不同批次的细胞对,这些细胞对属于彼此的最近邻集合。因此,MNN pairs细胞间的差异可以用来估计批次效应,减去它就可以得到批次校正值。至关重要的是,通过改变考虑的k近邻的数量,可以调整批次校正,其中较高的k值导致更包容的subpopulations跨批次匹配。这种基于MNN的方法在batchelor包中实现。
批次校正的成功取决于生物异质性的保存,因为可以设想一种简单地将所有细胞聚集在一起的校正方法,这将实现完美的混合,但也抛弃了感兴趣的生物学现象。为此,CellMixS包可用于评估批次间细胞混合的程度。另一个有用的启发式方法是将合并数据中标识的聚类与每个批次标识的聚类进行比较。理想情况下,我们应该看到一个多对一的映射,其中跨批次聚类嵌套在批次内聚类中,表明校正后保留了批次内的结构。然后可以计算Rand指数等,其中较大的Rand指数更为可取。
下游统计分析
方法和工作流程的选择可以根据研究的具体目标和所使用的实验方法而有很大的不同。在数据处理之后,Bioconductor可以使用工具从单细胞数据中产生新的生物学发现,这些工具可与SingleCellExperiment class进行互操作,并与细胞数量成比例。我们的在线图书(https://osca.bioconductor.org)为用户提供了下游分析和可视化的工作流程和案例研究(图4)。
聚类
聚类用于scRNA-seq数据分析,以经验定义具有相似表达谱的细胞群。这使得我们可以用更容易理解的离散标签来描述种群体异质性,而不是试图去理解细胞真正所在的高维空间。在对差异表达的marker基因进行注释后,这些簇就可以作为更抽象的生物学概念的代表,如细胞类型或状态。
有必要强调clusters和细胞类型之间的区别。前者是经验构建,而后者是真正生物学上的定义。因此,认识到clusters就像显微镜一样,只是一种探索数据的工具是很有帮助的。它可以通过改变聚类参数的分辨率来放大和缩小,并对不同的聚类进行实验,从而获取数据的不同视角。
基于图的聚类对于聚类大型scRNA-seq数据集是一种灵活且可扩展的技术。图中每个节点都是一个细胞,每个细胞在高维空间中与其最近邻居(NN)相连。edges的权重是基于所涉及的细胞之间的相似性,相关细胞的权重更高。像louvain和leiden这样的算法可以用来识别细胞簇。
BiocNeighbors提供了用于精确和估计最近邻检测的方法,scran构建实际的图。值得注意的是,对于大型scRNA-seq数据集,近似NN方法在精确度上的损失是可以接受的,但大大改善了运行时间,并具有平滑噪声和稀疏性的附加优势。其他方法包括SIMLR包,它使用多个核心程序来学习最适合数据的细胞之间的距离度量,然后用于聚类和降维。对于大数据,mbkmeans包实现了k-means算法的可扩展版本。最后,SC3和clusterExperiment包计算从多个参数化中导出的共识聚类。
其中许多包允许对聚类结果进行定量和可视化评估,以及专门为数据可视化和评估而设计的外部包(例如clustree)。聚类也可以进行独立评估(通过评估诸如聚类模块化或轮廓系数等指标)。
差异表达
差异基因表达(DGE)分析可用于识别marker基因,驱动聚类之间的分离。这些marker基因允许我们根据它们的功能注释给每个聚类赋予生物学意义。在最明显的情况下,每一簇的marker基因是与特定细胞类型相关的先验知识,允许聚类作为细胞类型身份的代表。同样的原理也可用于检测更细微的差异,如激活状态或分化状态。对细胞类型注释进行DGE分析的另一种选择是基因集富集分析,它将基因分组到预先指定的基因模块或生物通路中,以促进生物学解释。我们将在“Annotation”一节中讨论这个主题。
DGE还可以用于比较给定群体中不同条件下的单个细胞,例如时间或处理,同时调整协变量(例如,患者识别或批次效应)。
在不同的差异表达分析方法中,有两种常见的方法最为突出。第一种方法改进了最初为批量RNA-sequencing(edgeR,DESeq2和limma-voom)设计的DE分析框架,这些框架已经通过各种方式过渡到scRNA-seq方法,例如通过创建伪批量RNA-seq配置文件。另外,在评估差异表达(DE)之前,可以使用zinbwave等方法来降低在离散度估计和模型拟合步骤中观察到的scRNA-seq数据中的多余的零,从而进一步使基于批量RNA-seq的DE方法适应于scRNA-seq数据。
第二类方法是为单个细胞数据量身定制的,因为提出的统计方法直接模拟zero-inflation成分,经常在scRNA-seq数据中观察到。这些方法明确地将基因表达分为两个成分:离散成分,它描述了离散成分的频率(零与非零表达);连续成分,其中基因表达水平被量化。虽然这里提到的所有方法都可以测试连续成分的差异,但只有第二类方法可以明确地建模离散分量,从而测试表达频率的差异。为此,MAST包使用了一个障碍模型框架,而scDD、BASiCS和SCDE分别使用贝叶斯混合模型和层次模型。总之,这些方法能够提供一套更广泛的测试功能,并可直接用于SingleCellExperiment class中包含的scRNA-seq数据。
轨迹分析
异质性也可以被建模作为由生物过程(如细胞分化)引起的连续谱。一种针对单细胞降维分析的专门应用——轨迹分析或伪时间推断——使用系统发育方法将细胞沿着(通常是时间连续的)轨迹排序,如随时间的发展。推断出的轨迹可以识别细胞状态之间的转变、分化过程或动态细胞过程中"分叉"的事件。
轨迹推断的现代方法将大量参数化的需要降至最低,并可以测试不同拓扑(例如,Monocle、LineagePulse和switchde)的差异基因表达。此外,一些用于轨迹推断的Bioconductor包(如slingshot、TSCAN、Monocle、cellTree和MFA)最近被证明具有出色的性能。由于不同的方法对于相同的数据集可能产生截然不同的结果,因此必须测试一套方法和参数来评估稳定性。Bioconductor通过提供标准化的数据表示,如SingleCellExperiment class对象,方便了此类测试。
注释
scRNA-seq数据分析中最具挑战性的任务无疑是对结果的解释。获得细胞clusters是相当简单的,但是要确定每一个细胞cluster所代表的生物状态就比较困难了。这样做需要弥合当前数据集和先前生物学知识之间的差距,而后者并不总是以一致的方式可用。因此,scRNA-seq数据的注释通常是手动的,这是分析工作流程中的一个常见瓶颈。为了加快这一步骤,可以应用各种计算方法,利用先验信息为无特征的scRNA-seq数据集分配意义。最明显的先验信息来源是与特定生物过程相关的基因库(例如,来自GO或KEGG集合)。另一种方法是直接将表达谱与已发表的参考数据集进行比较,其中每个样本或细胞都已经由领域专家用其假定的生物学状态进行了注释。
基因集富集
经典的基因集富集(GSE)方法具有不需要参考表达值的优点。这在处理从文献或其他生物学知识的定性形式中获得的基因集时特别有用。在细胞注释方面,GSE通常对一组细胞(或cluster)识别富集在这些细胞中的基因集(或通路)。然后,富集通路可以用来推断细胞类型(或状态)。
Bioconductor提供专用的包,以编程的方式从数据库(如MSigDB, KEGG, Reactome和gene Ontology (GO))访问预定义的基因签名。EnrichmentBrowser简化了从这样的存储库收集编译基因集。这种先验知识用于测试scRNA-seq数据中特定基因模块的富集,通常适用于最初为bulk数据开发的现有基因集分析方法。EnrichmentBrowser、EGSEA和fgsea包都提供了一些经典GSE分析版本。在MAST、AUCell和slalom中实现了GSE测试的替代方法。
自动分类细胞
一种概念上简单的注释方法是将单细胞表达谱与先前注释的参考数据集进行比较。然后,可以根据最相似的参考样本或一些其他相似性指标,将标签分配给非特征数据集中的每个细胞。这是一个常见的分类挑战,可以通过标准机器学习技术来解决,如随机森林和支持向量机。任何已发表和标记的RNA-seq数据集(bulk或单细胞)都可以作为参考,尽管其可靠性在很大程度上取决于最初分配标记的原作者的专业知识。
SingleR 方法为细胞类型注释提供了一个自动化系统。SingleR根据Spearman等级相关性最高的参考样本对细胞进行标记,因此可以认为是k-nearestneighbor分类的一种基于rank的变体。为了减少干扰,SingleR识别成对标记之间的marker基因,并仅使用这些markers计算相关性。包中包含了一些内置的参考数据集,这些数据集来自各种来源和组织,包括免疫基因组计划(ImmGen), ENCODE和免疫细胞表达数据库(DICE)。
Accessible analysis
随着人们对单细胞检测数据的兴趣日益浓厚,Bioconductor不仅开发了分析数据的方法和软件,而且优先考虑使用户和开发者都更容易访问数据本身和数据分析工具。具体来说,community提供了数据包,其中包含公开发布的数据和模拟数据,以及交互式数据可视化工具。使单细胞数据和数据分析工具更容易获得,允许研究人员在他们自己的工作中利用这些资源,并使数据分析"民主化"。
基准测试
随着新的单细胞分析、统计方法和相应软件的开发,促进数据集的公布、重现现有的分析以及能够在新的和现有的工具之间进行比较变得越来越重要。Bioconductor存储了一组数据包,专注于提供可访问的、带有良好注释的数据版本,以便进行分析,以及可以用来重现图片和展示数据特征。
为了方便在Bioconductor上查询已发布的数据包,ExperimentHub包允许使用标准化接口对已发布的数据集进行编程访问。值得注意的是,scRNAseq包提供了对来自各种背景的高质量scRNA-seq数据的直接访问。此外,模拟数据对于基准测试方法是有用的。
另外,splatter 包可以模拟包含多种细胞类型、批次效应、不同水平dropout事件、差异基因表达和轨迹的scRNA-seq数据。splatter包使用了它自己的模拟框架,并使用不同的生成模型包裹了其他模拟框架,从而为单细胞数据模拟提供了全面的资源。
为了促进再现性基准比较单细胞的性能评估方法,软件开发提供计算和存储基础框架,将不同的方法应用于一个数据集的结果。SummarizedBenchmark和CellBench包提供接口,存储metadata和评价指标。
交互式数据可视化
web技术的成熟为交互式数据探索开辟了新的途径,shiny是一个促进rich图形化开发的R包用户界面。iSEE和singleCellTK包为通过internet浏览器交互显示scRNAseq数据集提供了全功能的应用程序,如果实例托管在web上,那么就不需要编程经验。这两个软件包都直接与SingleCellExperiment数据容器接口,以实现scRNA-seq分析结果。
最后是展望部分,我就不翻译了,都是一些很笼统的话了。有兴趣的同学可以自己阅读。