大家好,我和Elliot代表大家向大家介绍Illumina公司如何利用JMP中的数据处理自动化来加速产品开发流程。首先,我们将介绍Illumina的产品开发流程、公司概况以及产品开发方式。然后,我们将展示自动化数据处理如何融入其中,提供一个典型的工作流程示例,最后总结本次演示的关键要点。
Illumina 通常被认为是一家基因组学仪器的研发和生产公司。如今,我们更进一步,成为一家提供多种组学解决方案和平台的供应商,涵盖基因组学、转录组学和蛋白质组学等领域。我们的旗舰产品,也是高通量测序仪,是我们在 2023 年推出的 NovaSeq X 系列。NovaSeq X 的核心技术是 XLEAP 技术。
XLEAP 技术的一个关键特点是,与我们之前高通量仪器的运行所需的试剂体积相比,得益于该技术,我们在包装以及客户管理和存储方面所投入的精力方面,实现了约 90% 的减少。
之所以能够实现这一点,是因为这里的试剂运输无需使用干冰或冰袋,所有试剂都装在一个单独的箱子里,客户无需费力处理和丢弃包装、干冰包装以及其他类似的包装。箱子里装着客户收到的流通池,每次运行可完成约 300 个循环,每个循环可进行 250 亿次测量。
为了开发这些仪器,我们估计大约需要运行5000个这样的流动池。每次运行流动池时,我们都需要用包含所有试剂的试剂盒来预充仪器,这些试剂盒包含大约20种不同的试剂,每种试剂都是通过分析检测和测序开发的。而自动化数据处理正是在此发挥作用。
我们在此举例说明了如何利用分析方法开发试剂。如您所知,在基于微孔板的分析中,科学家需要进行实验、提取数据、进行数据简化和分析,反复点击、复制粘贴,直到生成报告。此时,即可得出结论并进行下一个实验。您可以重复上述步骤,也可以利用 JavaScript 的特性。
生成一个脚本,用于自动执行数据提取、数据简化和数据处理,并以迭代的方式在重复实验中执行更多此类分析,这显然具有多重优势。首先,节省实验人员的时间。其次,能够在多个实验中迭代执行这些操作,从而加快产品开发流程。此外,由于无需操作员逐个点击、复制粘贴,因此可以减少错误。减少错误意味着我们可以标准化流程。
标准化是实现可复现且稳健流程的关键支柱。即使对于那些脚本编写经验不多的科研人员来说,标准化也是可行的,因为他们可以利用 JMP 的工作流构建器功能以及 JMP 社区提供的资源。只需具备基本的编码经验即可。
让我们通过一个例子来说明如何使用工作流构建器构建可重用的自动化数据处理流程,而无需对 GSR 有太多了解。在 LUNAR,我们经常开发新的测序试剂,并且通常需要开发一种测试方法来测量其活性。假设我们有一个这样的测试:使用深色底物,测试我们的试剂将其转化为荧光产物的能力,然后将该底物置于酶标仪上,测量荧光产物随时间变化的响应曲线。
这种反应通常具有一级动力学特征,因此产物 P 的生成可以用以下方程描述,该方程是时间的函数,并且包含两个重要参数。我们有 Pₘₐₓ,它描述了在时间进程结束时我们获得的最大强度,还有反应速率 k。
我们真正感兴趣的是这个反应速率,也就是哪种试剂的反应速率最高。通常,我们会从酶标仪获得一个软件生成的原始数据文件,通常是 Excel 文件。然后,我们希望使用 JMP 软件来自动处理数据。我们需要导入这个 Excel 数据,并从响应值中减去背景强度数据。
我们想进行指数拟合来确定反应速率常数 k,然后将速率数据提取到 JMP 表格中,以便汇总结果。现在我们将打开 JMP,我将向您演示如何操作。但首先,让我们打开 Excel 文件。这是一个典型的原始格式文件,通常来自酶标仪软件。正如您所看到的,软件已经填充了一些实验细节。
我们已经有了板布局图,但直到第 21 行才能获得实验数据。我们希望能够打开这些数据,用 JMP 处理数据,然后生成一个简洁的摘要。如果我们想为此构建一个自动化工作流程,但又不懂 JSL 代码,需要脚本,可以使用所谓的“工作流构建器”。所有示例均使用 JMP 18 的基础版本。我们之所以在 JMP 项目中演示这些示例,是为了保持代码的条理性和易读性,但您也可以在标准版 JMP 中完成这些任务。
首先,我们需要点击“新建”,然后选择“新建工作流”。这里是工作流平台,需要注意的是,在开始录制之前,点击这里的红色按钮,你执行的每个步骤都会被保存为一个步骤,并生成相应的脚本。最后,你可以将这些步骤串联起来,组成一个完整的脚本供使用。
我们要在这里导入Excel文件,所以我们打开它。正如我之前演示的,数据并非从第一行开始,在这里我们可以指定数据的起始行和结束行,以便导入。点击“立即导入”后,该步骤将被记录到“工作流构建器”选项卡的工作流程步骤中,数据如下所示。其中包含时间、不同的样本以及背景信息。
为了执行我们的操作,我们需要添加一个新列,我们将其命名为 Pred(预测)。我们将使用我在幻灯片上展示的公式来预测它随时间变化的趋势。这里有两个变量。我们已经指定了一些初始值,用于进行拟合。
现在,如果您想随时暂停当前操作,去打高尔夫或探索其他内容,只需再次点击红色按钮即可。您可以随意操作,您的任何操作都不会被计入步骤。例如,我们来看看现在的数据情况。如果我们打开图表构建器,重新导入数据,看看它目前的原始格式是什么样子。
您可以看到,这里的背景噪声大约在 1000 个 RFU 单位左右,而我们的预测响应从零开始。可以看到,我们需要对样本进行归一化处理并去除背景噪声。我们还需要先进行一些预处理。这些按钮非常有用。如果您想返回开头,可以点击“重置”按钮。它会将您带回到起点,然后点击“播放”按钮,我们就可以回到上次停止录制时的位置。
在记录更多步骤之前,我们需要再次点击“录制”按钮。接下来,我们需要减去背景值。最好的方法是将这些样本列堆叠起来。我们将创建一个新表格,把这些列堆叠在一起,并将数据列命名为 RFU(荧光单位),并将该列标记为 sample。
现在我们需要做的是找出背景信号和样本信号之间的差异。最简单的办法是选中这两列数据。右键单击,我们可以新建一个公式列。在“合并”选项下,我们可以计算这两列的差值。这里有两个选项:一是计算反向差值。我发现需要反复尝试才能确定应该选择哪个选项。如果我们现在选错了,就会得到负值。正如你所看到的,我们现在已经成功地从样本数据中减去了背景信号。
现在我们可以运行拟合来计算速率常数了。我们将进入“分析”菜单,选择“专用建模”。我们将拟合一个非线性模型,并将我们之前添加的预测公式添加到“X 预测公式”中。正如您所看到的,它已经提供了我们作为列属性添加到拟合模型中的公式。我们将用基线减去样本数据作为响应值。由于我们有多个样本,因此需要逐个样本进行拟合。
点击“确定”后,我们将打开“非线性拟合”平台。可以看到,每个样本都有不同的拟合曲线。粗黑线代表实验数据,细线代表预测公式,它提供了一个初始值。我们将迭代地改变这两个变量,直到获得拟合曲线。与 JMP 中的所有平台一样,如果您想同时执行多个操作,可以按住 Ctrl 键并点击“运行”。现在,它将使用每个样本的预测公式迭代地拟合响应曲线。
现在可以看到细线已经覆盖在粗线上,我们的拟合已经收敛。以下是我们对 Pₘₐₓ 和 k 变量的估计值。接下来,我们需要将这些数据汇总到一个表格中。如果我右键单击并选择“创建合并数据表”,这将从这些拟合结果中提取所有变量数据。我们只对速率常数感兴趣,因此作为数据处理的一部分,我们需要对这些数据进行一些清理。
我们要选择所有与 Pₘₐₓ 匹配的单元格。我们对 Pₘₐₓ 不感兴趣,所以可以删除这些行。同样,我们并不一定需要这里的表格列,而且我们知道参数是 k,所以也可以关闭并清理它。
我们有了估计值、速率常数、上限值和下限值,以及置信区间的上限和下限。为了更直观地展示,我们可以重新排列估计值,使其位于下限值和上限值之间,这样就得到了一个清晰的汇总表。假设我们不需要所有其他中间表格,并且想要删除它们,关闭它们而不保存。我们可以将所有这些步骤记录到我们的工作流构建器中,这就是最终的输出结果。
现在我们可以停止录制了,接下来需要做的就是检查一遍,确保一切运行正常。我们可以逐步检查每个步骤,确保它按照预期执行,并且没有错误。可以看到,每次成功执行时都会出现一个绿色对勾,但现在我们遇到了一个问题。这在创建合并数据表时很常见。它会创建一个名为“Untitled”的新表,并包含一个数字。每次重复此操作,该数字都会不断增加。脚本需要的是一个特定的数字,这个数字来自我们创建工作流构建器时生成的数据。
你可以看到它找不到“Untitled 7”,所以它问你想用哪个。这说明我们遇到了一些问题,我们已经解决了。我们需要做一些手动操作才能让脚本多次运行。通过一些非常简单的代码,我们可以解决这个问题。我们可以打开脚本查看每个步骤。如果我们回到上一个成功执行的步骤,我们想要做的是将这个数据表定义为一个变量,这样我们就不依赖于一个未命名的数字了,所以我们把它叫做dt。
我们把 dt 定义为当前数据表。接下来我们需要做的就是继续执行每个步骤。凡是调用未命名表的地方,我们都要用新变量替换它。这种情况可能会出现几次,所以我们只需要把每个未命名表都替换成 dt 即可。我们已经完成了所有这些步骤,接下来会再次测试,看看是否有效。这可能不是最优雅的方法,但它能帮助我们构建自己的自动化脚本,并学习如何编写代码。
如果我们再来一遍,这次成功了吗?我漏掉了一个人,编号为7的人员。我们已经成功运行了脚本,现在有了汇总表。我们可以保存这个工作流程,或者点击红色箭头,选择“导出”,然后保存到脚本窗口。我说过,我们想要一个通用的、可重复使用的脚本,供不同的科学家多次使用。
目前,它的功能还比较具体,因为它只能打开特定的文件。只需再添加一行代码,我们就能让它更加通用。我将定义一个变量 F,并将其赋值为 F = pick file。这样,如果我们用变量 F 替换当前文件路径,就可以选择要使用的文件了。现在让我们看看脚本是否有效。
我们点击绿色箭头运行脚本。它会提示我们选择文件,看看是否可行。好了,成功了。速度太快了,你甚至都没注意到发生了什么。它迅速完成了我们为与构建器交互而编写的所有步骤,并生成了一个汇总表。这是我们创建可重用脚本以实现数据处理自动化的一种方法。我们刚才只用了几秒钟就完成了之前需要我花10分钟才能演示的过程,这可以大大节省研发时间。
现在我们已经向您展示了如何生成工作流程,接下来让我们看一个工作流程处理数据的示例。这里我们以酶活性测定为例。正如我们之前提到的,这些酶活性测定将采用荧光读数。在本例中,科学家的任务是制备测定板。测定板上用黄色标记了待处理的各种样品。每个样品在孔中重复五次。
接下来是阳性对照列,该列信息用于提取拟合所需的 Pₘₐₓ 参数。阴性对照列(如同所有合格实验中都应该有的那样)以及名为 dt 的列,该列提供反应开始前的荧光读数,以便评估基线噪声,并将其扣除以使数据与 y 轴零点对齐。至此,用户已生成反应板。反应板被交给酶标仪,酶标仪将启动反应、处理反应板、生成荧光数据并将其记录到 Excel 文件中。同时,用户需要填写包含每个样本相关信息的样本 ID 表。
这时,自动化流程就派上用场了。它会导入Excel数据,并将其合并到样本ID表中,确保每个孔都对应一个正确的样本。流程会进行时间和响应归一化,使时间进程从零时刻开始,y轴上的零点也随之归一化。接下来,会根据我们刚才描述的动力学进行指数拟合。反应速率将被提取,取五次运行的平均值。其中一次运行结果出现偏差,将被排除,最终得到N=4。
然后,我们将使用统计检验(例如本例中的方差分析)来比较不同样本的结果。此外,流程开始时会生成一个名为“流程转储”的文件夹。该文件夹会记录流程的所有中间步骤。如果自动化流程出现故障,这将帮助科研人员进行故障排除。
本质上,输出过程是将原始数据以迭代的方式转化为易于理解的结果,在本例中以方差分析(ANOVA)为例。实验人员首次采用这种方法时,可能需要大约 45 分钟来生成数据缩减流程。但一旦脚本准备就绪,数据缩减流程只需大约一分钟即可运行。
如果我们考虑到在研讨会开始时我展示的试剂盒中,开发其中一种试剂就需要一百多个培养皿,那么您可以很容易地想象,我们至少节省了75个小时的开发时间,从而加速了XLEAP技术的开发。现在我回到JMP,演示一下酶活性数据处理流程。我正在运行脚本。脚本会提示我选择文件夹和文件,就像之前演示的那样。
文件已打开并导出。现在我们从文件中提取了一些额外数据。特别是第二列的数据,我们将使用这些数据。这些是零时刻的荧光强度值,用于生成背景,并将每个时间序列与 y 轴的零点对齐。稍后,我们将导出这些数据,并进行归一化处理,现在我们得到了一个包含归一化时间序列的表格。在每个时间序列上,我们都添加了零时刻的信号值(约为 1%),现在我们将把这些数据堆叠起来。
接下来会添加一个预测模型。好了。这个模型显然会考虑每个时间点和每个孔板,预测我们预期读取到的荧光类型,并将其与实际读数进行比较。稍后,“非线性拟合”界面将打开,并启用对每个数据时间序列的自动拟合。您可以看到,正如Elliot之前展示的那样,各种时间序列现在都显示在屏幕上。这些序列将在几秒钟内自动拟合完成。
反应速率参数 k 将被提取并制成表格。所有提供的时间序列均已完成拟合,数据已提取,脚本现在提示我们已有以 ANOVA 格式呈现的数据。由于脚本运行速度较慢,我花了大约一分钟的时间才将其慢放,以便逐步向您展示其运行过程。慢放结束后,脚本将像刚才那样快速运行,数据也已准备就绪。
我们的演示传达了两个主要信息。首先,我们应该更高效地工作,而不是更辛苦地工作。希望我们已经让您相信,使用 JMP 脚本进行自动化数据处理可以显著提高您的研发效率。我们可以将一些繁琐的任务自动化,从而让您的科学家和工程师有更多时间思考结果的意义,并创新产品和工艺。我们也希望您已经意识到,使用 JMP 脚本进行自动化数据处理其实并不需要太多经验。
在我之前演示的例子中,我们只需要两行 JSL 代码就能编写一个可重用的脚本。JMP 工作流构建器确实是一项颠覆性的工具,它让您无需精通 JSL 代码即可编写自定义脚本。最后,我们还要感谢所有同事的贡献,特别是化学团队的 Steve Mason。感谢大家今天的聆听。
谢谢。