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

news2024/10/5 2:50:21

参考文献

本文对一篇 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 的工作环境里应该包含下图中的变量:

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

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标准化动植物科学名。

接着挑选出所有匹配到接受名的记录:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1385867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大白菜U盘安装系统-戴尔电脑

1. 把U盘插入电脑&#xff0c;启动盘去大白菜官网找&#xff0c;镜像可以去微软官网下&#xff0c;想要专业版的网上找资源。 2. 重启电脑&#xff0c;等出现log之后狂按F12&#xff0c;进入BOSS模式。 3. 选择UEFI...也就是下面白色的&#xff0c;按下回车。 4. 选第一个 5.…

数据结构_C++语言描述_高教出版社

contents 前言一、绪论1.1 数据分析结构存储算法计算1.1.1 逻辑结构1.1.2 存储结构1.1.3 算法实现 1.2 数据类型1.3 算法方法 二、线性表2.1 线性表的逻辑结构2.2 线性表的存储结构2.2.1 顺序存储结构2.2.2 链式存储结构 2.3 线性表的操作算法2.3.1 顺序表的操作算法2.3.2 链表…

RK3568驱动指南|驱动基础进阶篇-进阶3 驱动代码使用Makefile的宏

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

Nvidia Jetson AGX Orin使用CAN与底盘通信(ROS C++ 驱动)

文章目录 一、Nvidia Jetson AGX Orin使用CAN通信1.1 CAN使能配置修改GPIO口功能1.2 can收发测试 二、通过CAN协议编写CAN的SocketCan ROS1驱动程序2.1 通讯协议2.2 接收数据节点2.3 发送数据节点2.4 功能包配置 三、ROS2驱动程序 一、Nvidia Jetson AGX Orin使用CAN通信 参考…

linux手动安装 vscode-server

适用场景 很多时候&#xff0c;我们需要在本机&#xff08;比如windows&#xff09;通过remote ssh访问远程服务器&#xff08;一般是ubuntu&#xff09;&#xff0c;但经常出现 vscode 一直连不上远程服务器的情况&#xff0c;看一下 log&#xff1a; 这个log表示远程服务器…

【2023年收入最高的10种编程语言】

在过去的一年时间里&#xff08;2022 年 10 月 1 日到 2023 年 10 月 1 日&#xff09; &#xff0c;DevJobsScanner 分析了来自世界各地的超过 1000 万份开发工作机会&#xff0c;以了解市场以及最热门、薪酬最高的编程语言。值得注意的是&#xff0c;本项研究只关注了来自美国…

【Linux】网络诊断 traceroute命令详解

目录 一、traceroute概述 1.1 traceroute命令简介 1.2 命令格式 1.3 原理 1.4 命令功能 二、使用实例 实例1&#xff1a;traceroute 用法简单、最常用的用法 实例2&#xff1a;跳数设置 实例3&#xff1a;设置探测数据包数量 实例4&#xff1a;显示IP地址&#xff0c…

什么是SAMBA?如何配置?方法来了!

/bin/bash 目录 SAMBA SMB协议 SMB连接过程 samba主要有两个进程 Linux下搭建samba服务器实现文件共享 Linux客户端&#xff1a; Windows客户端&#xff1a; SAMBA samba是SMB文件共享协议的应用软件&#xff0c;可以让Linux系统和Windows系统之间相互共享资源。 在Lin…

3d模型素材亮度和对比度如何调整呢?

1、修改材质参数&#xff1a;打开3ds Max后&#xff0c;选择要调整亮度和对比度的3D模型素材。然后&#xff0c;进入材质编辑器&#xff0c;选择相应的材质球。在材质编辑器中&#xff0c;你可以调整材质的漫反射、反射和高光等参数&#xff0c;这些参数将影响模型的亮度和对比…

K8S的dashboard使用账号密码登录

原文网址&#xff1a;K8S的dashboard使用账号密码登录-CSDN博客 简介 本文介绍K8S的dashboard使用账号密码登录的方法。 ----------------------------------------------------------------------------------------------- 分享Java真实高频面试题&#xff0c;吊打面试官&…

美颜技术对比:如何根据项目选择不同的美颜SDK?

各位开发者应该非常清楚&#xff0c;为了在项目中取得最佳效果&#xff0c;选择合适的美颜SDK至关重要。本篇文章&#xff0c;笔者将通过对比不同美颜SDK的关键特性&#xff0c;帮助开发者根据项目需求做出明智的选择。 一、技术原理对比 不同的美颜SDK可能采用不同的技术原理…

如何使用CFImagehost结合内网穿透搭建私人图床并无公网ip远程访问

[TOC] 推荐一个人工智能学习网站点击跳转 1.前言 图片服务器也称作图床&#xff0c;可以说是互联网存储中最重要的应用之一&#xff0c;不仅网站需要图床提供的外链调取图片&#xff0c;个人或企业也用图床存储各种图片&#xff0c;方便随时访问查看。不过由于图床很不挣钱&a…

大数据开发之Hive(压缩和存储)

第 9 章&#xff1a;压缩和存储 Hive不会强制要求将数据转换成特定的格式才能使用。利用Hadoop的InputFormat API可以从不同数据源读取数据&#xff0c;使用OutputFormat API可以将数据写成不同的格式输出。 对数据进行压缩虽然会增加额外的CPU开销&#xff0c;但是会节约客观…

Qt QTableView和QStandardItemModel包含搜索出现的文本及隐藏顶层节点

前言 使用Qt进行开发时&#xff0c;树结构一般是使用QTreeWidget或使用QTreeViewQStandardItemModel结合。 查找 如果要进行查找树的所有项中&#xff0c;是否包含某文本&#xff0c;就需要遍历。 QTreeWidget查找 以下是使用QTreeWidget进行查找&#xff1a; 首先初始化一…

Python 将列表数据写入文件(txt, csv,excel)

写入txt文件 def text_save(filename, data):#filename为写入txt文件的路径&#xff0c;data为要写入数据列表. file open(filename,a) for i in range(len(data)): s str(data[i]).replace([,).replace(],)#去除[],这两行按数据不同&#xff0c;可以选择 s s.replace(&quo…

全网首发!Yolov8_obb旋转框检测(DOTA1.0数据集)

一、YOLOv8环境搭建 &#xff08;1&#xff09;Pytorch的安装 如果你的环境没有部署请参考本人文章&#xff1a;NLP笔记&#xff08;2&#xff09;——PyTorch的详细安装_安装torchnlp-CSDN博客 &#xff08;2&#xff09;下载最新的Yolov8-obb代码&#xff1a; https://git…

MongoDB - 库、集合、文档(操作 + 演示 + 注意事项)

目录 一、MongoDB 1.1、简介 a&#xff09;MongoDB 是什么&#xff1f;为什么要使用 MongoDB&#xff1f; b&#xff09;应用场景 c&#xff09;MongoDB 这么强大&#xff0c;是不是可以直接代替 MySQL &#xff1f; d&#xff09;MongoDB 中的一些概念 e&#xff09;Do…

如何用Docker部署Nacos服务并结合内网穿透实现公网访问管理界面?

文章目录 1. Docker 运行Nacos2. 本地访问Nacos3. Linux安装Cpolar4. 配置Nacos UI界面公网地址5. 远程访问 Nacos UI界面6. 固定Nacos UI界面公网地址7. 固定地址访问Plik Nacos是阿里开放的一款中间件,也是一款服务注册中心&#xff0c;它主要提供三种功能&#xff1a;持久化…

HCIA的网络地址转换NAT

NAT&#xff1a;网络地址转换 功能&#xff1a; 1.将大量的私有地址转换成公有地址&#xff08;节约IP地址&#xff09; 2.将一个IP地址转换成另一个IP地址&#xff08;公有的&#xff09;&#xff08;增加内部网络设备的安全性&#xff09;&#xff1a;比如有一个内网&#xf…

【数据结构】C语言实现顺序栈

顺序栈的C语言实现 导言一、栈的分类二、顺序栈2.1 顺序栈的数据类型2.2 顺序栈的初始化2.3 栈的判空2.5 顺序栈的进栈2.6 顺序栈的出栈2.7 顺序栈的查找2.8 顺序栈的另一种实现方式2.9 顺序栈的销毁 结语 导言 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff0…