Biomod2 上物种分布模型预备知识
今天学习了一下物种分布模型方面的知识,现在进行一个总结和回顾。
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)
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggjkeh
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13