Biomod2 (上):物种分布模型预备知识总结
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的栅格个数,共900个
plot(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)), # ,1到5重复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)

相关文章:
Biomod2 (上):物种分布模型预备知识总结
Biomod11.栅格数据处理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…...
操作指南:如何高效使用Facebook Messenger销售(二)
上一篇文章我们介绍了使用Facebook Messenger作为销售渠道的定义、好处及注意事项,本节我们将详细介绍怎么将Facebook Messenger销售与SaleSmartly(ss客服)结合,实现一站式管理多主页配图来源:SaleSmartly(…...
计算机三级|网络技术|中小型网络系统总体规划与设计方案|IP地址规划技术|2|3
p3 p4一、中小型网络系统总体规划与设计方案网络关键的设备选型路由器技术指标性能指标综述吞吐量背板能力丢包率时延抖动突发处理能力路由表容量服务质量网管能力可靠性和可用性1 吞吐量指路由器的包转发能力,涉及两个内容:端口吞吐量和整机吞吐量&…...
为什么一定要做集成测试?
集成测试,我们都不陌生,几乎我们产品每天都在进行。但是我们真的有好好思考:为什么一定要做集成测试吗?只是为了简单的将“积木”搭起来就行,还是有什么其他的深意? 深意可能不一定会有,但是意…...
前端:CSS
CSS基本语法规则:选择器若干属性声明 style标签:可以放到代码的任意位置处,head/body中都可以 三种写CSS的方式: 1、内部样式:使用style标签,直接把CSS写到html文件中。此时的style标签可以放到任何位置…...
CMMI—组织级过程定义(OPD)
大家好,我是Doker 多克!一、目的组织级过程定义(Organizational Process Definition, OPD)的目的在于建立并维护一套可用的组织级过程资产、工作环境标准以及团队规则与指南二、简介组织级过程资产使得整个组织具有一致…...
华为OD机试真题Python实现【猜字谜】真题+解题思路+代码(20222023)
猜字谜 题目 小王设计了一个简单的猜字谜游戏,游戏的谜面是一个错误的单词,比如nesw,玩家需要猜出谜底库中正确的单词。 猜中的要求如下: 对于某个谜面和谜底单词,满足下面任一条件都表示猜中: 变换顺序以后一样的,比如通过变换w和e的顺序,nwes跟news是可以完全对应的…...
软测入门(三)Selenium(Web自动化测试基础)
Selenium(Web端自动测试) Selenium是一个用于Web应用程序测试的工具:中文是硒 开源跨平台:linux、windows、mac核心:可以在多个浏览器上进行自动化测试多语言 Selenium WebDriver控制原理 Selenium Client Library…...
备战蓝桥杯——sort函数
备战蓝桥杯——sort函数排列字母lambda匿名函数排列字母 链接: 排列字母 不用多说,很简单的签到题,我们先来了解一下sort函数的用法 list.sort(cmpNone, keyNone, reverseFalse) cmp:进行比较的方法(可以自定义排序的方法,通常…...
华为机试题:HJ86 求最大连续bit数(python)
文章目录(1)题目描述(2)Python3实现(3)知识点详解1、input():获取控制台(任意形式)的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…...
机器学习复习--logistic回归简单的介绍和代码调用
最近需要复习一下机器学习相关知识,记录一下 一、简介 线性回归:h(x)wTxbh(x)w^T x bh(x)wTxb logistic回归就是在线性模型的基础上加上一个sigmoid函数ggg,即h(x)g(wTxb)h(x)g(w^T xb)h(x)g(wTxb)。。。g(z)1/(1e−z)g(z)1/(1e^{-z})g(z)…...
uniapp小程序接入腾讯地图sdk
新建一个项目。配置uniapp配置文件设置小程序的appid注意:匿名用户可能存在地理定位失效。查uniapp官网官网->apiuni.getLocation(OBJECT) 获取当前的地理位置、速度。属性:success匿名函数返回值:uni.getLocation({type: gcj02,success: …...
总结JavaScript中的条件判断与比较运算
一、条件判断 JavaScript 中有三种方法可以用来进行条件判断: 1、使用 if-else 语句。这种方法用于在特定条件为 true 时执行一段代码,否则执行另一段代码。例如: let a 5; if (a > 10) {console.log("a is greater than 10"…...
算法练习-排序(一)
算法练习-排序(一) 文章目录算法练习-排序(一)1 排序算法1.1 冒泡排序1.1.1代码1.2插入排序1.2.1代码1.3 选择排序1.3.1代码1.4归并排序1.4.1代码1.5 快速排序1.5.1 思路1.5.2 代码2 题目2.1 特殊排序2.1.1 题目2.1.2 题解2.2 数组中的第k个最大元素2.2.1 题目2.2.2 题解2.3 对…...
CentOS7.6快速安装Docker
快速安装 官网安装参考手册:https://docs.docker.com/install/linux/docker-ce/centos/ 确定你是CentOS7及以上版本,yum是在线安装! [rootVM-4-5-centos ~]# cat /etc/redhat-releaseCentOS Linux release 7.6.1810 (Core)接下来您只管自上向下执行命令即可&#x…...
CentOS 7安装N卡驱动和CUDA和cuDNN
前言系统一开始是CentOS 7.6,安装依赖时yum给的内核文件的版本号和uname -r的结果不一样,这时不能直接装依赖,装上后后面装驱动时会报错找不到内核头文件(最开始我直接装依赖了,以为高版本兼容低版本,然后装驱动时报错…...
Java开发 - 分页查询初体验
前言在上一篇,我们对es进行了深入讲解,相信看过的小伙伴已经能基本掌握es的使用方法,我们知道,es主要针对的是搜索条件,在这方面es具有无可比拟的优势,但我们也会注意到,有时候搜索条件过于宽泛…...
C语言循环语句do while和嵌套循环语句讲解
C do…while 循环 不像 for 和 while 循环,它们是在循环头部测试循环条件。在 C 语言中,do…while 循环是在循环的尾部检查它的条件。 do…while 循环与 while 循环类似,但是 do…while 循环会确保至少执行一次循环。 语法 C 语言中 do…w…...
【计算机视觉】OpenCV 4高级编程与项目实战(Python版)【7】:拼接图像
我们已经知道,图像是通过数组描述的,那么拼接图像其实就是拼接数组。NumPy提供了2个拼接数组的函数,分别是hstack函数和vstack函数,这两个拼接函数可以将两个数组水平和垂直拼接在一起,也就相当于将两幅图像水平和垂直拼接在一起,本节将详细讲解如何使用这两个函数水平拼…...
王道操作系统课代表 - 考研计算机 第二章 进程与线程 究极精华总结笔记
本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对 操作系统 知识点的理解的总结。希望对新一届的计算机考研人提供帮助!!! 关于对 “进程与线程” 章节知识点总结的十分全面,涵括了《操作系统》课程里的全…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
