R语言【文章复现】——集成式地绘制高分辨率的多样性分布图,对方法的检验和优化,以及处理思路的思考

这篇具有很好参考价值的文章主要介绍了R语言【文章复现】——集成式地绘制高分辨率的多样性分布图,对方法的检验和优化,以及处理思路的思考。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考文献

本文对一篇 2022 年发表在 New Phytologist 的绘图方法文章中的技术路线进行复现。

An integrated high-resolution mapping shows congruent biodiversity patterns of Fagales and Pinales


Summary

文中,作者针对在全球尺度上绘制物种分布图提出了一种全新的方法。该方法整合了 多边形绘图polygon mapping)和 物种分布模型species distribution modellingSDM)。

多边形绘图算法 中,考虑了:

  • 分布距离distances of occurrences) 
  • 分布嵌套nestedness of occurrences

物种分布模型 中,考虑了 :

  • 多重建模算法multiple modelling algorithm
  • 复杂度complexity levels
  • 伪非分布区选择pseudo-absence selections

Materials and Methods

该新方法的整体流程有 5 个步骤:

  1. 数据收集data collection
  2. 数据清洗data cleaning
  3. 参数优化parameter optimization
  4. 集成绘图mapping by integration of SDM and polygons
  5. 地图检验map validating

下面进入正题。


新方法的步骤流程及细节

1. 数据收集与整合(Data collection and merging)

 文中,作者通过手动或R包从48个数据库中获取数据。为了减小因为某些类群的观测数据很少而低估了该类群的分布范围的风险,作者不仅收集了使用文字记录的数据库,还从已存在的分布图上获取分布记录,包括raster、shape甚至是专家手绘的地图最后,所有的分布数据都转换为使用十进制 经/纬度格式 的 EPSG 4326有关EPSG 4326的内容请自己查阅。

那么,实际的情况到底是怎样的呢?我们一起来看脚本  1_get_species_occurences.R

该脚本是作者通过 rgbif BIEN 来收集数据,其中下面两行表示搜集的数据只包含3列内容:物种名Taxon),经度x)和 维度y)。

colnames(GBIFgetAll) <- c("Taxon", "x", "y")

colnames(BIENgetAll) <- c("Taxon", "x", "y")

同时,从给出的示例数据集 allGBIFandBIEN_Occurrences.rds 也能看出来:

Taxon x

y

1 Pinus halepensis Mill. 0.069 38.645

2. 数据清洗(Data cleaning)

文中介绍的数据清洗可以分为四个步骤:

  • 首先是针对名称进行的处理,
  • 然后是针对坐标进行的处理,
  • 接着是根据物种原生区进行处理,
  • 最后是根据模型运算要求进行处理。

2.1. 针对数据中名称部分的清洗

根据 Catalogue of Life 对数据中 物种的同源异名(synonymous)、未处理名称(unresolved)、错误拼写(misspelled)或错误名称(wrong)和 错误或缺失的科名 进行标准化、更正或增加。

之后如下处理:

  • 只保留具有标准物种名称的记录
  • 去除所有重复记录
  • 将亚种记录视为种级记录
  • 去除所有杂交种记录

2.2. 针对数据中坐标部分的清洗

为了剔除人工栽培的分布记录和坐标点错误的记录,文中作如下处理:

  • 去除:以国家首都为中心,半径 10km 内的记录。
  • 去除:以国家中心为中心,半径 5km 内的记录。
  • 去除:以多样性研究机构为中心,半径 1km 内的记录。
  • 去除:以GBIF总部为中心,半径 0.5° 内的记录。
  • 去除:以 坐标点 0,0为中心,半径 0.5° 内的记录。

2.3. 根据物种原生区对数据进行清洗

POWO 上获取所有物种的区级原生分布区,在原生分布区的基础上向外延伸 ,如果记录未在范围内则去除。

如果此时某物种的记录有超过 50% 已经被去除,那么就要人工进行检查,确保没有丢弃好数据。

2.4. 根据模型运算要求对数据进行清洗

物种分布记录的不均匀性可能会增加模型运算的不准确性,还可能会增加因为零散分布的记录导致 SDM 出现权重偏差,进而导致低估了物种的分布范围。

因此,针对物种记录数量 >50,去除间距小于 0.1° 的记录。


2.#. 数据清洗的流程重现

作者提供了 2.1_occurrences_nameCorrection_primaryCleaning.R2.2_(optional)_occurrences_deepCleaning.R 两个脚本进行数据清洗。下面笔者将逐行进行分析:

2.#.1. occurrences_nameCorrection_primaryCleaning.R

首先,它要求设置 工作路径wkpath),随即生成数据清洗后的保存路径:

wkpath <- "D:/Work_Space/My-scripts/R/gdplants-main"
setwd(wkpath)

name.correct.folder <- "./2.1_name_correction/"
cc.cleaned <- "./2.2_cleaning_cc/cleaning_cc_occurrences/"
cc.cleaned.report <- "./2.2_cleaning_cc/cleaning_cc_report/"
cc.cleaned.detail <- "./2.2_cleaning_cc/cleaning_cc_detail/"

示例使用的数据应该有以下三列"sciName", "x", "y",分别表示原始的物种名经度纬度

occ.all <- readRDS("./example/allGBIFandBIEN_Occurrences.rds")

此时,在 R 的工作环境里应该包含下图中的变量:

R语言【文章复现】——集成式地绘制高分辨率的多样性分布图,对方法的检验和优化,以及处理思路的思考,R语言,r语言,开发语言

数据清洗中需要用到第三方的软件包,脚本中也给出了相应的代码:

options(repos=structure(c(CRAN="https://stat.ethz.ch/CRAN/")))

packages <- c("Taxonstand", "CoordinateCleaner", "rgdal", "sp")

for (p in packages) {
  if(!library(package = p, logical.return = TRUE, character.only = TRUE)){
    install.packages(p)
    library(package = p, character.only = TRUE)
  } else {   
    library(package = p, character.only = TRUE) 
  }
}

注意Taxonstandrgdal 已经在CRAN下架了,官方建议使用 WorldFlorasf/terra 替换。但是仍可在网页上搜索资源进行安装。

加载好软件包后,继续创建输出的保存路径文件夹:

if(!dir.exists(name.correct.folder)) {dir.create(name.correct.folder, recursive = T)}
if(!dir.exists(cc.cleaned)) {dir.create(cc.cleaned, recursive = T)}
if(!dir.exists(cc.cleaned.report)) {dir.create(cc.cleaned.report, recursive = T)}
if(!dir.exists(cc.cleaned.detail)) {dir.create(cc.cleaned.detail, recursive = T)}

这里已经为两个脚本都准备好了文件下,下面就正式进行清洗工作了,让我们一起来梳理脚本的处理思路。


2.#.1.1. 针对数据中名称部分的清洗
spname0 <- as.character(unique(na.omit(occ.all[ ,"Taxon"]$Taxon)))

name.correct0 <- TPL(spname0)

首先将采集数据中的 物种名 提取并去重,然后使用 Taxonstand::TPL() 进行物种名匹配。

因为 The Plant List 已经停止提供服务了,所以建议使用 WorldFlora。因为下载速度太慢,笔者使用了 U.Taxonstand

library(U.Taxonstand)
library(openxlsx)
dat1 <- read.xlsx("D:/ALL_Softwares/R-4.2.0/library/U.Taxonstand/Database-main/Plants_WFO_database_20220701/Plants_WFO_database_part1.xlsx")
dat2 <- read.xlsx("D:/ALL_Softwares/R-4.2.0/library/U.Taxonstand/Database-main/Plants_WFO_database_20220701/Plants_WFO_database_part2.xlsx")
dat3 <- read.xlsx("D:/ALL_Softwares/R-4.2.0/library/U.Taxonstand/Database-main/Plants_WFO_database_20220701/Plants_WFO_database_part3.xlsx")
WFO_database <- rbind(dat1, dat2, dat3)
rm(dat1, dat2, dat3)

spname0 <- as.character(unique(na.omit(occ.all[ ,"Taxon"]$Taxon)))
# name.correct0 <- TPL(spname0)

name.correct0 <- nameMatch(spList = spname0, spSource = WFO_database)
name.correct0['Taxon'] <- paste(name.correct0$Submitted_Name, name.correct0$Submitted_Author)

name.correct <- merge(occ.all, name.correct0)

这样,原始数据中就增加了匹配后的名称信息。具体的数据结构请参考R语言实践——U.Taxonstand标准化动植物科学名。

接着挑选出所有匹配到接受名的记录:文章来源地址https://www.toymoban.com/news/detail-786409.html

name.corrected <- name.correct[which(is.na(name.correct$New_name) | !grepl("Accepted name needs to be determined", name.correct$New_name

到了这里,关于R语言【文章复现】——集成式地绘制高分辨率的多样性分布图,对方法的检验和优化,以及处理思路的思考的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flutter如何获取屏幕的分辨率和实际画布的分辨率

    在Flutter中,你可以使用MediaQuery来获取屏幕的分辨率和实际画布的分辨率。 要获取屏幕的分辨率,你可以使用MediaQuery.of(context).size属性,它返回一个Size对象,其中包含屏幕的宽度和高度。下面是一个获取屏幕分辨率的例子: 要获取实际画布的分辨率,你可以使用MediaQuery.of

    2024年02月09日
    浏览(37)
  • 【视频超分辨率】视频超分辨率的介绍(定义,评价指标,分类)

    视频超分率起源于图像超分率,旨在根据已有的低分辨率视频序列生成具有真实细节和内容连续的高分辨率视频序列。视频超分辨率技术可以将 低分辨率(低清晰度)视频转换为高分辨率(高清晰度)视频 ,以提供更多的细节和清晰度。 视频超分辨率技术主要分为 传统方法

    2024年02月04日
    浏览(37)
  • 显示器尺寸 和 屏幕分辨率 和 有源信号分辨率 关系

    1、 显示器尺寸尺寸:常用显示器对角线长度表示 。比如,23.8寸显示器指的是显示器的液晶屏对角线长度是23.8英寸。 只靠英寸并不能决定显示屏长宽,通常,我们还要知道其长宽比,比如16:9。通过长宽比例,以及斜边长度就可算得当前屏幕的尺寸。一块显示屏显示屏幕的

    2024年02月09日
    浏览(40)
  • 手机怎么提高图片分辨率?手机怎么改照片分辨率dpi?

    现在有很多考试可以通过手机提交报名,在报名时需要上传证件照,但是最近有很多小伙伴说上传的照片尺寸、背景颜色都符合要求了但是还是提示上传失败,那么这种情况往往就是由于照片分辨率不符合要求导致的,那么手机怎么提高图片分辨率呢?今天来给大家分享一款

    2024年02月16日
    浏览(40)
  • 照片怎么改像素分辨率?照片分辨率怎么调成300dpi?

    照片分辨率怎么更改?一般在打印照片时经常会遇到对照片dpi有要求,如果达不到要求的数值就需要提高照片分辨率,我们电脑上的图片大部分是96dpi,在打印时经常需要300dpi,那么照片分辨率怎么调成300dpi?下面给大家推荐一款在线 修改分辨率 工具,操作简单,下面一起来

    2024年02月16日
    浏览(40)
  • Arch Linux高分辨率屏幕设置分辨率及dpi缩放

    由于笔记本原生屏幕分辨率太渣,于是购入一块2440x1400、14英寸副屏。窗口管理器为dwm,使用 startx 命令进入环境 注 :此文不会改变tty的设置,仅设置xorg下某用户的个人设置 关闭笔记本屏幕,只使用副屏 副屏分辨率设置为最高,且屏幕缩放设置为合适大小 高分辨率小屏幕导致

    2024年02月05日
    浏览(48)
  • 图片1920x1080分辨率怎么调 ?图片如何修改分辨率?

    图片是我们日常生活中经常需要使用到的东西,但是在使用图片时我们会遇到需要调图片分辨率的情况,有很多小伙伴对于图片分辨率这个概念并不了解,今天就来为大家具体介绍一下图片1920x1080怎么调以及怎么给图片 修改分辨率 ,下面一起来看一下吧。 图片1920x1080分辨率

    2024年02月16日
    浏览(37)
  • android获取屏幕分辨率的正确方法;获取到分辨率(垂直方向像素)的不正确

    我通过下面的方法去获取屏幕分辨率的,但获取到的分辨率有时会不准确。原因是此方法有时候会忽略一些布局或控件的高度,从而得不到正确的高度。 而通过另外一个方法则没有上述那种问题,可以获取到正确的屏幕分辨率。

    2024年02月14日
    浏览(42)
  • 如何在Python中获取图片分辨率?——Python实现获取图片分辨率的代码及详解。

    如何在Python中获取图片分辨率?——Python实现获取图片分辨率的代码及详解。 在进行图片处理或者图片分析的时候,获取图片的分辨率信息是必不可少的。Python提供了许多库可以方便地获取图片的分辨率信息。在本文中,我们将详细介绍如何使用Python实现获取图片分辨率的功

    2024年02月07日
    浏览(36)
  • RK3588实用技巧:查看显示器支持的分辨率,基于weston修改分辨率输出

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/133685938 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…   RK3588基于weston,不能自适应

    2024年02月08日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包