Использование файла тестового примера с 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 не будет знать, как назначать данные.