夜校|Maxent模型的优势和风险:最大熵模型速成(含超长版速记)
本期夜校可在手机端收听完整内容:在本公号的菜单栏,点击【成长社区】,输入用户名和密码【登录】社区,点击上方导航栏的【工具坊】即可或在公号名片页点击【服务】,在弹窗点击【成长社区】进入【工具坊】版块。
Tips:首次访问,需要先登录质兰成长社区,输入www.izhilan.cn上的用户名和密码,点击【登录】,即可查看所有内容。新朋友可以点击注册账号,完成注册认证,即可访问!
---------------------------------------------------------------------
最大熵模型Maxent让人又爱又恨,爱是因为它处理的数据非常独特,很少的数据量就可以工作,它很容易上手,点几下就可以输出。但它其实有非常多的限制,有很多背景的假设,在它的说明书里也写到了很多容易出问题的地方。在实际操作的过程中,可能很多使用者会时不时犯这样那样的错误,或者乱用。所以它是一个非常容易上手,但也是一个使用起来需要小心的模型。特别当我们的目标是用它来在很大的区域预测动物的栖息地,或者用它来预测气候变化,需要注意的地方就显得更加重要。
四个小期望
珍惜数据 避免误导性结果 结论可信 Defendable& Repeatable
首先,数据是我们非常需要珍惜的东西,千辛万苦从野外收回来的数据,不能极度的简化后用很差的方法来分析。同时,在分析过程中,要随时检查我们的数据、我们的方法、我们的结论,很多时候其实错误的结果一开始是有端倪的。
我们用生物学知识、数学知识能够去一点点判别这些结果,如果一点一点判别做不到,可能最后会有误导性的结果,这个不管是红外相机分析还是Maxent分析都是需要注意的。
此外,我们的工作应该可以由第二个人或第三方团队重复,所以结论也应该是可信的、可证实的。
基础界面
Maxent模型看起来比较简单,下图就是一个在Windows里,Maxent模型的一个基本界面。
只要把这个模型一边填上物种数据,一边填上环境数据,底下勾一勾,然后选一个输出文件夹就可以了。这就是为什么很多研究者,特别是中国的研究者非常喜欢用Maxent模型的原因。
下面的表格中,有一个阈值(Threshold)是什么意思?阈值就是我们预测一个物种的分布,我们其实预测是物种的分布概率,但有些情况下,大家也把它解释为栖息地适宜程度。这两个概念是有区别的,但是往往会混用。所以这个阈值代表的就是一个0到1之间的连续栖息地适宜度,到底取中间的一个什么值,就可以认为大于这个值是物种有分布的,小于这个值可以认为物种没有分布的,这就是把0和1这个连续的数据变成一个分类值的阈值范围。
很多研究者最关心的就是预测,下图中白点是我们的数据点,蓝色就对应着分布概率低的区域,颜色越暖这个物种分布的可能性越高。
Response Curves则讲的是物种跟环境变量之间的关系,第一行是把所有变量都加进去之后物种和环境的关系,第二行是单变量,就是单看这个物种跟一个变量之间的关系,单变量包括:海拔、居民点距离、坡度、森林类型等。
总结来说,一个简单的Maxent模型的结果,可以包括几个关键部分:一、模型表现的评估;二、、阈值,可以靠这个阈值把连续的物种分布可能转变为有动物和没有动物这种离散的分类值;三、预测的分布图;四、物种和环境的关系;五、环境变量对于这个物种分布的影响,参考下图中的表格。
如果我们进到这个Maxent模型的工作文件夹里,其中后缀为.asc的文件,就是我们所预测的物种分布图,它带着空间信息,可以去进一步分析。此外,文件夹里的HTML文件,是一个网页文件,这个文件里连接着所有关键的信息和关键的数值。
除此之外,还有一个叫做plots的文件文件夹,这个文件夹里面对应着的是刚才看到的这些图。
所以这个模型对于初学者、对分析要求不太高的人,容易上手。它涵盖了做一个分析、写一篇简单文章所需的绝大部分的信息。
关键的衡量值
但,在数据分析背后,很关键的是:我们为什么要做数据分析?我们要建立模型是因为我们不再满足于整理数据。比如刚才示意的模型,可以就算一下平均海拔、平均的坡度、平均占优势地位的森林的类型,但这是一个描述性的数据整理,往往并不是我们的目标,我们的目标是得到物种跟环境的关系,去预测它的分布,并在未来看到它的变化。所以在这个过程之中,我们要外推,要把我们已经知道的这几百个、几十个或者几千个信息点,推到未来非常广阔的空间和时间尺度上,这个时候我们要非常小心。我们的数据需要是可信的,我们还需要数据不仅可信而且可重复,是可以用新的数据、用别人的方法、用别人的调查去验证的。所以Reliable(可信)、Repeatable(可重复)、Defendable(可验证)这三个词就非常重要。
在这个基础之上,其实我们做任何模型,都会发现这些模型的表现会存在两个关键的衡量的值。一个是Bias(偏差):模型预测的这个值跟真实值之间的差别,还有一个是Variance(变异),Variance指的是预测五次、预测十次或当用百分之百的数据、90%的数据、80%的数据,或当用各种各样的分析路径时,预测的结果是否稳定。
下面这张图鲜明地表示了什么是Bias(偏差)、什么是Variance(预测的变异)。图中,左上角A是最好的,可以看到预测的很准。每一个小五角星就是预测值,而中间的这个点是真实值。五角星的平均值是灰点,可以看到灰点跟真实值之间差距很小,所以这是一个好模型。
图中右侧B的模型看着不错,Variance很小,但是可能出现了某一些关键的系统误差,所以这个模型预测的值跟真实值差别很大,但是它很稳定。所以我们要提升方法、修正数据或者改变一些系统性的错误,想办法把这个模型接近真实值。
C的模型表现已经不稳定。大一个、小一个、东一个、西一个,这种模型的表现不会很好。但是如果我们做很多次大量的去模拟这个建模的过程之后取平均值,平均值比较准。最后这种情况D模型变异很大,模型又不准,这个是最差的一种情况。
所以今天当我们要建立模型、做数据分析的时候,请大家一定在心里明确:每一个模型都有好有坏,每一种数据通常有它适应的模型。所以当我们不论用Maxent模型也好、占域模型也好一定要知道到底我们的Bias有多大,我们的Variance有多大。
模型的验证
模型怎么验证?模型的验证是一个非常重要的工作,很多论文或项目报告里,对模型的验证写的很简单、草率。所以,建议在做模型验证的时候,最标准化的办法是把这些数据分成两部分,第一部分用来建立模型,第二部分用来进行验证。
大家可能会说把数据分成两部分,用五十个点建立模型,另外五十个点用来验证,验证的50个点不就相当于浪费了。所以这就应运而生了一种更好的或者说更珍惜数据的方法,也就是K-partitions(folds)。
什么意思呢?如果k=10,就是10折,k=20,就是20折。以5折为例,我们把数据分成5份,我们用4份建立模型,然后用1份来检验,相当于损失了5分之1的数据。然后重复一次这个过程,这一次用另外的4份建立模型,然后用剩下的1份来检验,又得到一个检验值。把这个过程重复做5次,我们就分别用了5个不同的部分来做检验,这样就用到了全部数据,每一个数据都在5次里有4次进入了模型。而与此同时,我们有了5个检验值,有了检验值的平均值和标准差,这就是一个珍惜数据并且能够更系统的去比较模型表现的方式。
注意事项
为什么不能滥用模型呢,需要注意以下几点:
1.变量之间的相关性带来困难
首先Maxent模型的变量可能是高度相关的。当我把海拔和人同时放进去的时候,这两个变量会互相干扰。大部分村庄就是在低海拔的地方,至少是在相对低海拔的地方。所以,当把村庄放进去之后,海拔就没用了。或者海拔有用,村庄就没用了。因为两个变量是高度相关的,所以一个的存在会干扰另外一个,甚至极端情况下,如果说这个村庄作为主要的变量,参与了预测,相应的海拔里有用的信息已经在村庄里被代表了,那这个时候海拔就变成了不太有用的变量。这会导致,模型预测的物种跟海拔之间的关系不准。第二,有可能会跟真实的情况完全相反,因为是海拔里边没有被村庄代表的那一丁点信息又进入到了模型里,提供一点可有可无的结果。虽然这个结果对于整个模型的表现可有可无,但可能给你提供一个完全相反的信息。
所以当我们把一大堆环境变量扔进去的时候,很重要的一件事情是要检验变量之间的相关性。如果这些变量是高度相关的,就要去掉高度相关的变量,或者把这些变量用主成分或其他方法整合起来,变成复合型的变量。
2.数据过于集中带来困难
很多时候数据点会过于集中,会导致过于强调家域附近或者村庄附近的点。有的时候有必要做一些稀疏,比如五百米之内的点就不要了,或者说两公里之内的点就不要了。
3. 解读物种-环境关系需要谨慎
当变量相关的时候,大量物种和环境的关系可能是错误的。如果你的很多变量,你不检验相关性,一股脑扔进去,得到的分布预测可能会很准确,但是物种跟变量的关系可能会有大量的错误,所以这个时候解读就要非常小心,宁可不用也不应该有错误的结果。
4.变量贡献值不确定
Maxent模型不同的建模方法、不同的变量数量、不同的重复次数,可能会让每一个变量的重要性变得非常的不稳定。
Q&A
提问:ArcGISExport to Circuitscape这个插件是起什么作用的?
回答:Maxnet模型还有其它一些模型对于环境变量是很苛刻的,比如要完全一样的边界、空间投影坐标、分辨率、形状、尺寸等,这就导致用传统的方法生成图层经常会报错。ArcGIS Export to Circuitscape插件的好处是你只要做好一个图层,然后以这一个图层作为模板,把其他的所有图层一股脑的输出成完全一样的边界、分辨率、形状尺寸,就能又快又准,不易出错。
相当于用一个图层把其他图层裁剪为所需形状?
回答:对,就是相当于用一个图层将其它图层裁剪为所需的形状,所需的分辨率,所需的空间投影。
提问:由于物种的过去分布我们是不知道的,那已知其当前的分布范围及精确分布点,在确定其重要因子后,我们是否可以利用Maxent模型根据当前的分布情况,预测物种过去的分布情况?
回答:可以通过建立模型,去预测过去物种的分布情况,其实和我们预测未来是一样的,就是用我们现在的物种点和现在的环境点连接起来,建立物种和环境之间的关系,再外推到未来或者过去,但是这个外推的过程充满了危险,充满了困难。
比如,现在的这个物种点代表着一个非常受限制的生态位还是代表着这个物种的真实情况?以熊猫为例,今天熊猫在四川、陕西、甘肃一个很小的区域,我们以此去外推70年之后,气候变化熊猫能不能适应,会发现熊猫一定不能适应,但是这个结论准确吗?不一定。因为就在二百年前,熊猫还在神农架,还在甘肃小陇山这些区域,是因为一二百年的人类活动,导致熊猫出现了全面的退缩。所以熊猫能够适应湖北的气候,能够适应甘肃东南部的气候,能够适用更大的气候的空间。它的真实生态位是我们今天的数据不能代表的,所以用今天的数据去预测,是非常受限的。
第二有很多因素,例如气温,可能未来或者过去的气温是超过今天的观测值的,所以无法进行预测和外推。
这张图是一个南美树懒的预测图,如果模型是准确的,南美洲就没有树懒可以生活了。但是作者就直接说明这种情况是因为模型错了,或者数据不好,而不是因为树懒真的会消失。因为它有两个变量,第一个变量是下图中左上的tmp年均气温,第二个是右上的tmx(temperature max)最高气温。在这个模型里的两个变量是高度相关的,而两个高度相关的变量只有一个会起到明显的贡献,可以看到tmx有很好的区分度,而tmp基本是条直线。最高气温(横坐标除以10也就是温度值),可以看到绝大部分树懒都出现在34°C以下,所以,它就预测最大的温度超过35°C就不适合树懒了。
但是这个是因为现在南美洲气温没到35°C,绝大部分就是在30°C到35°C之间,当然也就没有树懒生活在35°C(及以上)。所以解决方案是要调整相关变量,如不使用年均温,引入季节变异、或最冷或最暖月变量等。
提问:除了网上能下载的,自己的数据怎么制作环境变量?
回答:自己采的农田,就可以做农田的密度,可以做每一个方格到农田的距离。但是如果你自己采的是点数据,就没有办法外推到面上。比如只知道每一个地方的树高,而不知道五百米网格之内的平均树高,也不知道调查区域以外的背景点的树高,就需要额外的点的数据。
提问:请问对于数据过于集中的问题,应该在怎样的一个范围去进行稀疏?Bootstrap验证时一般设置多大比较合适?
回答:有的人是参考前人的文章,例如300米、500米,有的是参考家域,比如黄鼬,它的日活动或者季节活动可能在500米以内,就可以把500米以内的稀疏掉。Bootstrap验证这个没有一定之规,你可以设置50、100、500都可以。
提问:Maxent模型需要pseudo-absences数据吗?Biomod包中有10个模型,这十个模型都需要这个数据吗,还是有的模型不需要呢。
回答:它是需要的,不过它不叫pseudo-absences它叫background data。Maxent模型建模的时候还是要把物种点和背景点进行比较。其实,所有模型都需要背景点,光有物种点是没用的。
提问:对最近道路、河流等线性因子,处理变量时是否有別于面或点因子的处理?
回答:有三种方法,第一种是最近距离(Near distance)即方格和最近道路之间的直线距离,它的好处是结果容易解读。第二是用道路密度,第三是用道路分级,因为道路有大、小,所以在公路密度里会给道路加权,如大的国道或者高速公路的权重是5,乡村路权重是1或者2,这样加权之后可以进行不一样的密度的计算。相对比较常用的一个办法是同时建立对道路的距离、道路的密度和道路的密度加权。
提问:请问居民点距位点距离作为变量的时候,能用GIS的欧式距离算吗?
回答:都可以,其实怎么处理环境变量是灵活的,可以做很多的尝试,每一个物种的反应也不一样,比如熊猫就对于距离不会特别敏感,它对于人口的密度可能很敏感,但是比如说豹猫,有可能如果对于小居民点它很喜欢,它会经常跑到小居民点附近活动,它的距离是个正相关,但是大居民点就又变成了敏感的负相关,这个时候可能就需要对居民点进行加权或者区分这两种居民点。所以不同的物种,不同的居民点的状况,其实数据处理的方式会不一样,这个需要生物学的知识也需要我们去尝试,没有放之四海皆准的完美办法。
提问:目前大部分的公开数据,分辨率基本上是1km,例如人口密度、气候数据,但是自己的研究区面积相对较小,这样的数据应该如何处理呢?
回答:要花钱去买,用气象站或者当地的政府、国土资源部的资料会更好一些。免费数据不会很精确,另外很多区域,可以用气象站的数据差值。
提问:请问如果想做一种草原鸟类的繁殖地分布预测,以每个巢为中心做比如五米乘以五米的小样方,测量植被密度高度等数据,这样的数据能用于Maxent模型吗?如果能的话该怎么处理这些数据呢?若不能用,我们该收集哪些可以替代的能用于模型分析的数据呢?
回答:能用,但是Maxent模型需要很大的区域,光有小样方的测量值,是用不了这个模型的,只能用线性回归模型得到物种跟环境的关系,不能得到整个区域比如潜在巢的地点,这个模型的数据都是在大尺度上得到的数据,所以Maxent模型一般用于道路、河流、农田等的外推,如果只有我们调查点上才有的这些数据,比如说树高、草地盖度、土壤类型就会用向线性回归、线性可加等模型。