全球珊瑚礁正受到气候变化导致海水温度上升的威胁。尽管许多珊瑚确实会因长期暴露于异常高温而“白化”并最终死亡,但某些物种(甚至同一物种内的不同基因型)却展现出显著的气候适应能力。过去,我们往往事后才识别出这些“超级珊瑚”:在受损严重的珊瑚礁废墟中搜寻幸存者。然而,对于珊瑚礁修复和其他用途而言,比起这种“大海捞针”式的方法,更有针对性、更积极主动地识别具有气候适应能力的珊瑚才是更理想的选择。为此,我展示了在为期一个月的帕劳偏远地区科考考察中收集到的丰富的珊瑚生态生理数据集。经过一些基本的数据处理和可视化后,我使用 JMP Pro 17 展示了如何相对轻松地构建珊瑚适应能力的预测模型。接下来,我将演示如何将基于模型预测分析器生成的图形用户界面(GUI)嵌入网页,以便科学家将其用作规划工具。具体而言,这些基于模型的分析器能够帮助研究人员预测在生物勘探调查中最有可能发现适应性强的珊瑚的环境条件(例如,深度、珊瑚礁类型、盐度)。因此,该分析工具将帮助海洋生物学家找到具有高气候耐受性的珊瑚,以便在修复退化珊瑚礁的工作中进行繁殖。
大家好,感谢收看。我叫安德森·梅菲尔德,是一名珊瑚礁科学家,也是JMP的长期用户和倡导者。在接下来的30-35分钟里,我将和大家聊聊帕劳共和国珊瑚礁恢复力的建模。遗憾的是,我过去20多年来对珊瑚礁进行研究的根本原因,不仅是因为它们美丽壮观,更因为它们正面临着巨大的威胁,尤其是气候变化导致的海水温度上升。
当海水温度过高时,这些珊瑚就会死亡。它们与生活在细胞内的甲藻有着微妙的共生关系,当海水温度过高且持续时间过长时,就会导致珊瑚白化,最终因营养不足而死亡。不幸的是,就在我们说话的此刻,第四次全球珊瑚白化事件已经全面爆发。
核心珊瑚礁的研究其实并不深入。尽管生物多样性极其丰富,但它们仅占整个海洋面积的不到百分之一。因此,我们甚至不知道一些珊瑚最丰富的区域在哪里。我们可以根据卫星图像进行推测,但我们真正需要做的,是潜入水下,最好是戴上潜水面罩和呼吸管,或者使用水肺潜水装备,看看水下究竟有什么。然而,我们已经没有足够的时间对地球上所有的珊瑚礁进行全面彻底的调查。我们需要加快寻找珊瑚特别丰富的区域的方法。
同样,虽然我之前提到过大多数珊瑚对高温非常敏感,但也有一些珊瑚,不知何故,在海水质量恶化的情况下依然能够保持韧性。我们需要找到这些珊瑚,才能了解它们究竟有何不同。我们可以繁殖它们来尝试修复珊瑚礁,但我们通常的做法就像大海捞针一样。我们只是潜入水下,在瓦砾堆中翻找,然后祈祷能侥幸找到一些。
我们需要一种更有针对性、数据驱动的方法来识别具有气候适应能力的珊瑚。我一直在尝试使用 JMP 来解决这类问题。我称之为利用预测模型来弥补 JMP Pro 中的关键知识空白。我这里先抛出几个问题。问题 3 和 4 非常重要,对我来说意义非凡,但今天我们没有时间详细讨论。它们会出现在幻灯片和我的网页数据中,所以如果您想了解更多细节,也欢迎给我发邮件。我在数据表中嵌入了脚本,并提供了分步指南,指导您如何解答这些问题。
今天,我将重点讨论问题1和问题2。我们能否利用现有数据预测其他珊瑚礁的存活率,尤其是那些珊瑚存活率极高的珊瑚礁?这些珊瑚礁对于重要的鱼类栖息地以及保护海岸线免受海浪侵蚀都具有更高的价值。它们未必是最坚固的,但或许是最有价值的。
另一方面,第二个问题在于,我们会在哪里找到这些“超级珊瑚”?这些珊瑚似乎能够抵御气候变化和其他压力,保持顽强的生命力。我今天之所以想重点介绍帕劳的数据集,是因为它为我们提供了一个绝佳的机会,让我们能够与海洋生物基金会合作。我们有一个庞大的科学家团队,收集了我称之为“分子到卫星”的数据集。
我这么说有点自负,其实就是想说,我们收集了各种尺度的数据。我们有来自外太空的卫星数据。我们有科考船,进行样带调查、拍摄,记录海底生物的特征。我们还有像我这样的潜水员,观察珊瑚礁上的生物。我的主要任务是采集珊瑚样本,了解它们的健康状况和恢复能力。这是一个非常丰富的数据集,我认为它将有助于解答我提出的一些问题。
我之所以使用“生物勘探”这个词,是因为我们试图利用这些数据来预测我们可能没有研究过的珊瑚礁的情况。我们在那里待了一个月,获得了非常棒的数据集,但即便如此,我们也只是触及了那里珊瑚礁的皮毛,需要借助预测模型来填补空白。
演讲的前半部分,或者说接下来的重要部分,我们将尝试识别珊瑚覆盖率高的区域。我们指的是造礁珊瑚(即构成珊瑚礁的珊瑚)数量丰富的区域。我们希望找到一些我们可能尚未发现的高珊瑚覆盖率珊瑚礁。我们使用的环境预测因子包括海水质量、空间位置和其他栖息地参数。
我想解释一下,如果你好奇为什么要进行这项练习,难道不能直接查看卫星图像或使用谷歌地图来估算珊瑚的位置吗?你的做法其实没错。这确实能让你大致了解珊瑚礁的位置,但却无法告诉你哪些珊瑚礁是活的。在卫星图像上,活珊瑚礁和死珊瑚礁看起来非常相似,所以我们需要依靠潜水员的数据来验证哪些珊瑚是活的,哪些是死的。
你们大多数人可能对帕劳不太熟悉,但它是密克罗尼西亚一个非常美丽的小岛国。西方人之所以知道它,几乎完全是因为它是潜水天堂,而且现在依然如此。我不想把情况描述得太糟糕,说一切都已化为废墟。但另一方面,这些珊瑚礁也绝非原始状态。它们面临着全球珊瑚礁普遍面临的挑战,尤其是高温的影响。说了这么多,现在让我们正式开启JMP之旅吧。
我正在使用 JMP Pro 18。首先,我想做的,也是 JMP 的强项,就是探索我的数据。你会注意到,在这个精简的数据表中,实际上只有五列。第一列是站点信息。我们考察了 86 个珊瑚礁站点。第二列是经纬度。我还有一些代表性的照片,稍后会展示给你。第三列是珊瑚覆盖率,这是我们之后要预测的指标。
为了让大家有个概念,我先在地图上调出帕劳的位置。我已经打开了图形生成器,你会注意到我甚至不需要手动调整经纬度的位置,JMP 会自动将它们放在正确的坐标轴上。把这行代码关掉。不过你现在还看不到帕劳,因为我还没有添加背景地图。由于我现在在沙特阿拉伯,所以和一些服务器同步时遇到了一些问题,但我认为目前使用这个简单的街道地图服务器就足够了。
这些黑点代表我们的潜水地点。你会注意到这里存在一些偏差。由于盛行风向的限制,我们实际上只能探索该国的西部地区,所以这一点需要牢记。我现在想做的是将珊瑚覆盖率数据叠加到地图上。我准备关闭这个窗口,不过我还没达到我想要的效果。
首先,我之前把图例关掉了。现在我们把它打开。其实我想改一下配色方案。我希望红色代表高值的地方是绿色,而不是红色,因为我想强调珊瑚覆盖率高的地方才是理想的珊瑚礁。
你会注意到我这里犯了个错误。实际上,我并不需要绘制纬度,所以我要做的就是把这个热力图拖过来,然后把原本代表纬度的点移除。接下来,我要回到珊瑚覆盖率的设置,把绿色区域改回最高。这样就更接近目标了,但是因为像素太大,你现在几乎看不到整个岛屿了。这是我几年前偶然发现的一个技巧。
实际上,如果你使用热图将数据叠加到地图上,可以通过调整网格增量到所需大小,然后启用网格线来强制显示网格。现在效果不错。看起来更接近我想要的效果,也许可以用于发表。但我发现网格线还是太多了,所以我打算把网格线关掉。再稍微调整一下居中。现在看起来不错。我可以再调整一下坐标轴,让它们更清晰一些。
但实际上,我们现在的重点是进行一些探索。我想你会注意到,在最北端,我们看到更多的是红色和橙色。这些区域的珊瑚数量较少。这边这片区域的珊瑚就比较少。而在南部,我们看到了相当丰富的种类,或者应该说是多样性。
珊瑚最丰富的珊瑚礁位于西南偏西区域。请记住这一点。我还想向你们展示一下,我知道你们可能不太理解,我一直在强调珊瑚覆盖率。对于非海洋生物学家来说,这可能是一个比较抽象的概念。我在这里上传了一些我认为具有代表性的照片,展示了其中几个地点的情况。你们可以看到,这是一个珊瑚覆盖率约为46%的珊瑚礁。正如我们稍后会看到的,这大约是全国的平均水平。这张照片可能不是展示珊瑚覆盖率的最佳选择,因为在非专业人士看来,这里似乎完全被珊瑚覆盖了,但实际上,其中一些珊瑚并不是在构建珊瑚礁。它们并没有参与构建这个珊瑚礁框架。这有点误导人。这并不是说这里不美,而是说正如我们稍后会看到的,这里的珊瑚覆盖率还不是最高。
我们先结束今天的讨论。现在我们来看更全面的数据集,它仍然有86行数据,仍然包含经纬度和珊瑚覆盖率,但这里我们会看到一些额外的环境参数,我认为这些参数会影响珊瑚覆盖率,我们稍后会详细讨论。这些参数也包括海水质量等。
如果我的问题在于,我想预测哪些区域珊瑚覆盖率高但尚未被发现,除了在地图上绘制之外,您还可以使用一个名为“预测因子筛选器”的便捷功能。在这里,我将以珊瑚覆盖率作为 Y 轴,然后选择一些我预期可能影响珊瑚覆盖率的环境因素作为 X 轴。这样您就能得到一个非常直观且易于理解的图表。对珊瑚覆盖率变化贡献最大的预测因子是纬度,这很合理。我们看到北部珊瑚覆盖率较低,南部较高。抱歉,最南端的珊瑚覆盖率较低,但中间区域可能存在一个最佳覆盖率区域,而这个预测因子筛选器也证实了这一点。
我应该提一下,多年来我一直误解了这个数据。我之前认为这是纬度解释的变异比例。但实际上并非如此。我认为,这指的是纬度在提升树模型中被纳入的次数比例。这可能并不意味着纬度解释了33%的变异,但可以说,例如,纬度的影响大约是温度的两倍。而我之前假设的那些参数,原本应该是珊瑚覆盖率变异的重要驱动因素,但实际上它们的影响并不大。事实上,我差点就没注意到这一点,因为它本质上是负数据,但它确实是一个非常实用的功能。
如果我想把刚才看到的景象以图形化的方式呈现出来,除了查看地图之外,还可以把海底生物的数据进行汇总。基本上,潜水员看到的生物可以分为四类:硬珊瑚、藻类、其他无脊椎动物(比如海绵之类的),以及贫瘠的底质。这部分底质并非完全贫瘠,而是指没有生物存在的区域,例如沙子、岩石等等。这四类加起来正好是100%。
我要做的就是把它们堆叠起来,之所以要堆叠,是因为这样可以让我制作出一个非常引人注目的图表。现在我已经把所有这些底栖生物数据堆叠到同一列中,我可以把它们拖到 Y 轴上。我要添加一个叠加层。我要启用图例,然后把它转换成柱状图。我们还没完全完成,因为我想突出显示这四个实体的总和为 100%。所以我把它转换成堆叠柱状图。它们的总和为 100%,这强调了我之前没有提到的一点。
我之前提到过,我们调查地点的平均珊瑚覆盖率为45%。按国际标准来看,这其实非常高,所以对帕劳来说是个好消息。那里仍然有很多活珊瑚。坏消息是,藻类覆盖率也高达40%。如果你了解珊瑚礁的基本海洋生态知识,就会知道珊瑚和藻类之间存在着竞争关系。它们都在争夺生存空间。在珊瑚礁上,我们希望珊瑚数量更多,而藻类数量则相应减少。这并不是说藻类在海洋中总是坏事,但在珊瑚礁上,它们会与珊瑚竞争,所以在这种情况下,你必须权衡利弊。但这并不是我想向你们展示的重点。我想向你们展示的是,我可以多么轻松地观察这个组合体在不同环境因素(我可能感兴趣)下的差异。这只花了我一点时间,我完全可以把它粘贴到Word文档里,然后和论文一起提交。
例如,这里我们展示了三种不同类型的珊瑚礁。我们可以看到,珊瑚覆盖率几乎相同,所有珊瑚礁类型的覆盖率均为 45%,这与我们在预测器屏幕上看到的结果一致。珊瑚礁类型和暴露程度实际上都不是一个很有用的预测因子。这主要取决于冲击珊瑚礁的波浪能量。你可以看到,它还会影响其他方面,例如,受保护的珊瑚礁上的藻类要少得多。这实际上与世界上许多地区的情况相反。对于生态学家来说,这张图信息量非常丰富,而且我只用了 30 秒就制作出来了,所以这只是题外话。我认为这是一个非常棒的功能。将数据堆叠起来,并用它来制作我称之为“底栖生物群落图”的东西。
记住,我们做这一切是为了构建珊瑚覆盖率模型。在对数据进行了一些探索之后,我已经掌握了影响变异的因素。接下来,我将切换到 JMP Pro 的预测建模部分,并使用几个版本前推出的一个我非常喜欢的功能——模型屏幕。这个功能可以让我同时测试大量不同的模型类型。
我正在尝试预测珊瑚覆盖率。我有一个验证列,它有效地将我的 86 个站点的数据分成 75% 的训练数据和 25% 的验证数据。我将启用一些额外的选项。二次方程中的一些双向交互作用可能不太合理,但我们暂时先保留它们。我有一些之前探讨过的、我认为可能影响珊瑚覆盖率的预测因子。其中一些因子显然不太重要,我们可能早就应该移除它们了,但现在不用担心。
我们来看看验证集的R平方值,也就是模型预测验证数据集珊瑚覆盖率的表现。你会发现它的表现并不理想。R平方值大约在0.3左右,而这类模型通常比较复杂。模型筛选的目的并非一定要找到最终发表在论文中的模型,而是帮你找到大致的研究方向。我知道对于一些非常复杂的生态数据集,神经网络往往表现出色。
之前,我找到了一个神经网络,我们这个只包含七个环境因素的神经网络,它的验证集 R 平方值约为 0.72。如果你想预测海洋中的各种情况,我认为这已经相当不错了。这个模型需要几秒钟才能运行,所以我想回到 PowerPoint 给你们展示一下。这个模型的发现要归功于一个非常巧妙的插件,它是由一位非常精通 JMP 的用户 Diedrich Schmidt 开发的。如果你对神经网络有所了解,就会知道有很多不同的超参数可以调整,这些参数会对模型性能产生相当大的影响。他开发了一个非常优秀的通用自动调优插件,可以测试大量不同超参数的组合。这些超参数包括隐藏层的数量、单层时的提升程度、激活节点的类型等等。
我们来看看。我们来仔细研究一下这个神经网络。你可能会注意到一个有点令人担忧的问题:训练集的 R 平方值比验证集的低很多。你可能会对验证集的 R 平方值印象深刻,然后说:“嘿,对于一个生态数据集来说,0.88 真是太棒了。” 这很可能是过拟合的迹象。但现在,我们先把它归结为这次运行效果不如其他几次,假装我们对这个模型很满意,因为我真正想展示的是以下几点。
首先,在预测分析中,我要关闭“评估变量重要性”功能,因为我想重新运行一次。这本质上是对环境因素进行排序,排序依据是它们在模型中的影响力。输出结果实际上会与预测器界面非常相似。由于我之前运行过这个模型,所以它的排序已经是这样的。但是,运行变量重要性分析后,它会根据预测器中预测变量的总效应大小重新排序。可以看到,在本例中,经度的影响实际上比纬度更大,因此您在这里看到的从上到下的顺序与经度的顺序一致。
出乎意料的是,我们发现,尽管在之前的图表中我们并未看到暴露度产生显著影响,但它的排名仍然高于其他一些因素,这很有意思。我们认为这合情合理。根据我们从地图上看到的信息,空间坐标也说得通。我们没有过多关注珊瑚礁的出现,但我简单地绘制了一张图表。可以看到,珊瑚覆盖率受到的影响非常小,而图表显示的数值略低于全国平均水平。
但我想做的是,假设我对这个模型很满意,它没有过拟合的迹象,并且符合我的各项标准。接下来我想做的,也是我认为最酷的部分,就是进行期望值分析。它记住了这一点,因为我之前做过,但我想告诉 JMP 最大化珊瑚覆盖率。告诉我,根据这个模型,在哪些条件下珊瑚覆盖率应该达到最大值。然后我将最大化期望值,结果这个值跃升至 73%。
让我回到幻灯片。这里有一张分布图。我已经绘制了全国的珊瑚覆盖率。我们之前提到过平均值是 45%,但实际范围非常广,从 2% 到 78% 不等。你可能想知道为什么模型没有直接推荐覆盖率达到 78% 的那片珊瑚礁。原因是,我们实际上已经从模型中移除了特定地点(在本例中是岛屿)的数据,因为我们不想让模型受到偏差的影响……我们希望模型能够更普遍地适用于全国情况。
否则,如果只是简单地添加地点、岛屿之类的信息,它很可能会建议你回到珊瑚覆盖率最高的地方。这当然是最有可能正确的做法,但我们正在尝试构建一个更具普适性的模型,以便了解我们尚未发现的区域。73% 的珊瑚覆盖率确实高得惊人,但并非完全不可能。我之所以提到这一点,是因为在使用环境数据进行这类可行性分析时,外推法绝对是一个需要考虑的问题。
在这种情况下,我已经事先考虑过了。这些条件在我看来都不算离谱。海洋生物学家会说:“嘿,你看,我完全可以想象在这样的平均水深下,泻湖外露出一片前礁。”珊瑚礁出现这种情况当然是可能的。我之前做过一些模型,如果不启用外推控制,模型会给出一些自工业革命前地球上就从未出现过的条件。当你试图进行预测时,尤其是在动态系统中,使用这些外推控制是非常必要的。我启用警告时没有收到警告,但我可以启用。如果你在使用外推时遇到问题,可以重新运行模型。
在这种情况下,它几乎没怎么改动,因为没有问题,但你会注意到,有些线条被固定住了。如果你了解珊瑚礁,就会知道前礁总是位于泻湖的外侧。它甚至不允许我把它拖过去,因为它提示说:“嘿,我们不允许你模拟数据集中不存在的情况。”或者在这个例子中,它在自然界中并不存在。这其实挺酷的。
如果我对这个模型满意,我会再做一遍……你知道我要做什么。我不会作弊,但我会再运行一次,原因稍后就会明白。因为我想把这个模型放到我的网站上。我知道如果进行期望值分析,基本上就能解决那些问题。这或许不错,但就我而言,我希望其他用户可以输入他们的数据,或者输入他们想查看的珊瑚礁数据,然后模型会输出珊瑚覆盖率的估算结果。
还有一件事我想做。让我想想。不,我把地图拿下来了。我本来打算用这些坐标,看看这些经纬度坐标在帕劳的具体位置,不过我想我们还是留到以后再说吧。但我记得之前做这个模拟的时候,地点就在帕劳西南部的某个地方,那里的珊瑚覆盖率以前比较高。
你可以看到,这个模型的重制版其实非常相似。但我现在只想假装我们对这个模型很满意。实际上,我想把它发布到 JMP Public,希望不会花太长时间,因为我已经登录了。我会把它放在 JMP Discovery 文件夹里。我可以在这里添加一些额外信息。如果需要的话,我还可以添加一张图片。
我们来看看它现在的样子。希望它是交互式的。有时候,当我运行程序时,它仍然记得我想要最大化珊瑚覆盖率,它就会保持“适宜性分析”开启状态。大多数情况下,只要它记得,这其实很好,但如果你想发布交互式 HTML 代码,有时就会出现问题。生成报告需要一些时间,所以我们稍后再来处理,但我可以先给你展示一下,因为我已经提前做好了。
这是我的网站。我有一个帕劳专区,还有一个我称之为“帕劳生物勘探”的专属页面,我主要……我做这个不仅仅是为了验证JMP的概念。这些都是我非常感兴趣的实际发现。你可以看到,它和刚才运行的模型并不完全相同,但很相似。比如说,我在帕劳的合作者和同事会说:“嘿,我们在地图上发现了这个礁石。它是一个位于泻湖内的水下礁石。它是一个后礁,或者说是一个泻湖斑块礁。它很浅,因此应该受到保护。我们发现它大约在这里,具体位置大概在这里。”
这或许不是个好例子,因为它展示的是全国的平均水平,所以模型的预测会是:“嘿,去看看那个地方。”它和其他珊瑚礁一样好,你可以通过输入你实际看到的数量来优化模型,帮助它更好地训练。
我在这里展示的是优化后的理想状态的静态视图。你可以看到它略有不同,因为每次运行结果都会有所变化。但在这个例子中,这些是基于我的模型预测的条件,这些条件将使珊瑚覆盖率达到 67%,这确实非常高。那么,我是如何做到这一点的呢?
这就是它的样子。再次说明,模型略有不同,但它确实已正确发布。它具有交互功能。我只需要……看看这会不会碍事。我可以做两件事。我可以获取 iframe 或卡片的嵌入代码。我更喜欢 iframe,因为卡片实际上只是在这里放置了一个小小的占位符,本质上就是一个高级超链接,会将您带到 JMP 公共页面,这可能就足够了。但如果您确实想要一个嵌入式窗口,让用户可以进入其中并输入他们自己的数据,那么您应该使用 iframe。
我用的是 Squarespace,但其实操作很简单,你可以直接添加代码或者嵌入,把代码贴在这里就行了。我这段代码是从 JMP Public 网站上复制粘贴过来的。加载需要几秒钟,然后,保存,刷新一下页面,把这个链接发给我的同事。如果他们是 JMP 用户,那就太好了,他们可以看到更详细的信息。如果不是,他们也可以用这个功能开始验证假设,比如估算一下珊瑚覆盖率之类的数据。
这或许是 JMP 多年来一直无法实现的功能,但让我真正感到震惊的是,竟然可以如此轻松地在网站上搭建一个交互式预测分析器。它蕴藏着巨大的潜力,可以解答我一直想解答的所有问题。
为了节省时间,我就不详细讲解超级珊瑚的例子了,因为你们也知道,讲到那里需要几分钟时间。不过,简单透露一下,本质上过程是一样的。如果你在进行预测建模,你不用再关注珊瑚覆盖率,而是使用我几年前创建的珊瑚健康指数。你可以看到它包含了很多内容。这个指数分辨率很高,但成本也很高。你不可能对数百万株珊瑚进行所有这些测量。
同样,你需要使用预测模型,这样才能找到更经济的替代指标。与其花费数千美元去测量那些复杂的分子指标,不如依靠这些预测模型来判断:“例如,如果你想要一块珊瑚,它有99%的概率是‘超级珊瑚’,那么它的大小应该在这个珊瑚覆盖率很高、珊瑚多样性很低的珊瑚礁上,等等。”在JMP Pro中,分析过程与此非常相似,只是问题有所不同。
这些超级珊瑚在哪里发现?然后,我可以把信息发布到我的网站上,这能帮助人们进行规划。我们现在有一些项目,我所在的机构 Cord App 正在与帕劳的人们合作,他们有兴趣寻找这些超级珊瑚,因为他们想在自己的珊瑚苗圃中繁殖它们。这些基于 JMP Pro 模型生成的预测分析器将非常有用,可以帮助他们精确定位这些珊瑚礁的可能位置。
如果您对这个话题感兴趣,我建议您仔细阅读一下演示文稿。我跳过了一些幻灯片。所有脚本都已添加到 JMP 数据表中,您可以自行进行分析。我认为,利用目前从珊瑚礁收集到的数据类型,我们可以做一些非常有意义的事情,例如优化海洋保护规划。
我认为,使用 JMP 并熟悉这款软件让我受益匪浅。它确实帮助我解答了一些触及气候变化和地球命运等核心问题的重大难题。如果你经常构建预测模型,那么随着你对 JMP,尤其是 JMP Pro 的了解加深,你会感觉自己拥有无限的可能。我强烈建议大家积极探索,尝试解决这些重大问题,因为你会惊讶于自己能做到多少事情。
好了,我的演讲就到此结束。感谢大家的聆听,如果对演讲内容有任何疑问,欢迎随时给我发邮件。谢谢。