R - Как получить одну карту сводного прогноза вместо 5 при использовании 5-кратной перекрестной проверки в модели maxent?

Надеюсь, я попал на правильный форум. Я эколог, создаю модели распространения видов с помощью maxent (версия 3.3.3, http://www.cs.princeton.edu/~schapire/maxent/) в R с помощью пакета dismo. Я использовал аргумент «replicates = 5», который говорит maxent выполнить 5-кратную перекрестную проверку. При запуске maxent напрямую из файла maxent.jar (программное обеспечение maxent) будет создан html-файл со статистикой, включая карты прогнозов. В R также делается html-файл, но карты предсказаний приходится потом извлекать, используя функцию «predict» в пакете dismo в r. Когда я это делаю, я получаю 5 карт из-за настройки 5-кратной перекрестной проверки. Однако (и в этом проблема) мне нужна только одна выходная карта, одна «сводная» карта предсказания. Я предполагаю, что это возможно, хотя я не знаю, как это вычисляет maxent. В учебнике maxent (см. ссылку выше) говорится, что:

«... вы можете избежать использования дискового пространства, отключив опцию «запись выходных сеток», которая подавляет запись выходных сеток для повторных запусков, так что вы получаете только сводные статистические сетки (avg, stderr и т. д.). .)".

Список аргументов, которые можно использовать в R, можно найти на этом форуме https://groups.google.com/forum/#!topic/maxent/yRBlvZ1_9rQ.

Я пытался использовать аргумент "outputgrids=FALSE" как в самой функции maxent, так и в функции прогнозирования, но это не сработало. Я по-прежнему получаю 5 карт, хотя в R ошибок нет.

Итак, мой вопрос: как мне получить одну «суммарную» карту предсказания вместо пяти карт предсказания, полученных в результате перекрестной проверки?

Я надеюсь, что кто-то может помочь мне с этим, я действительно застрял и нигде не нашел ответов в Интернете. Об этом даже речи нет. Надеюсь, мой вопрос понятен. Это 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)

С уважением, Кристин


person Kristin W    schedule 05.03.2015    source источник
comment
Для тех, кому нужна оценочная статистика по моделям Maxent с несколькими типами перекрестной проверки, включая те, которые используют пространственное разделение тестовых данных, ознакомьтесь с пакетом ENMeval в R. Результатом является таблица статистики, которую вы можете использовать для выбора оптимального модели, а средние значения AUC и коэффициента пропусков рассчитываются автоматически по k раз. Он также выводит AIC.   -  person ndimhypervol    schedule 18.12.2015


Ответы (2)


Извините за плохие новости, но на основе источника code, похоже, что функция прогнозирования Dismo не может генерировать сводную карту.

Подробности для тех, кому небезразлично: когда вы вызываете maxent, когда replicates имеет значение больше 1, функция maxent возвращает объект MaxEntReplicates, а не обычный объект MaxEnt. Когда predict получает объект MaxEntReplicates, он просто перебирает все содержащиеся в нем модели и вызывает predict для них по отдельности.

Итак, что дальше? К счастью, еще не все потеряно! Причина, по которой Dismo не имеет этой функции, заключается в том, что для большинства видов построения моделей на самом деле не существует действительного способа усреднения параметров по вашим моделям перекрестной проверки. Я не хочу заходить так далеко, чтобы сказать, что это определенно относится к MaxEnt, но я подозреваю, что это так. Таким образом, перекрестная проверка обычно используется больше как способ проверки того, что ваша методология построения модели работает с вашими данными, чем как способ непосредственного построения вашей модели (см. этот вопрос для дальнейшего обсуждения этого вопроса). После проверки с помощью перекрестной проверки того, что модели, построенные с использованием заданной процедуры, кажутся точными для моделируемого вами явления, принято строить окончательную модель, используя все ваши данные. Теоретически эта новая модель должна быть только лучше, чем модели, обученные на подмножестве ваших данных.

Таким образом, в основном, если ваши модели с перекрестной проверкой выглядят разумно, вы можете снова запустить MaxEnt только с одной репликой. Ваш конечный результат будет оценкой точности модели, основанной на перекрестной проверке, и картой, основанной на втором прогоне со всеми вашими данными, объединенными вместе. В зависимости от того, какой именно у вас вопрос, могут быть другие полезные сводные статистические данные перекрестной проверки, которые вы хотите использовать, но это все, что вы уже видели в выводе html.

person seaotternerd    schedule 06.03.2015
comment
Спасибо, это было именно то, что я хотел знать :) - person Kristin W; 06.03.2015

Возможно, я нашел это через пару лет. Но вы могли бы сделать что-то вроде этого:

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,.. будут прогнозируемыми картами.

person anz    schedule 16.10.2017