R - 在 maxent 模型中使用 5 折交叉验证时,如何获得一个 "summary" 预测图而不是 5 个?

R - How to get one "summary" prediction map instead for 5 when using 5-fold cross-validation in maxent model?

希望我来对了论坛。我是一名生态学家,通过 dismo 包使用 R 中的 maxent(版本 3.3.3,http://www.cs.princeton.edu/~schapire/maxent/)函数制作物种分布模型。我使用了参数 "replicates = 5" 告诉 maxent 进行 5 折交叉验证。当直接从maxent.jar文件(maxent软件)中获取运行 maxent时,将生成一个包含统计数据的html文件,包括预测图。在R中,也制作了一个html文件,但之后必须使用r中dismo包中的函数"predict"提取预测图。当我这样做时,由于 5 折交叉验证设置,我得到 5 张地图。但是,(这就是问题所在)我只想要一张输出图,一张 "summary" 预测图。我认为这是可能的,尽管我不知道 maxent 是如何计算的。 maxent 教程(参见上面的 link)说:

"...您可能希望通过关闭“写入输出网格”选项来避免占用磁盘 space,这将抑制复制运行的输出网格的写入,这样您就只会得到汇总统计网格(avg、stderr 等)。

可在本论坛中找到可放入 R 的参数列表 https://groups.google.com/forum/#!topic/maxent/yRBlvZ1_9rQ

我曾尝试在 maxent 函数本身和预测函数中使用参数 "outputgrids=FALSE",但它不起作用。我仍然得到 5 张地图,即使我在 R 中没有收到任何错误。

所以我的问题是:如何获得一个 "summary" 预测图而不是交叉验证产生的五个预测图?

我希望有人能帮我解决这个问题,我真的被困住了,在互联网上的任何地方都找不到任何答案。甚至没有关于这个的讨论。希望我的问题很清楚。这是我使用的 R 脚本:

model1<-maxent(x=predvars, p=presence_points, a=target_group_absence, path="//home//...//model1", args=c( "replicates=5", "outputgrids=FALSE"))

model1map<-predict(model1, predvars, filename="//home//...//model1map.tif", outputgrids=FALSE)

此致, 克里斯汀

很抱歉成为坏消息的传递者,但是基于 source code,Dismo 的预测功能似乎没有生成摘要图的能力。

那些关心的人的基本细节: 当你调用 maxent 并将 replicates 设置为大于 1 的值时,maxent 函数 returns 一个 MaxEntReplicates 对象,而不是一个普通的 MaxEnt 对象。当 predict 收到一个 MaxEntReplicates 对象时,它只是遍历它包含的所有模型并单独调用 predict

那么,接下来呢?还好,还好没有失去! Dismo 没有此功能的原因是对于大多数类型的模型构建,实际上没有一种有效的方法来平均交叉验证模型中的参数。我不想说 MaxEnt 确实如此,但我怀疑是这样。因此,交叉验证通常更多地用作检查模型构建方法是否适用于数据的方法,而不是直接构建模型的方法(有关这一点的进一步讨论,请参阅 this question)。在通过交叉验证验证使用给定程序构建的模型对于您正在建模的现象似乎是准确的之后,通常会使用您的所有数据构建最终模型。从理论上讲,这个新模型应该只比在您的数据子集上训练的模型更好。

所以基本上,假设你的交叉验证模型看起来合理,你可以再次 运行 MaxEnt 只用一个副本。您的最终结果将是基于交叉验证的模型精度估计和基于第二个 运行 的地图,并将所有数据集中在一起。根据您的问题究竟是什么,可能还有其他有用的交叉验证摘要统计信息您想要使用,但这些都是您已经在 html 输出中看到的内容。

几年后我可能会发现它。但是你可以这样做:

xm <- maxent(predictors, pres_train) # basically the maxent model
px <- predict(predictors, xm, ext=ext, progress= '' ) #prediction
px2  <- predict(predictors, xm2, ext=ext, progress= '' ) #prediction #02

models <- stack(px,px2) # create a stack of prediction from all the models
final_map <- mean(px,px2) # Take a mean of all the prediction
plot(final_map) #plot the averaged map

xm1,xm2,.. 将是交叉验证中每个分区的最大模型,px, px2,.. 将是预测映射。