利用R软件在GBIF网站下载和筛选物种分布记录并提取气候数据进行分析 |
您所在的位置:网站首页 › 物种分布数据在哪里找 › 利用R软件在GBIF网站下载和筛选物种分布记录并提取气候数据进行分析 |
研究背景 生态学、生物地理学、进化和保护生物学的研究中往往需要分析生物个体的地理空间分布信息,这需要基于准确的物种分布记录。随着大量的生物多样性数据库的公开,研究者们能够获得的数据资源变得越来越丰富。例如,全球生物多样性信息网络(https://www.gbif.org/,Global Biodiversity Information Facility, GBIF)是世界上最大的生物多样性资源库,截止到2021年3月已收录1,657,726,342条物种分布记录。该数据库中的物种分布信息来自于博物馆标本、野外观察、文献资料等不同渠道,已被广泛应用于气候变化影响、生物入侵、物种丰富度格局、物种分布预测、环境生态位和人类健康等领域的研究。然而,这些数据库中的数据来源纷杂且数量庞大,其中存在的物种分类鉴定错误和有误的分布信息可能导致后续分析得出错误结果(Maldonado et al., 2015; Zizka et al., 2020)。因此,物种分布数据下载后必须进行数据过滤,以便获得较为可靠的分布点用于后续分析。除了物种分布记录,气候数据也被广泛应用于宏观生物学的研究以探讨生物进化、生态和生物地理学上的问题。它们可用于预测生物入侵、物种对全球变暖的敏感性、生态位进化对物种多样性的影响、气候驱动的物种形成和灭绝过程等。关于历史、现在和未来环境下的温度和降水的详细信息现在也可以在线获得。在过去的研究中,人们常常是基于手动搜索、下载和处理这些数据,需要使用到多个软件,耗费大量的时间,非常不方便,这就迫切需要有功能强大的软件来高效地完成这些工作。 R是一个广泛应用于科学领域的免费软件,能在其中进行各类数据管理、可视化、统计分析和建模,有大量的软件包可供使用,是进行不同生物类群空间分布分析的理想选择。rgbif包于2012年发布,该软件包可以从GBIF数据集中搜索物种分布数据,更快地获取数据,并进行可重复的研究(Chamberlain and Boettiger, 2017)。此外,最近发布的CoordinateCleaner包还可以检测和删除错误的或不精确的地理分布信息(Chamberlain, 2016; Zizka et al.,2019),能够识别超大型数据集中有问题的记录。学习如何使用这些软件包获取和分析与物种分布相关的气候条件并探讨它们与物种性状(如体型)的相互关系,能够提升检验相关生物学假设的能力,并减少读者在学习多个软件上所花费的时间,显著提升效率。 准确的物种分布记录是解析空间分布规律分析的前提条件。本数据分析流程将详细介绍如何使用R软件从GBIF数据库中搜索物种的地理分布点记录(具有经度和纬度信息且是来源于博物馆馆藏标本记录的数据),识别和删除有问题的分布记录(地理坐标位置录入错误、人为饲养、重复记录等)。此外,还将介绍如何从WorldClim数据库(https://www.worldclim.org/)中提取对应的物种分布点的气候变量。最后,将展示如何生成可视化图形,并初步评估物种分布和气候之间的联系。 软件和相关软件包 R software version 3.6.1(https://www.r-project.org/)Rstudio (https://rstudio.com/products/rstudio/)rgbif package version 3.5.2(Chamberlain et al. 2021; https://cran.r-project.org/web/packages/rgbif/index.html)CoordinateCleaner package version 2.0-18(Zizka et al. 2019; https://cran.r-project.org/web/packages/CoordinateCleaner/index.html)dplyr version 0.8.3(Wickham et al. 2019; https://CRAN.R-project.org/package=dplyr)Maptools version 0.9-8(Bivand and Lewin-Koh, 2019; https://cran.r-project.org/web/packages/maptools/index.html)raster version 3.0-7(Hijmans, 2019; https://cran.r-project.org/web/packages/raster/index.html)ggplot2(Wickham, 2016; https://ggplot2.tidyverse.org/)ggcorrplot version 0.1.3(Kassambara, 2016; https://cran.r-project.org/web/packages/ggcorrplot/index.html)分析案例 本方案将使用九带犰狳(Dasypus novemcinctus Linnaeus, 1758)作为研究案例。这个物种原产于新热带地区,在美洲有广泛的分布(从阿根廷延伸到墨西哥)。但在1850年左右成功入侵到美国(Feijó et al., 2018)。本方案计划分析这种犰狳在其入侵范围(美国)内所面临的气候条件是否与其原生分布区域相似(Feijó et al. 2020)。 分析流程 本方案分为四个步骤(如图1所示): 从GBIF数据库搜索并下载物种分布记录。检查分布记录的准确性并删除有问题的分布记录。从WorldClim下载并提取物种分布点对应的气候数据。解析气候数据并制图。
第一步:使用''rgbif'' 包从GBIF中搜索与目标物种(Dasypus novemcinctus)相关的数据。 在出版物中使用从GBIF获得的数据,需要使用与每个数据集相关联的数字对象标识符 (Digital Object Identifier,DOI),并在文章中正确地引用它(更多内容请参阅https://www.gbif.org/citation-guidelines)。rgibf包中的函数"occ_download()"可以检索DOI,并且更适合于申请大数据使用权限,更多信息请访问https://docs.ropensci.org/rgbif/articles/downloads.html。在这种情况下,读者需要注册GBIF的帐户。 使用函数"occ_search()"从GBIF中检索物种分布记录,并设定参数(hasCoordinate = TRUE)来搜索仅基于“Preserved_Specimen”(即馆藏标本)的具有经纬度信息的数据。"occ_search()"函数的默认值是最多返回500条记录。研究者可以根据需求进行更改,每次查询的最大限制为100,000条分布记录。在本方案中,将搜索并获取1000条目标物种的分布记录。这首先需要检查基于博物馆标本的目标物种在GBIF中有多少地理分布记录;接着是获得GBIF网站中与目标物种相关的唯一物种识别号(key number),该识别号可用于rgibf包的多个功能中。 > key key [1] 2440779 # Dasypus novemcinctus 的物种识别号。 > occ_count(taxonKey=key, georeferenced=TRUE, basisOfRecord= "PRESERVED_SPECIMEN") [1] 1584 # 目前,GBIF数据库中有1584条基于博物馆的记录是具有经纬度信息的。需要注意的是,因为数据库一直在更新,这个数字可能会变动,因此使用本流程过程中可能会有部分数值有一些小范围的变动。 读者可以通过定义特定的参数来定制查询,例如,仅从某个国家、或者基于经纬度限制的某个地区,或者特定的海拔(如1000m以上)。其他选项还包括:大陆、月份、年份等。在Rstudio中输入"?occ_search()"以了解可以选择的所有参数(图3)。
使用参数(hasCoordinate = TRUE)搜索具有经纬度信息的记录,并且只基于有标本的信息"preserved_sample"。> data str(data$data) # 这个命令将检查数据的整体结构(图4)。
str的输出显示数据包括 1000行(每一行代表一个单独的记录)和152列,每个记录包括的信息有国家名称、纬度和经度、海拔、采集时间、博物馆标本馆藏情况等)。根据科学问题,可以用多种方式解析这些数据。> names(data$data) #检查数据的列名。 > head(data$data[,c("countryCode","country")]) # 例如:检查54列和57列的列名(图5)。 ![]() 基于本方案的目的,只需要保留数据表中包含“物种名称”、“经度”、“纬度”、“国家名称”和“记录的不确定性(以米为单位)”(这将允许评估地理坐标的准确性)等数列。为了后续分析的方便,建议用简短好记的名称重命名各列,并使用"dplyr"R包将"species"和"country"作为因子。> datasel% dplyr::select(species, decimalLongitude, decimalLatitude,country,coordinateUncertaintyInMeters) %>% rename(Species = species, Long = decimalLongitude, Lat = decimalLatitude, Uncertain=coordinateUncertaintyInMeters) %>% mutate (Species = as.factor(Species), country= as.factor(country)) > datasel # 现在有了一个包含1000行、5列的data.frame(图 6)。 ![]() 读者已经可以从这个数据集中解析一些信息,可以看看每个国家按降序排列有多少条记录。 > datasel %>% group_by(country) %>% summarize(total= n()) %>% arrange(desc(total)) #图 7 ![]() 为了分析目标物种的原生地和入侵地的气候差异,需要创建一个新的列("范围''),并将记录分为"原生"和"入侵"两类。同时,删除没有国家信息的记录(如上面只有一个记录显示为"NA"的列)。 > datasel% filter(!is.na(country)) %>% mutate(Range = as.factor(if_else (country == "United States of America", "Invasive", "Native"))) 现在,有了名为"datasel"的对象,其中包含从GBIF中提取的Dasypus novemcinctus分布记录。接下来将检查九带犰狳在原生地和入侵地范围内各有多少条分布记录。 > datasel %>% group_by(Range) %>% summarize(total= n()) %>%arrange(desc(total)) #图 8
第二步:使用CoordinateCleaner包删除有问题的分布记录。 由于使用的数据来自GBIF,因此需要仔细检查并删除有问题的分布记录(Zizka et al,2020)。读者可以首先通过将分布记录的空间分布情况可视化地展示在地图上,直观地检查问题数据所在位置。分布记录点的可视化可以通过"maptools"包来实现。例如,如果该物种是一个国家特有的,就可以删除该国以外的分布记录。 > data(wrld_simpl) #加载世界地图。 > plot(wrld_simpl, col="tan2",bg="lightblue", border= NA) #图示地图。 > points(datasel$Long, datasel$Lat, bg="red", col='white', pch=21, cex=1.2) #将从GBIF下载的数据映射到地图上 (图 9)。
从目标物种的物种分布记录图可以看出,大多数记录都符合已知的物种分布范围(从阿根廷到美国),但海洋中出现了经纬度=0的分布点,说这明数据本身存在错误记录。使用以下代码检查有多少记录的经纬度等于零。 > datasel %>% filter(Long==0, Lat==0) # 统计经纬度等于零的记录 (图10) 。
正如读者所看到的,尽管country列显示的是"Mexico'',但有21个个体的经纬度信息被列为零。在R中有一些包可以帮助读者检查最常见的问题(例如scrubr, biogeo)。rgibf包还有一个函数"occ_issues()'',可以帮助检测和删除有问题的记录。这里将使用"CoordinateCleaner"包(Zizka et al. 2019)。在这个包中有几个可用的参数(参见Zizka et al. 2019中的表1),可以通过在Rstudio中输入"?clean_coordinates()"来了解更多的参数选择。本教程将检测记录点坐标是否围绕首都、国家的中心,是否落入海洋,为零,或在饲养动物的博物馆(机构)周围。读者也可以使用世界自然保护联盟(International Union for Conservation of Nature,IUCN)的物种分布范围来剔除分布范围以外的所有记录。> problem_records summary(problem_records) # 46个有问题的分布点被发现(图 11).
图示出问题记录的分布地点。> datasel_problematic plot(wrld_simpl, col="tan2", bg="lightblue", border= NA) # 显示地图。> points(datasel_problematic$Long, datasel_problematic$Lat, bg="red", col='white', pch=21, cex=1) # 将有问题的点映射到地图上 (图 12)。
接下来将简单地排除所有有问题的记录。但在读者的研究中,建议仔细检查它们,特别是当研究物种的分布记录数量有限时。由CoordinateCleaner包标记的一些记录可能是正确的。此外,读者的数据集中可能还存在与分类错误有关的其它问题(例如,标本鉴定错误等)。数据过滤过程需要更仔细地查看整个数据集。使用R包的自动检测应该是检测和删除不准确记录的步骤之一,而不是唯一的步骤。 从数据集中排除所有有问题的记录。 > datasel_clean str(datasel_clean) 下一步是删除坐标中具有较高不确定性的记录。GBIF中的一些记录包含了对坐标的不确定的估计,单位是米。该信息最初记录在"coordinate ununcertainty in meters"栏中,在本方案开始时将其重命名为"uncertainty''。看看有多少个体有这样的信息,并把值的范围图像化。> summary(is.na(datasel_clean$Uncertain)) > hist(datasel_clean$Uncertain/1000, breaks = 100, main="Coordinate uncertainy in km", xlab= "Uncertainty in km") # 注意,GBIF提供的信息是以米为单位的,但是为了评估不确定性,使用千米为单位更加方便。 (图13)。
直方图显示,只有少数地方超过100公里(~1度)。在这里,将简单地删除不确定性超过100公里的记录。但如果有更精确的坐标信息便可以减少这种不确定性。 > datasel_cleanF% filter(is.na(Uncertain)| Uncertain/1000 str(datasel_cleanF) # 图 14。 第三步:使用"Raster"包从WorldClim下载环境数据。 这一步是使用 "Raster"包从 WorldClim下载环境数据。网上有很多关于全球温度、降水、土壤、植被等信息的资源,收集了历史、当前和未来不同时期的气候数据。最常用的气候数据来源是WorldClim,这是一个全球气候数据库,包含19个温度和降水变量,以及太阳辐射、风速和水汽压。每一个变量图层都有四种空间分辨率:10 min、5 min、2.5 min和30 s。其中30 s代表大约1 km2网格,10 min代表大约340 km2网格。更多信息请点击http://www.worldclim.com/version2。本方案将使用R中的“Raster”包下载分辨率为5 min的19个气候图层。 > bioclim names(bioclim) # 图16
接下来可以使用"plot"功能轻松地将这些图层中的信息可视化。需要注意的是,要从WorldClim数据中获得实际的气温值(°C),需要将这些值除以10。> plot(bioclim$bio1/10, main="Annual Mean Temperature") # 气候数据库下载的年均温原始数据需要除以10,以便获得真实的数值, 图 17。 现在,可以使用栅格包中的函数''extract()''从目标物种的每个分布记录中提取当地的环境数据。注意,这段代码可以应用到栅格格式的任何图层。如果读者已经有一个栅格图层保存在电脑中,使用函数"raster()"能够加载它到R中进行分析。可以在''?raster()"中读取更多参数信息。 首先,从GBIF数据集中只选择经度和纬度列。R有一个特定的顺序,经度优先。> longlat data_clim datasel_clim head(datasel_clim) #这个表格现在同时包含了物种记录和环境数据, 图 21。 可以看到入侵区域的年均温度远低于原生区域,还可以通过更改上面代码中的"bio"对象来探索在其它气候变量上的差异。 接下来,使用"ggplot2"软件包中的一些图表,在原生和入侵范围数据中更多地分析犰狳所面临的气候条件。ggplot是一个广泛用于构建图的包。读者可以在ggplot书中阅读更多内容:https://ggplot2-book.org/index.html 从简单的箱线图和散点图开始(图 23和24):# 使用箱线图显示年均温(bio1) > ggplot(datasel_clim, aes(Range, bio1/10)) + geom_boxplot(fill="tan2") + theme_classic() + labs(title= "Annual Mean Temperature", x="", y= "Temperature in C") # 使用箱线图显示平均气温日差(bio2) > ggplot(datasel_clim, aes(Range, bio2/10)) + geom_boxplot(fill="tan2") + theme_classic() + labs(title= "Mean Diurnal Range", x="", y= "Temperature in C") # 使用箱线图显示气温的季节性(bio 7). > ggplot(datasel_clim, aes(Range, bio7/10)) + geom_boxplot(fill="tan2") + theme_classic() + labs(title= "Temperature Seasonality", x="", y= "Temperature in C") # 使用箱线图显示年降雨(bio12) > ggplot(datasel_clim, aes(Range, bio12)) + geom_boxplot(fill="tan2") + theme_classic() + labs(title= "Annual Precipitation", x="", y= "Precipitation (mm)") 致谢 研究团队受到第二次青藏高原科学考察相关专题的资助(No. 2019QZKK0402, 2019QZKK0501);Anderson Feijó博士受到中国科学院国际人才计划,国际博士后奖学金(2021PB0021,2018PB0040)的资助,特此致谢。 参考文献 Bivand, R. and Lewin-Koh, N. (2019). maptools: Tools for handling spatial objects. R package version 0.9-4.Chamberlain, S., Barve, V., Mcglinn, D., Oldoni, D., Desmet, P., Geffert, L. and Ram, K. (2021). rgbif: interface to the global biodiversity information facility API. R package version 3.5.2.Chamberlain, S. and Boettiger, C. (2017). R Python, and Ruby clients for GBIF species occ urrence data. PeerJ PrePrints Chamberlain, S. (2016). scrubr: Clean biological occurrence records. Retrieved from https://cran.r-project.org/package=scrubr.Feijó, A., Patterson, B. D. and Cordeiro-Estrela, P. (2020). Phenotypic variability and environmental tolerance shed light on the nine-banded armadillo Nearctic invasion. Biol Invasions 22: 255-269.Feijó, A., Patterson, B. D. and Cordeiro-Estrela, P. (2018). Taxonomic revision of the long-nosed armadillos, Genus Dasypus Linnaeus, 1758 (Mammalia, Cingulata). PLoS One 13(4): e0195084.Hijmans, R. J. (2019). raster: Geographic data analysis and modeling. R package version 3.0-7. https://CRAN.R-project.org/package=raster.Kassambara, A. (2019). ggcorrplot: Visualization of a Correlation Matrix using 'ggplot2'. R package version 0.1.3. https://CRAN.R-project.org/package=ggcorrplot.Maldonado, C., Molina, C.I., Zizka, A., Persson, C., Taylor, C. M., Albán, J., Chilquillo, E., Ronsted, N. and Antonielli, A. (2015). Estimating species diversity and distribution in the era of Big Data: to what extent can we trust public databases? Glob Ecol Biogeogr 24(8): 973-984.Wickham, H., François, R., Henry, L. and Müller, K. (2019). dplyr: A Grammar of Data Manipulation. R package version 0.8.3. https://CRAN.R-project.org/package=dplyr.Wickham, H. (2016). ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York.Zizka, A., Carvalho, F. A., Calvente, A., Baez-Lizarazo, M. R., Cabral, A., Coelho, J.F.R., Colli-Silva, M., Fantinati, M.R., Fernandes, M.F., Ferreira-Araújo, T., Moreira, F. G. L., Santos, N. M. C., Santos, T. A. B., Santos-Costa, R. C., Serrano, F. C., Silva, A. P. A., Soares, A. S., Souza, P.G. C., Tomaz, E. C., Vale, V.F., Vieira, T.L. and Antonelli, A. (2020). No one-size-fits-all solution to clean GBIF. PeerJ 8: e9916.Zizka, A., Silvestro, D., Andermann, T., Azevedo, J., Ritter, C. D., Edler, D., Farooq, H., Herdean, A., Ariza, M., Scharn, R., Svanteson, S., Wengstrom, N., Zizka, V. and Antonelli, A. (2019). CoordinateCleaner: standardized cleaning of occurrence records from biological collection databases. Methods Ecol Evol 10(5):744-751. |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |