我尝试使用麋鹿位置点(Elk
)相对于NED高程栅格(Elev
)使用R中的maxent
来预测麋鹿高程选择。两者都是预测的在NAD83中使用lat / long,并且我已经裁剪了栅格以解决R中的内存问题。
我已将Elk数据集划分为5组,其中4组现在是培训组(ElkTrain
),1我保留为测试组(ElkTest
) 。我还创建了自己的背景数据(NonElk
),其中包含自己的培训和测试数据(NonElkTrain
,NonElkTest
)。我遇到了这个错误(使用和不使用我的背景数据),我找不到任何人在讨论这个相对于maxent或只使用一个数据帧的时候:
> Max <- maxent(x=Elev, p=ElkTrain, a=NonElkTrain)
或
> Max <- maxent(x=Elev, p=ElkTrain, a=NULL, nbg=5000, factors=NULL, removeDuplicates=TRUE)
match.names(clabs,names(xi))出错: 名称与以前的名称不匹配
另外:警告信息:
在.local(x,p,...)中: 1(0.02%)存在点具有NA预测值
由于我只使用一个数据框(ElkTrain
),所以哪些名称不匹配?
答案 0 :(得分:0)
当您使用一个预测变量创建最大模型时,会发生这样的错误。您可以使用?maxent
中的示例中的数据查看它library(dismo)
# example data
predictors <- stack(list.files(path=paste(system.file(package="dismo"), '/ex', sep=''), pattern='grd', full.names=TRUE ))
occ <- read.table(paste(system.file(package="dismo"), '/ex/bradypus.csv', sep=''), header=TRUE, sep=',')[,-1]
bg <- randomPoints(predictors, 1000)
# this works
me <- maxent(x=predictors[[1:2]], p =occ)
# fails
me <- maxent(x=predictors[[1]], p =occ)
#Error in match.names(clabs, names(xi)) :
# names do not match previous names
这是因为单层,矩阵被丢弃(导致许多R错误...),如下所示:
extract(predictors[[1:2]], occtrain[1:2,])
# bio1 bio12
#[1,] 263 1639
#[2,] 263 1639
extract(predictors[[1]], occtrain[1:2,])
#[1] 263 263
我会解决这个问题。但这是两个解决方案。
=制作单层RasterStack(如你所建议的);最简单的方法:
prd <- stack(predictors[[1]])
me <- maxent(x=prd, p =occ)
=或者创建一个data.frame,其中包含存在和背景点的提取栅格值:
abs <- cbind(pa=0, bio1=extract(predictors[[1]], bg))
prs <- cbind(pa=1, bio1=extract(predictors[[1]], occ))
并使用这些数据构建最大模型
x <- data.frame(rbind(prs, abs))
m <- maxent(x[,2,drop=F], p=x[,1,drop=F] )
p <- predict(predictors, m)
plot(p)