Проблема с функцией предсказания в R для одного биостека, а не для другого
Я занимаюсь моделированием распределения видов (моделирование экологических ниш), где я проецирую модель на текущие или будущие климатические растры (переменные биоклима).
Когда я прогнозирую текущие растры (object=bio_stack), все работает, используя этот код:
#predict species current distribution using bio_stack
current_dist<-predict(object=bio_stack, model=mod_gam,filename="whitebark_current_dist_17April2014",
na.rm=TRUE, type="response", format="GTiff", overwrite=TRUE,
progress="text")
Впрочем, когда я предсказываю будущим растрам (object=future_bio_stack
), этот код не дает результатов:
#predict species future distribution using future_bio_stack
future_dist<-predict(object = future_bio_stack, model=mod_gam,filename="whitebark_future_dist_17April2014",
fun=predict, na.rm=TRUE, type="response", format="GTiff", overwrite=TRUE,
progress="text")
Вместо этого я получаю это предупреждение:
In addition: Warning message:
In predict.gam(model, blockvals, ...) :
not all required variables have been supplied in newdata!
Будущие слои биостека, на которые я проецирую, выглядят нормально на изображении с обычными минимальными и максимальными значениями (я не могу опубликовать изображение без оценки репутации).
Тем не менее, минимальные и максимальные значения future_bio_stack выглядят странно в сводке, особенно по сравнению с bio_stack. Вот сводка каждого из стеков с предоставленными значениями min и max:
> future_bio_stack
class : RasterStack
dimensions : 4800, 5880, 28224000, 5 (nrow, ncol, ncell, nlayers)
resolution : 0.008333333, 0.008333333 (x, y)
extent : -152, -103, 30, 70 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +ellps=WGS84 +no_defs
names : WC05future_clipped, WC06future_clipped, WC08future_clipped, WC13future_clipped, WC15future_clipped
min values : -32768, -32768, -32768, -32768, -32768
max values : 32767, 32767, 32767, 32767, 32767
> bio_stack
class : RasterStack
dimensions : 4800, 5880, 28224000, 5 (nrow, ncol, ncell, nlayers)
resolution : 0.008333333, 0.008333333 (x, y)
extent : -152, -103, 30, 70 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
names : WC05_clipped, WC06_clipped, WC08_clipped, WC13_clipped, WC15_clipped
min values : -56, -429, -145, 7, 5
max values : 457, 100, 332, 767, 129
Есть идеи почему bio_stack
работает с predict
функция но future_bio_stack
не является?
1 ответ
Я отвечаю на свой вопрос здесь, как я только что понял это.
Чтобы проецировать обученную модель (которая использовала bio_stack) на другой набор растров (например, future_bio_stack), имена столбцов каждого из стеков должны быть одинаковыми.
Я переименовал файлы и заново сложил растры файла future_bio_stack, сделав имена такими же, как в bio_stack:
> bio5future<-raster("WC05_clipped.tif")
> bio6future<-raster("WC06_clipped.tif")
> bio8future<-raster("WC08_clipped.tif")
> bio13future<-raster("WC13_clipped.tif")
> bio15future<-raster("WC15_clipped.tif")
>
> future_bio_stack<-stack(bio5future, bio6future, bio8future,
> bio13future, bio15future)
Затем я перезапустил функцию предсказания, используя в качестве объекта future_bio_stack, и это сработало.