Biomod2 (上):物种分布模型预备知识总结

news2024/11/18 4:46:09

Biomod1

      • 1.栅格数据处理
        • 1.1 读取一个栅格图片
        • 1.2 计算数据间的相关系数
        • 1.3 生成多波段的栅格图像
        • 1.4 修改变量名称
          • 1.4.1 计算多个变量之间的相关性
      • 2. 矢量数据处理
        • 2.1 提取矢量数据
        • 2.2 数据掩膜
        • 2.2 栅格计算
        • 2.3 拓展插件的使用
      • 3. 图表绘制
        • 3.1 遥感影像绘制
        • 3.2 柱状图分析图绘制
        • 3.3 在图表中生成标准线(平均值或期望值)
        • 3.4 箱线图绘制
          • 3.4.1 图像优化
      • 4. 线性回归模型

今天学习了一下物种分布模型方面的知识,现在进行一个总结和回顾。

1.栅格数据处理

library(raster)
library(tidyverse)
matrix(1:9, nrow = 3, ncol = 3)

# 生成一个栅格矩阵
raster(matrix(1:9, 3))
raster(matrix(1:9, 3)) %>% plot()

# 生成一个简单的栅格图片
r<-raster(ncol = 30, nrow = 30)
values(r) <- 1:ncell(r) # ncell(r):表示r的栅格个数,共900plot(r)

在这里插入图片描述

生成一个简单的栅格图像:Raster

在这里插入图片描述

自定义一个栅格图像:30*30
在这里插入图片描述

1.1 读取一个栅格图片

# 读取栅格图片
raster(system.file("external/rlogo.grd", package = "raster")) %>% plot() #管道函数

这是R语言自带的图片:
在这里插入图片描述

1.2 计算数据间的相关系数

# 计算相关系数
cor(runif(100,0,10),runif(100,0,10)) # 提供两个长度一直的向量

0.0046693

1.3 生成多波段的栅格图像

r1 <- raster(matrix(runif(900), 30, 30))
r2 <- raster(matrix(runif(900), 30, 30))
r3 <- raster(matrix(runif(900), 30, 30))
r4 <- raster(matrix(runif(900), 30, 30))
r5 <- raster(matrix(runif(900), 30, 30))
# 将五个栅格图层堆叠在一起,形成多波段影像
stack(r1, r2, r3, r4, r5) 
stack(r1, r2, r3, r4, r5) %>% plot()

结果展示:
在这里插入图片描述

1.4 修改变量名称

# 更改变量名称
df <- stack(r1, r2, r3, r4, r5) %>%
  as.data.frame(xy = T) %>%
  as_tibble() %>%
  setNames(c("lon", "lat", "x1", "x2", "x3", "x4", "y")) # 重命名
head(df)

在这里插入图片描述

1.4.1 计算多个变量之间的相关性
## 变量间相关性 法1
cor(df[, c("x1","x2","x3","x4","y")])

## 变量间相关性,法2
#devtools::install_github("danlwarren/ENMTools") # 注意:大概需要安装46个packages
# 安装的时候会出现一些问题,不太好安装
library(ENMTools) 
raster.cor.matrix(stack(r1, r2, r3, r4, r5))

在这里插入图片描述

2. 矢量数据处理

2.1 提取矢量数据

install.packages("mapchina")
library(mapchina)
cd_sf <- mapchina::china %>%
  dplyr::filter(Name_Perfecture == "成都市") %>%
  group_by(Name_Province) %>%
  summarise(geometry = sf::st_union(geometry)) %>%
  ungroup()
colnames(cd_sf) # see all variable names
plot(cd_sf)

在这里插入图片描述

2.2 数据掩膜

# 使用本地数据DEM进行掩膜
china_dem <- raster("D:/Datasets/w001001.adf")
bj_dem <- china_dem %>%
  crop(bj_sf) %>%
  mask(bj_sf)
plot(bj_dem)

2.2 栅格计算

类似于一个二分类问题:

res <- stack(r1, r2) %>%
  calc(x = ., fun = function(x) {
    ifelse(x[1] > 0.5 & x[2] > 0.5, 0, 1) # 对数据进行二分类处理,
                                          # 同时满足返回0,否则返回1
  })
res
plot(res)

在这里插入图片描述
在这里插入图片描述

使用case_when函数能解决上面的问题,更方便

# 使用case_when函数
stack(r1, r2) %>%
  as.data.frame(xy = T) %>% # 将数据转换为数据框格式
  mutate(res = case_when(
    layer.1 > 0.5 & layer.2 > 0.5 ~ 0,
    TRUE ~ 1
  )) %>%
  dplyr::select(1, 2, last_col()) %>%
  as_tibble() %>%
  plot()

getValues(res) %>% head(10)

在这里插入图片描述

2.3 拓展插件的使用

更方便查看和统计数据

# 拓展插件
#install.packages("flextable")
library(flextable)
tibble(model = LETTERS[1:10], mean = runif(10, 0.4, 1)) %>%
  mutate(sd = runif(10, 0.01, 0.1)) %>%
  mutate(weight = mean / sum(mean)) %>%
  regulartable() %>%
  flextable::align(align = "center", part = "all") %>%
  theme_booktabs()

在这里插入图片描述

3. 图表绘制

3.1 遥感影像绘制

library(terra)
library(tidyterra)
library(ggspatial)
ggplot()+
  geom_spatraster(data = rast(bj_dem)) +
  scale_fill_whitebox_c(
    palette = "muted",
    na.value = "white"
  ) +
  annotation_scale() +
  annotation_north_arrow(which_north = "grid")+
  theme()

在这里插入图片描述

3.2 柱状图分析图绘制

AUC、TSS展示

# AUC、TSS绘制
tibble(model1 = LETTERS[1:10], AUC = runif(10, 0.6, 1), 
       TSS = runif(10, 0.6, 1)) %>% 
  ggplot()+
  geom_col(aes(model1,AUC))


##---------------------------------------------------------------------
tibble(model = LETTERS[1:10], AUC = runif(10, 0.6, 1), 
       TSS = runif(10, 0.6, 1)) %>%
  pivot_longer(-model,names_to = "vars",values_to = "value") %>% 
  ggplot()+
  geom_col(aes(model,value,fill = vars),position = 'dodge')+
  ggsci::scale_fill_lancet()+
  labs(x = "建模算法",y = "AUC/TSS",fill = "")+
  theme_light()

在这里插入图片描述

3.3 在图表中生成标准线(平均值或期望值)

# 生成选择线
install.packages("extrafont")
install.packages("showtext")
library(extrafont)
library(showtext)
showtext_auto(enable = TRUE)
font_add("Times", regular ="./font/Times New Roman.ttf") # 字体选择
font_add("KaiTi", regular ="./font/KaiTi.ttf")
font_add("wqy", regular = "wqy-microhei.ttc")

set.seed(123)
tibble(model = LETTERS[1:10], AUC = runif(10, 0.6, 1), 
       TSS = runif(10, 0.6, 1)) %>%
  pivot_longer(-model,names_to = "vars",values_to = "value") %>% 
  ggplot()+
  geom_col(aes(model,value,fill = vars),position = 'dodge')+
  geom_hline(yintercept = 0.6,linetype = 2,size = 0.5)+ # 选择线的位置,即y的大小
  geom_hline(yintercept = 0.75,linetype = 1.5,size = 1)+
  ggsci::scale_fill_lancet()+
  labs(x = "建模算法",y = "AUC/TSS",fill = "")+
  theme_light()+
  theme(axis.text.x = element_text(size = 13, family = "KaiTi",angle = 45),
        axis.title.x = element_text(size = 15,family = "KaiTi"),
        legend.text = element_text(size = 11,family = "Times"),
        axis.text.y = element_text(size = 11,family = "Times"),
        axis.title.y = element_text(size = 13,family = "Times"),
        legend.position = "bottom")

在这里插入图片描述

3.4 箱线图绘制

这是一个非常好用的package:DT,能够更方便的显示数据表

tibble(vars = paste0("vars",rep(1:5,50)),
       model = rep(LETTERS[1:5],each = 50),
       weight = runif(250,0.5,1),
       run = rep(rep(1:5,each = 5),10)) %>% 
  DT::datatable()  # 调用DT中的datatable函数显示数据

在这里插入图片描述

tibble(vars = paste0("vars",rep(1:5, 50)), # ,15重复50次,并与vars粘贴
       model = rep(LETTERS[1:5],each = 50),
       weight = runif(250,0.5,1),
       run = rep(rep(1:5,each = 5),10)) %>% 
  ggplot()+
  geom_boxplot(aes(vars,weight,fill = model),alpha = 0.8)+
  theme_bw()+
  theme(panel.grid = element_blank())+
  theme(text=element_text(size=12,  family="serif"))

在这里插入图片描述

3.4.1 图像优化
# 图像优化
tibble(vars = paste0("vars",rep(1:5,50)),
       model = rep(LETTERS[1:5],each = 50),
       weight = runif(250,0.5,1),
       run = rep(rep(1:5,each = 5),10)) %>% 
  ggplot()+
  geom_boxplot(aes(vars,weight,fill = model),alpha = 0.8)+
  ggsci::scale_fill_lancet()+
  labs(x = "预测变量",y = "贡献度",fill = "")+
  ggthemes::theme_economist_white()+
  theme_bw()+
  theme(axis.text.x = element_text(size = 13, family = "RMN",angle = 45),
        axis.title.x = element_text(size = 15,family = "KT"),
        legend.text = element_text(size = 11,family = "RMN"),
        axis.text.y = element_text(size = 11,family = "RMN"),
        axis.title.y = element_text(size = 13,family = "KT"),
        legend.position = "bottom")

在这里插入图片描述

4. 线性回归模型

# 线性回归模型
lm_df <- data.frame(x = iris$Sepal.Length,y = iris$Sepal.Width)
lm_model <- lm(data = lm_df,y ~ x)
broom::tidy(lm_model)

在这里插入图片描述

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

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

相关文章

C语言循环控制语句Break,goto,continue语句讲解

循环控制语句改变你代码的执行顺序。通过它你可以实现代码的跳转。 C 语言中 break 语句有以下两种用法&#xff1a; 当 break 语句出现在一个循环内时&#xff0c;循环会立即终止&#xff0c;且程序流将继续执行紧接着循环的下一条语句。 它可用于终止 switch 语句中的一个 …

【日志框架-笔记】深入浅出 Log4j,理论-源码-配置

log4j一、log4j 的概述及其入门程序入门程序二、日志输出的需要及PatternLayout类源码分析日志输出的需要PatternLayout类的源码分析三、Log4j 占位符的具体含义四、Log4j 配置文件实操如何对配置文件进行解析的&#xff1f;(LogManager的静态代码块&#xff09;实操五、自定义…

ClickHouse的架构与基本概念

一、ClickHouse的定义 ClickHouse是一个完全的列式分布式数据库管理系统(DBMS)&#xff0c;允许在运行时创建表和数据库&#xff0c;加载数据和运行查询&#xff0c;而无需重新配置和重新启动服务器&#xff0c;支持线性扩展&#xff0c;简单方便&#xff0c;高可靠性&#xf…

spring spring-boot @valid @NotNull @NotEmpty 基本校验使用以及 全局异常优化集成

valid NotNull NotEmpty 一套标准的基础校验&#xff0c;可以将校验注解和附带错误信息添加到请求入参上即可完成校验&#xff0c;可以去除简单的校验代码&#xff0c;节省一定的时间和代码量 Maven 依赖 spring-boot <dependency><groupId>org.springframewor…

【已解决】VM中安装的Ubuntu窗口太小、无法和Windows复制粘贴

按理说窗口都是铺满VM的&#xff0c;可是有时候安装Ubuntu之后发现小太了&#xff0c;就800*600&#xff08;4:3&#xff09; 1 窗口太小方法一 在桌面右键&#xff0c;打开display settings 调整resolution&#xff0c;选择你需要的即可&#xff0c;但是这样的调整不是很完…

结构体占用内存大小如何确定?-->结构体字节对齐 | C语言

目录 一、什么是结构体 二、为什么需要结构体 三、结构体的字节对齐 3.1、示例1 3.2、示例2 3.3、示例3 3.4、示例4 3.5、示例5 四、结构体字节对齐总结 一、什么是结构体 结构体是将不同类型的数据按照一定的功能需 求进行整体封装&#xff0c;封装的数据类型与大小均…

日期:Date,SimpleDateFormat常见API以及包装类

一.Date类 package com.gch.d1_date;import java.util.Date;/**目标:学会使用Date类处理时间,获取时间的信息*/ public class DateDemo1 {public static void main(String[] args) {// 1.创建一个Date类的对象:代表系统此刻日期时间对象Date d new Date();System.out.println(…

什么是pod类型

很久很久以前&#xff0c;C 语言统一了江湖。几乎所有的系统底层都是用 C 写的&#xff0c;当时定义的基本数据类型有 int、char、float 等整数类型、浮点类型、枚举、void、指针、数组、结构等等。然后只要碰到一串01010110010 之类的数据&#xff0c;编译器都可以正确的把它解…

做软件测试,如何才能实现月入20K?

听我的&#xff0c;测试想要月入20k。 首先你要去大厂&#xff0c;不在大厂起码也得在一线城市&#xff0c;北上广深。 二线城市的话成都、杭州最好。 不然的话想都不要想。 像我之前整理过成都的公司&#xff0c;除了字节跳动、蚂蚁金服、滴滴、美团、京东、平安、字节跳动…

超简单的计数排序!!

假设给定混乱数据为&#xff1a;3&#xff0c;0&#xff0c;1&#xff0c;3&#xff0c;6&#xff0c;5&#xff0c;4&#xff0c;2&#xff0c;1&#xff0c;9。 下面我们将通过使用计数排序的思想来完成对上面数据的排序。(先不谈负数) 计数排序 该排序的思路和它的名字一样…

Java——图像渲染

题目链接 leetcode在线oj题——图像渲染 题目描述 有一幅以 m x n 的二维整数数组表示的图画 image &#xff0c;其中 image[i][j] 表示该图画的像素值大小。 你也被给予三个整数 sr , sc 和 newColor 。你应该从像素 image[sr][sc] 开始对图像进行 上色填充 。 为了完成…

互联网医院系统软件开发|互联网医院管理系统开发的好处

互联网医院一直是现在的热门行业&#xff0c;很多的医院已经开发了互联网医院&#xff0c;并且已经在良好的运行中&#xff0c;而有一些医院和企业正在开发中&#xff0c;或者打算开发互联网医院系统&#xff0c;其实这些企业和医院还是很有远见的&#xff0c;因为他们知道并了…

Swift 第三方 播放器AliyunPlayer(阿里云播放器)(源码)

一直觉得自己写的不是技术&#xff0c;而是情怀&#xff0c;一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的&#xff0c;希望我的这条路能让你们少走弯路&#xff0c;希望我能帮你们抹去知识的蒙尘&#xff0c;希望我能帮你们理清知识的脉络&#xff0…

卡尔曼滤波——一种基于滤波的时序状态估计方法

文章目录1. Kalman滤波及其应用2. Kalman原理公式推导&#xff1a;Step 1&#xff1a;模型建立Step 2&#xff1a;开始Kalman滤波Step 3&#xff1a;迭代滤波本文是对 How a Kalman filter works, in pictures一文学习笔记&#xff0c;主要是提炼核心知识&#xff0c;方便作者快…

已解决pip install wxPython模块安装失败

已解决&#xff08;pip install wxPython安装失败&#xff09;error: legacy-instal1-failure Encountered error while trying to install package.wxPython note: This is an issue with the package mentioned above&#xff0c;not pip. hint : See above for output from …

如何用AST还原某音的JSVMP

1. 什么是JSVMP vmp简单来说就是将一些高级语言的代码通过自己实现的编译器进行编译得到字节码&#xff0c;这样就可以更有效的保护原有代码&#xff0c;而jsvmp自然就是对JS代码的编译保护&#xff0c;具体的可以看看H5应用加固防破解-JS虚拟机保护方案。 如何区分是不是jsv…

OpenFeign 切换HttpClient遇到的问题

背景 OpenFeign支持三种Http请求方式&#xff0c;默认情况下通过jdk中的HttpURLConnection向下游服务发起http请求&#xff08;详见下图&#xff0c;源码详见feign.Client.Default&#xff09;&#xff0c; 默认的Client 采用 HttpURLConnection&#xff0c; 这种是无法复用的…

为什么一定要做集成测试?

集成测试&#xff0c;我们都不陌生&#xff0c;几乎我们产品每天都在进行。但是我们真的有好好思考&#xff1a;为什么一定要做集成测试吗&#xff1f;只是为了简单的将“积木”搭起来就行&#xff0c;还是有什么其他的深意&#xff1f; 深意可能不一定会有&#xff0c;但是意…

qt5.15 快速安装 国内源

1 qt5.15 安装问题 最大的问题就是需要在线下载与安装。即使挂了科学上网&#xff0c;国外的服务器下载速度也还是超级慢。 在网上找了各种解决办法后&#xff0c;终于找到一个快速下载安装的办法。 2 安装器下载 阿里源、清华源都没有Windows的安装器了&#xff0c;在腾讯…

IPv4地址细讲

文章目录一、IPv4地址简介二、IPv4地址的表示方法点分十进制记法三、IP地址的分类四、特殊IPv4地址&#xff1a;全 “0” 和全 “1”五、常用的三类IP地址使用范围六、五类IP地址的范围一、IPv4地址简介 IPv4地址分5类&#xff0c;每一类地址都由固定长度的字段组成&#xff1…