目标:
我的目标是使用Dismo 包中的函数randomPoints()构建物种分布预测模型,最终目标是生成伪缺失点并将它们绘制在地图上。这些点将被转换成栅格文件,以便从 MODIS 文件中提取元数据(即海面盐度、叶绿素水平等),作为重要的生态预测指标,以确定它们如何影响蓝鲸的分布。
这个想法是将具有相关元数据值的存在和伪缺失数据插入一般线性混合(GLM),这最终将使我的模型更加平衡和准确。
问题大纲:
我正在尝试按照这个物种分布练习使用randomPoints() 函数生成伪缺失点(所需的输出:参见图 1) 。但是,在运行我的 R 代码(见下文)后,我遇到了此 R 错误消息(见下文)。我的 r 代码还生成了一张带有 GPS 点的地图(图 2)。
错误信息:
(函数(类,fdef,mtable)中的错误:无法为签名'“standardGeneric”'的函数'nlayers'找到继承的方法</p>
我试图找到解决方案。但是,我在使用 R 中的地图方面相对较新,我对这里的问题感到非常困惑!
我的数据框包含918 行,我想生成与存在点相同数量的伪缺失点。不幸的是,我无法发布我的数据,但我提供了一个迷你数据框作为示例。
如果有人可以帮助我,我将不胜感激!
提前谢谢了!
R代码:
###Open Packages
library("sp")
library("rgdal")
library("raster")
library("maptools")
library("rgdal")
library("dismo")
library("spatialEco")
library("ggplot2")
library("dplyr")
library("maps")
library("ggspatial")
library("GADMTools")
library("maps")
##Mini Dataframe
Blue.whale_New <- data.frame(longitude = c(80.5, 80.5, 80.5, 80.5, 80.4, 80.4, 80.5, 80.5, 80.4),
latitude = c(5.84, 5.82, 5.85, 5.85, 5.89, 5.82, 5.82, 5.84, 5.83))
####World Bioclim Data + GADM Object
##Creating an array object with just longitude and latitude decimal coordinates
##Upload the maps
##Plotting the map of Sri Lanka
###GADM OBJECT
dev.new()
bioclim1.data <- getData('GADM', country='LKA', level=1)
#####Worldclim raster layers
bioclim.data <- getData(name = "worldclim",
var = "bio",
res = 2.5,
path = "./")
####Get bounding box of Sri Lanka shape file
bb=bioclim1.data@bbox
# Determine geographic extent of our data
max.lat <- ceiling(max(Blue.whale$latitude))
min.lat <- floor(min(Blue.whale$latitude))
max.lon <- ceiling(max(Blue.whale$longitude))
min.lon <- floor(min(Blue.whale$longitude))
geographic.extent <- extent(x = c(min.lon, max.lon, min.lat, max.lat))
#####Plot map
dev.new()
plot(bioclim1.data,
xlim = c(min(c(min.lon,bb[1,1])), max(c(max.lon,bb[1,2]))),
ylim = c(min(c(min.lat,bb[2,1])), max(c(max.lat,bb[2,2]))),
axes = TRUE,
col = "grey95")
# Add the points for individual observation
points(x = Blue.whale$longitude,
y = Blue.whale$latitude,
col = "olivedrab",
pch = 15,
cex = 0.50)
###Building a model and visualising results
##Crop bioclim data to geographic extent of blue whales GADM Map
bioclim.data.blue.whale_1<-crop(x=bioclim1.data, y=geographic.extent)
##Crop bioclim data to geographic extent of blue whales World Clim
bioclim.data.blue.whale_2<-crop(x = bioclim.data, y = geographic.extent)
#Build distribution mode using the World Clim)
bw.model <- bioclim(x = bioclim.data, p = Blue.whale_New)
# Predict presence from model
predict.presence <- dismo::predict(object = bw.model, x = bioclim.data, ext = geographic.extent)
# Plot base map
dev.new()
plot(bioclim1.data,
xlim = c(min(c(min.lon,bb[1,1])), max(c(max.lon,bb[1,2]))),
ylim = c(min(c(min.lat,bb[2,1])), max(c(max.lat,bb[2,2]))),
axes = TRUE,
col = "grey95")
# Add model probabilities
plot(predict.presence, add = TRUE)
# Redraw those country borders
plot(bioclim1.data, add = TRUE, border = "grey5")
# Add original observations
points(Blue.whale_New$longitude,
Blue.whale_New$latitude,
col = "olivedrab", pch = 20, cex = 0.75)
##Psuedo Absence Points
# Use the bioclim data files for sampling resolution
bil.files <- list.files(path = "data/wc2-5",
pattern = "*.bil$",
full.names = TRUE)
# Randomly sample points (same number as our observed points)
##Mask = provides resolution of sampling points
##n = number of random points
##ext = Spatially restricts sampling
##extf = expands sampling a little bit
background <- randomPoints(mask = mask,
n = nrow(Blue.whale_New),
ext = geographic.extent,
extf = 1.25)
#Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘nlayers’ for signature ‘"standardGeneric"’
解决问题后我计划运行的代码
Visualize the pseudo-absence points on a map:
# Plot the base map
dev.new()
plot(bioclim1.data,
xlim = c(min(c(min.lon,bb[1,1])), max(c(max.lon,bb[1,2]))),
ylim = c(min(c(min.lat,bb[2,1])), max(c(max.lat,bb[2,2]))),
axes = TRUE,
col = "grey95")
# Add the background points
points(background, col = "grey30", pch = 1, cex = 0.75)
# Add the observations
points(x = Blue.whale_New$longitude,
y = Blue.whale_New$latitude,
col = "olivedrab",
pch = 20,
cex = 0.75)
box()
# Arbitrarily assign group 1 as the testing data group
testing.group <- 1
# Create vector of group memberships
group.presence <- kfold(x = Blue.whale_New, k = 5) # kfold is in dismo package
图 1(所需输出)
图 2: