Использование файла тестового примера с MaxEnt в R

Недавно я много работал с MaxEnt в R (dismo-package), но использовал только перекрестную проверку для проверки моей модели среды обитания птиц (только один вид). Теперь я хочу использовать самодельный файл тестового примера. Я должен был выбрать эти точки для проверки вручную и не могу использовать случайную контрольную точку.

Так что мой R-скрипт выглядит так:

library(raster)
library(dismo)

setwd("H:/MaxEnt")

memory.limit(size = 400000)

punkteVG <- read.csv("Validierung_FL_XY_2016.csv", header=T, sep=";", dec=",")
punkteTG <- read.csv("Training_FL_XY_2016.csv", header=T, sep=";", dec=",")

punkteVG$X <- as.numeric(punkteVG$X)
punkteVG$Y <- as.numeric(punkteVG$Y)

punkteTG$X <- as.numeric(punkteTG$X)
punkteTG$Y <- as.numeric(punkteTG$Y)

##### mask NA ######
mask <- raster("final_merge_8class+le_bb_mask.img")
dataframe_VG <- extract(mask, punkteVG)
dataframe_VG[dataframe_VG == 0] <- NA

dataframe_TG <- extract(mask, punkteTG)
dataframe_TG[dataframe_TG == 0] <- NA

punkteVG <- punkteVG*dataframe_VG
punkteTG <- punkteTG*dataframe_TG

#### add the raster dataset ####
habitat_all <- stack("blockstats_stack_8class+le+area_8bit.img")

####  MODEL FITTING #####
library(rJava)
system.file(package = "dismo")
options(java.parameters = "-Xmx1g" )

setwd("H:/MaxEnt/results_8class_LE_AREA")

### backgroundpoints ###
set.seed(0) 
backgrVMmax <- randomPoints(habitat_all, 100000, tryf=30)
backgrVM <- randomPoints(habitat_all, 1000, tryf=30)

### Renner (2015) PPM modelfitting Maxent ###
maxentVMmax_Renner<-maxent(habitat_all,punkteTG,backgrVMmax, path=paste('H:/MaxEnt/Ergebnisse_8class_LE_AREA/maxVMmax_Renner',sep=""),
                       args=c("-P", 
                              "noautofeature", 
                              "nothreshold", 
                              "noproduct",
                              "maximumbackground=400000",
                              "noaddsamplestobackground",
                              "noremoveduplicates",
                              "replicates=10", 
                              "replicatetype=subsample",
                              "randomtestpoints=20",
                              "randomseed=true",
                              "testsamplesfile=H:/MaxEnt/Validierung_FL_XY_2016_swd_NA"))

После команды "maxent()" я столкнулся с несколькими ошибками. Сначала я получил сообщение о том, что ему нужно больше, чем 0 (по умолчанию) "randomtestpoints". Поэтому я добавил "randomtestpoints = 20" (который, надеюсь, не помешает программе использовать файл). Тогда я получил:

Error: Test samples need to be in SWD format when background data is in SWD format
Error in file(file, "rt") : cannot open the connection

Дело в том, что когда я запустил скрипт с перекрестной проверкой по умолчанию, вот так:

maxentVMmax_Renner<-maxent(habitat_all,punkteTG,backgrVMmax, path=paste('H:/MaxEnt/Ergebnisse_8class_LE_AREA/maxVMmax_Renner',sep=""),
                       args=c("-P", 
                              "noautofeature", 
                              "nothreshold", 
                              "noproduct",
                              "maximumbackground=400000",
                              "noaddsamplestobackground",
                              "noremoveduplicates",
                              "replicates=10"))

... все работает отлично.

Также я попробовал несколько вещей, чтобы получить мои csv-validation-data в правильном формате. Два ряда (обозначены X и Y), Три ряда (обозначены X и Y) и другие вещи. Я бы предпочел использовать вектор "punkteVG" (который является данными валидации), который я создал с помощью read.csv... но, похоже, MaxEnt хочет его файл.

Я не могу представить, что моя проблема настолько необычна. Кто-то должен был использовать аргумент "testsamplesfile" раньше.

1 ответ

Решение

Я выяснил, в чем проблема. Так что вот, для других, чтобы наслаждаться:

Правильная команда maxent для файла Subsample выглядит следующим образом:

maxentVMmax_Renner<-maxent(habitat_all, punkteTG, backgrVMmax, path=paste('H:/MaxEnt',sep=""),
                       args=c("-P", 
                              "noautofeature", 
                              "nothreshold", 
                              "noproduct",
                              "maximumbackground=400000",
                              "noaddsamplestobackground",
                              "noremoveduplicates",
                              "replicates=1",
                              "replicatetype=Subsample",
                              "testsamplesfile=H:/MaxEnt/swd.csv"))

Конечно, не может быть нескольких повторов, так как вы получили только один подвыбор. Самое главное, что файл "swd.csv" должен содержать:

  • координаты X и Y
  • Значения в соответствующих точках (например: с "извлечением (привычка_все, PunkteVG)"
  • первая колонка должна состоять из слова "виды" с заголовком "виды" (поскольку MaxEnt использует "виды" по умолчанию, если вы не определили их в данных о происхождении)

Таким образом, последний момент был проблемой здесь. По сути, если вы не определили вид-столб в файле Subsample, MaxEnt не будет знать, как назначать данные.

Другие вопросы по тегам