Maxent:match.names(clabs, names(xi)) 中的错误:名称与以前的名称不匹配
Maxent: Error in match.names(clabs, names(xi)) : names do not match previous names
我正在尝试使用 R 中的 maxent
相对于 NED 高程栅格 (Elev
) 使用麋鹿位置点 (Elk
) 来预测麋鹿高程选择。两者都是投影在 NAD83 中使用 lat/long,我裁剪了光栅以解决 R 中的内存问题。
我将 Elk 数据集分为 5 组,其中 4 组现在是训练组 (ElkTrain
),另外 1 组保留为测试组 (ElkTest
)。我还使用自己的训练和测试数据 (NonElkTrain
、NonElkTest
) 创建了自己的背景数据 (NonElk
)。我 运行 遇到了这个错误(使用和不使用我的背景数据),我找不到任何人讨论这个相对于 maxent 或只使用一个数据帧的人:
> Max <- maxent(x=Elev, p=ElkTrain, a=NonElkTrain)
或
> Max <- maxent(x=Elev, p=ElkTrain, a=NULL, nbg=5000, factors=NULL, removeDuplicates=TRUE)
Error in match.names(clabs, names(xi)) :
names do not match previous names
另外:警告信息:
In .local(x, p, ...) :
1 (0.02%) of the presence points have NA predictor values
由于我只使用一个数据框 (ElkTrain
),哪些名称不匹配?
这是当您制作只有一个预测变量的 maxent 模型时发生的错误。您可以使用 ?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))
并使用这些数据构建 maxent 模型
x <- data.frame(rbind(prs, abs))
m <- maxent(x[,2,drop=F], p=x[,1,drop=F] )
p <- predict(predictors, m)
plot(p)
我正在尝试使用 R 中的 maxent
相对于 NED 高程栅格 (Elev
) 使用麋鹿位置点 (Elk
) 来预测麋鹿高程选择。两者都是投影在 NAD83 中使用 lat/long,我裁剪了光栅以解决 R 中的内存问题。
我将 Elk 数据集分为 5 组,其中 4 组现在是训练组 (ElkTrain
),另外 1 组保留为测试组 (ElkTest
)。我还使用自己的训练和测试数据 (NonElkTrain
、NonElkTest
) 创建了自己的背景数据 (NonElk
)。我 运行 遇到了这个错误(使用和不使用我的背景数据),我找不到任何人讨论这个相对于 maxent 或只使用一个数据帧的人:
> Max <- maxent(x=Elev, p=ElkTrain, a=NonElkTrain)
或
> Max <- maxent(x=Elev, p=ElkTrain, a=NULL, nbg=5000, factors=NULL, removeDuplicates=TRUE)
Error in match.names(clabs, names(xi)) : names do not match previous names
另外:警告信息:
In .local(x, p, ...) : 1 (0.02%) of the presence points have NA predictor values
由于我只使用一个数据框 (ElkTrain
),哪些名称不匹配?
这是当您制作只有一个预测变量的 maxent 模型时发生的错误。您可以使用 ?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))
并使用这些数据构建 maxent 模型
x <- data.frame(rbind(prs, abs))
m <- maxent(x[,2,drop=F], p=x[,1,drop=F] )
p <- predict(predictors, m)
plot(p)