【问题标题】:Maxent: Error in match.names(clabs, names(xi)) : names do not match previous namesMaxent:match.names(clabs,names(xi))中的错误:名称与以前的名称不匹配
【发布时间】:2017-12-01 18:13:18
【问题描述】:

我正在尝试使用相对于 NED 高程栅格 (Elev) 在 R 中使用 maxent 的麋鹿位置点 (Elk) 来预测麋鹿高程选择。两者都使用纬度/经度在 NAD83 中投影,并且我已经裁剪了栅格以解决 R 中的内存问题。

我已将 Elk 数据集分为 5 组,其中 4 组现在是训练组 (ElkTrain),1 组我保留为测试组 (ElkTest)。我还使用自己的训练和测试数据(NonElkTrainNonElkTest)创建了自己的背景数据(NonElk)。我遇到了这个错误(使用和不使用我的背景数据),我找不到任何人讨论这个相对于 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),哪些名称不匹配?

【问题讨论】:

    标签: r maxent


    【解决方案1】:

    这是当您创建一个只有一个预测变量的 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)
    

    【讨论】:

    • 感谢您的上下文和回答。今天有人给我的另一个解决方案是将栅格转换为栅格堆栈。 ElevPredict
    • 是的,这是一种更简单的处理方式!
    猜你喜欢
    • 1970-01-01
    • 2023-02-15
    • 2011-01-31
    • 1970-01-01
    • 2012-08-14
    • 2015-10-19
    • 2021-02-12
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多