使用Maxent模型预测适生区

news2024/11/24 15:37:19

Maxent模型因其在潜在适生区预测中稳健的表现,时下已经成为使用最广泛的物种分布模型。biomod虽然可以通过集成模型的优势来弥补数据量较小的劣势,但是其在使用和运算时间上的优势远不如Maxent,虽然最新的biomod2已经修复了一些bug,不过在使用中仍是会遇到很多问题。

1 Maxent模型

Maxent模型即最大熵模型,与热力学概念类似,”“在此的含义为随机变量不确定性的度量,最大熵模型是指在学习模型时,熵最大的模型,即在满足所有模型约束条件下,模型的熵最大。对一个随机事件的概率分布进行预测时,预测应当满足全部已知的约束,而对未知的情况不要做任何主观假设。在这种情况下,概率分布最均匀,预测的风险最小,因此得到的概率分布的熵是最大。
所需数据集:
物种分布数据:occ_final
气候因子图层:clim_layer

2 示例

2.1 数据准备


# 1.
# 设立研究区范围:80~120, -10~50
studyArea <- crop(clim_layer,c(80, 120, -10, 50))

dir.create("studyarea", showWarnings = TRUE, recursive = FALSE,mode = "0777")
writeRaster(studyArea,
            ## 文件命名
            filename=paste0("./studyarea/",names(studyArea),".asc"), 
            format="ascii", ## 输出编码格式
            bylayer=TRUE, ## 保存图层
            overwrite=T) ##覆盖已有文件

# 2.
# 生成背景点
bg <- sampleRandom(x=studyArea,
                   size=10000,
                   na.rm=T, #removes the 'Not Applicable' points  
                   sp=T) # return spatial points 

plot(studyArea[[1]])             #研究区图层
plot(bg,add=T)                   #背景点,默认黑色
plot(occ_finnal,add=T,col="red") #物种分布点

# 3.
# 拆分数据集
#设置seed
set.seed(1)

#随机生成数据索引
selected <- sample(1:nrow(occ_finnal), nrow(occ_finnal) * 0.5) 

#训练集
occ_train <- occ_finnal[selected, ] 

#评估集
occ_test <- occ_finnal[-selected, ]

head(occ_train)
head(occ_test)

#提取经纬度向量
occ_train = occ_train[2:3]
occ_test = occ_test[2:3]

#查看
head(occ_train)
head(occ_test)

#提取训练集的bio数据
p_train <- extract(clim_layer, occ_train)

#提取评估集的bio数据
p_test <- extract(clim_layer, occ_test)

#提取背景点的bio数据
a <- extract(clim_layer, bg)

#查看
head(p_train)
head(a)
head(p_test)

# 4.
# 数据集整合
pa <- c(rep(1, nrow(p_train)), rep(0, nrow(a)))

pder <- as.data.frame(rbind(p_train, a))

2.2 建模

# 5.
# 模型模拟
#加载包
library(dismo)

#创建输出保存目录
dir.create("output", 
           showWarnings = TRUE, 
           recursive = FALSE,
           mode = "0777")

setwd("./output/")

dir.create("maxent_outputs", 
           showWarnings = TRUE, 
           recursive = FALSE,
           mode = "0777")

#建模
mod <- maxent(x=pder, ## env conditions
              p=pa,   ## 1:presence or 0:absence 
              path=paste0("maxent_outputs"), ## folder for maxent output; 
              # if we do not specify a folder R will put the results in a temp file, 
              # and it gets messy to read those. . .
              args=c("responsecurves") ## parameter specification
              )
              
#查看模型结果信息
mod@results

2.3 情景模拟

#------------------------------------------------------------------------------------------------------#
#                                         step 2 预测当前1970~2000                                     #
#------------------------------------------------------------------------------------------------------#
setwd("E:/Class_YNU/Biogeography/Finalpaper/Maxent/use_data/his/final_his/")
curr_list <- dir("./", full.names=T, pattern='.tif')
curr_layer <-  stack(curr_list)

studycurr <- crop(curr_layer,c(80, 120, -10, 50))

writeRaster(studycurr,
            ## 文件命名
            filename=paste0("./",names(studycurr),".asc"), 
            format="ascii", ## 输出编码格式
            bylayer=TRUE, ## 保存图层
            overwrite=T) ##覆盖已有文件

#将模型投射到研究区
ped_current <- predict(mod, studycurr)
plot(ped_current,main = "Current: 1970~2000")

#模型评估
e_curr <- evaluate(mod, p=occ_test, a=bg, x=curr_layer)
e_curr
thd_curr <- threshold(e_curr, "no_omission")


#------------------------------------------------------------------------------------------------------#
#                                           step 3 预测过去LGM                                         #
#------------------------------------------------------------------------------------------------------#
setwd("E:/Class_YNU/Biogeography/Finalpaper/Maxent/use_data/LGM/")
lgm_list <- dir("./", full.names=T, pattern='.tif')
lgm_layer <-  stack(lgm_list)

studyLGM <- crop(lgm_layer,c(80, 120, -10, 50))

writeRaster(studyLGM,
            ## 文件命名
            filename=paste0("./",names(studyLGM),".asc"), 
            format="ascii", ## 输出编码格式
            bylayer=TRUE, ## 保存图层
            overwrite=T) ##覆盖已有文件

#将模型投射到研究区
ped_LGM <- predict(mod, studyLGM)
plot(ped_LGM,main = "LGM")

#模型评估
e_lgm <- evaluate(mod, p=occ_test, a=bg, x=lgm_layer)

#适生区增减
thd_lgm <- threshold(e_lgm, "no_omission")
plot(ped_LGM >= thd_curr)

#------------------------------------------------------------------------------------------------------#
#                                           step 4 预测过去MH                                         #
#------------------------------------------------------------------------------------------------------#
setwd("E:/Class_YNU/Biogeography/Finalpaper/Maxent/use_data/MH/")
mh_list <- dir("./", full.names=T, pattern='.tif')
mh_layer <-  stack(mh_list)

studyMH <- crop(mh_layer,c(80, 120, -10, 50))

writeRaster(studyMH,
            ## 文件命名
            filename=paste0("./",names(studyMH),".asc"), 
            format="ascii", ## 输出编码格式
            bylayer=TRUE, ## 保存图层
            overwrite=T) ##覆盖已有文件

#将模型投射到研究区
ped_MH <- predict(mod, studyMH)
plot(ped_MH,main = "Mid Holocene")
e_MH <- evaluate(mod, p=occ_test, a=bg, x=mh_layer)
thd_mh <- threshold(e_MH, "no_omission")

#------------------------------------------------------------------------------------------------------#
#                                        step 5 预测将来SSP126                                         #
#------------------------------------------------------------------------------------------------------#
setwd("E:/Class_YNU/Biogeography/Finalpaper/Maxent/use_data/SSP126/21_40/")
ssp126_list <- dir("./", full.names=T, pattern='.tif')
ssp126_layer <-  stack(ssp126_list)

study126 <- crop(ssp126_layer,c(80, 120, -10, 50))

writeRaster(study126,
            ## 文件命名
            filename=paste0("./",names(study126),".asc"), 
            format="ascii", ## 输出编码格式
            bylayer=TRUE, ## 保存图层
            overwrite=T) ##覆盖已有文件

#将模型投射到研究区
ped_126 <- predict(mod, study126)
plot(ped_126,main = "SSP126: 2021~2040")
e_126 <- evaluate(mod, p=occ_test, a=bg, x=ssp126_layer)
thd_126 <- threshold(e_126, "no_omission")

#------------------------------------------------------------------------------------------------------#
#                                        step 6 预测将来SSP585                                         #
#------------------------------------------------------------------------------------------------------#
setwd("E:/Class_YNU/Biogeography/Finalpaper/Maxent/use_data/SSP585/21_40/")
ssp585_list <- dir("./", full.names=T, pattern='.tif')
ssp585_layer <-  stack(ssp585_list)

study585 <- crop(ssp585_layer,c(80, 120, -10, 50))

writeRaster(study585,
            ## 文件命名
            filename=paste0("./",names(study585),".asc"), 
            format="ascii", ## 输出编码格式
            bylayer=TRUE, ## 保存图层
            overwrite=T) ##覆盖已有文件

#将模型投射到研究区
ped_585 <- predict(mod, study585)
plot(ped_585,main = "SSP585: 2021~2040")
e_585 <- evaluate(mod, p=occ_test, a=bg, x=ssp585_layer)
thd_585 <- threshold(e_585, "no_omission")



在这里插入图片描述

Ending

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

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

相关文章

Power Apps-使用power Automate流

创建&#xff1a;Power Automate-创建power Apps使用的流-CSDN博客 打开Power Apps&#xff0c;创建页面&#xff0c;添加三个输入框&#xff08;分别是换算前单位、换算后单位、货币数&#xff09;&#xff0c;和一个文本框&#xff08;输出结果&#xff09;以及一个按钮 在…

微信聚合聊天,自动回复

微信&#xff0c;这款融合通讯、社交、娱乐、小程序于一体的平台&#xff0c;已经深深融入我们的日常生活。作为我们日常生活中不可或缺的社交工具&#xff0c;尤其在工作中&#xff0c;我们需要通过微信来沟通客户&#xff0c;这个时候我们就会希望有快速回复客户的方式秒回客…

自动备份pgsql数据库

bat文件中的内容&#xff1a; PATH D:\Program Files\PostgreSQL\13\bin;D:\Program Files\7-Zip set PGPASSWORD**** pg_dump -h 8.134.151.187 -p 5466 -U sky -d mip_db --schema-only -f D:\DB\backup\%TODAY%-schema-mip_db_ali.sql pg_dump -h 8.134.151.187 -p 5466…

从房地产先后跨界通信、文旅演艺领域,万通发展未来路在何方?

近年来&#xff0c;房地产市场可谓负重前行&#xff0c;各大房企纷纷谋求新出路。 作为中国最早的房企之一&#xff0c;万通发展再次处在转型变革的十字路口。自去年以来&#xff0c;万通发展在转型升级之路上动作频频&#xff0c;可谓忙得不亦乐乎。 大幕落下之时&#xff0c;…

【word密码】word设置只读方式的四个方法

想要将word文档设置为只读模式&#xff0c;方法有很多&#xff0c;今天小奥超人介绍几个方法给大家。 方法一&#xff1a;文件属性 常见的、简单的设置方法&#xff0c;不用打开word文件&#xff0c;只需要右键选择文件&#xff0c;打开文件属性&#xff0c;勾选上【只读】选…

使用c++程序,实现图像平移变换,图像缩放、图像裁剪、图像对角线镜像以及图像的旋转

数字图像处理–实验三A图像的基本变换 实验内容 A实验&#xff1a; &#xff08;1&#xff09;使用VC设计程序&#xff1a;实现图像平移变换&#xff0c;图像缩放、图像裁剪、图像对角线镜像。 &#xff08;2&#xff09;使用VC设计程序&#xff1a;对一幅高度与宽度均相等的…

模拟业务流程+构造各种测试数据,一文带你测试效率提升80%

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

【Unity】文件信息的存储和解析(C#代码)

目录 文件存储 两种文件信息解析方法 文件加密处理 文件解密处理 全部代码 文件存储 一些游戏案例开发过程中的一些数据转换成Json格式&#xff0c;然后存到指定的位置 //3.将对象转化为JsonList<Hokag> hokagList new List<Hokag>(){new Hokag(){Name"…

【UE5】显示或隐藏物体轮廓线

效果 步骤 1. 先下载所需的材质文件“M_Highlight.uasset” 材质下载链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rxmRhkUoXVq6-DkIKyBhAQ 提取码&#xff1a;55bv 2. 在视口中拖入后期处理体积 根据需求设置后期处理体积的大小或者直接设置无限范围&…

Spring6(四):JUnit、事务

文章目录 5. 单元测试&#xff1a;JUnit5.1 整合JUnit55.2 整合JUnit4 6. 事务6.1 JdbcTemplate6.1.1 准备工作6.1.2 实现CURD①装配 JdbcTemplate②测试增删改功能③查询数据返回对象④查询数据返回list集合⑤查询返回单个的值 6.2 事务6.2.1 编程式事务6.2.2 声明式事务 6.3 …

性能测试 —— 性能问题分析步骤!

前言 性能测试大致分以下几个步骤&#xff1a; 需求分析脚本准备测试执行结果整理问题分析 今天要说的是最后一个步骤——“问题分析”&#xff1b; 需求描述 有一个服务&#xff0c;启动时会加载一个1G的词表文件到内存&#xff0c;请求来了之后&#xff0c;会把请求词去词…

ajax异步传值以及后端接收参数的几种方式

异步传值 第一种呢&#xff0c;也是最简单的一种&#xff0c;通过get提交方式&#xff0c;将参数在链接中以问号的形式进行传递 // 前台传值方法 // 触发该方法调用ajaxfunction testAjax(yourData) {$.ajax({type: "get", // 以get方式发起请求url: "/yo…

童装CPC认证检测哪些内容?童装上架亚马逊美国站CPC认证办理

童装是指适合儿童穿着的服装。按年龄分&#xff0c;包括婴儿服装、儿童服装、童装、中年童装、大童服装。CPC认证即儿童产品证书&#xff08;CPC&#xff09;&#xff0c;主要针对12岁以下的儿童&#xff0c;如玩具、摇篮、童装等。跨境卖家作为“进口商”&#xff0c;想要将中…

AC修炼计划(AtCoder Regular Contest 162)

传送门&#xff1a;AtCoder Regular Contest 162 - AtCoder A题签到 B - Insertion Sort 2 我们可以从头开始一个一个排序&#xff0c;把1通过操作放到第一个&#xff0c;把2通过操作放到第二个。。。以此类推。但会出现一种情况&#xff0c;如果我们所要排的数字在最后一位&…

【解决方案】危化品厂区安防系统EasyCVR+AI智能监控

危化品属于危险、易燃易爆、易中毒行类&#xff0c;一旦在生产运输过程中发生泄漏后果不堪想象&#xff0c;所以危化品的生产储存更需要严密、精细的监控&#xff0c;来保障危化品的安全。EasyCVRTSINGSEE青犀AI智能分析网关搭建的危化品智能监控方案就能很好的为危化品监管保驾…

基于ssm流浪动物救助管理系统

基于ssm流浪动物救助管理系统 摘要 随着城市化的不断发展&#xff0c;流浪动物问题逐渐凸显&#xff0c;而对流浪动物的救助和管理成为社会关注的焦点。本文基于SSM&#xff08;SpringSpringMVCMyBatis&#xff09;框架&#xff0c;设计并实现了一套流浪动物救助管理系统。该系…

碾压Fast Request!IDEA插件推荐:Apipost-Helper

IDEA是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作&#xff0c;一般需要打开额外的调试工具&#xff0c;而今天给大家介绍一款IDEA插件&…

海外网红营销:品牌建设与获利的平衡策略

随着互联网的迅速发展&#xff0c;社交媒体已经成为了全球范围内广告和市场营销的主要平台。其中&#xff0c;海外网红营销已经成为一种备受关注的趋势&#xff0c;吸引了众多品牌的目光。然而&#xff0c;在这个充满竞争的数字世界里&#xff0c;品牌建设与获利之间的关系一直…

最长上升子序列模型 笔记

首先附上模板&#xff1a; #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \nusing namespace std;typedef pair<int, int> PII; typedef long long ll;const int N 100010;int n; int a[N], q[N];int main()…

TypeError: Cannot read properties of undefined (reading ‘0‘)

1、在使用<el-dropdown>会报这个错误 原因&#xff1a;使用v-if控制显隐&#xff0c;找不到该节点就会开始报错 解决&#xff1a;使用v-show就可以了