имя (я) фактора: as.factor (rastername) отсутствует в именах слоев Ошибка в `[.data.frame` (blockval,, f [j]): выбраны неопределенные столбцы - PullRequest
0 голосов
/ 05 мая 2020

Я построил модель GAM со смесью непрерывных и категориальных переменных, полученных из точек выборки в 4 растрах - (1) продукт записи MODIS, где я подсчитал, сколько раз сжигался пиксель за период 1989-2019 и затем свернул его в двоичный растр с пикселями, которые не сгорели = 0, и оставшимися пикселями, т.е. сгоревшими = 1

(2) доля песка% от World ISRI C (без изменений)

(3) среднее годовое количество осадков от CHIRPS за тот же период времени

(4) средняя dry продолжительность сезона как количество месяцев в году, которые имеют меньше, чем 10% годовых осадков этого периода. год.

Все переменные были спроецированы, обрезаны и замаскированы на основе моей области исследования. Переменная ответа -% дерева MODIS. Все растры были отобраны на 1500 точек на основе двух слоев и разных масок, чтобы исключить определенные виды землепользования и покровы (из набора данных Global Land Cover 2000).

Обратившись ко всем ссылкам в этом сообщении обмена стеками под названием «GAM in R с категориальными И непрерывными переменными» , я последовал за сообщением в блоге из нижней части кучи под заголовком «Сравнение гладкости во взаимодействиях фактор-гладкость II упорядоченных факторов» . Я использовал тот же код и синтаксис, упомянутые в сообщении блога (буквально скопируйте и вставил), и преобразовал столбец записи, который имеет 0 и 1 в фрейме данных, df на два уровня noburn и burn с noburn в качестве ссылки и назвал его столбцом oFire. Затем я запустил несколько различных моделей, перечисленных ниже, чтобы продемонстрировать влияние трех предикторов - среднегодовых осадков, доли песка в% и продолжительности сезона dry в выжженных и несгоревших областях.

model1_onlymap<-gam(modis_treecover ~ s(map), data=df, method='REML')

model2_map_burn<-gam(modis_treeciver ~ oFire+s(map) + s(map, by=oFire), data=df, method='REML'

model3_map_dsl_burn<-gam(modis_treecover ~oFire +s(map)+s(dry season length) +s(map, by=oFire)+ s(dry season length, by=oFire), data=df, method='REML')

model4_map_dsl_sand_burn<-gam(modis_treecover ~oFire +s(map)+s(dry season length)+ s(sand)+s(map, by=oFire)+ s(dry season length, by=oFire) +s(sand, by=oFire), data=df, method='REML')

На этом этапе я выбрал последнюю модель в качестве модели, с которой хочу продолжить работу. После завершения модели, настройки / оценки ее с помощью gam.check (), concurvity (), plots и т. Д. c., Я решил спрогнозировать ее для своей области исследования.

В качестве альтернативы, я также построил каждый GAM Модель, сохраняя столбец ожога в моем df как 0 и 1 и рассматривая его как фактор, чтобы понять различия в результатах двух способов обработки категориальных переменных.

Очевидно, у меня нет растра прожига со значениями пикселей - noburn и burn. Как уже упоминалось, это двоичный растр со значениями пикселей 0 и 1. Итак, я продолжил составлять стек из четырех переменных-предикторов. В целях прогнозирования я исключил столбец oFire из df и построил модель

gam_for_prediction<-gam(modis_treecover~ modis_burn + s(map)+s(dsl)+s(sand)+s(map, by=as.factor(modis_burn))+s(dsl, by=as.factor(modis_burn))+s(sand, by=as.factor(modis_burn)), data=df, method='REML')

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

factor name(s): as.factor(modis_burn)  not in layer namesError in `[.data.frame`(blockvals, , f[j]) : undefined columns selected

Что я сделал - я прочитал все имена растров с такими же именами, которые использовались в модели . Я все еще получаю ту же ошибку с var4. Я прочитал растр записи (как уже упоминалось, двоичный растр) и заставил его использовать в качестве фактора

modis_burn@data@values<- as.factor(modis_burn@data@values) 

Что я делаю не так с var4? Как заставить предсказание работать? T

За исключением данных ISRI C почвы, все данные были подготовлены в GEE и экспортированы. При необходимости я могу загрузить свои растры, csv с 1500 точками выборки и отдельно закончить скрипт.

EDIT-

Я понял намек от @Gavin Simpson о попытке pred () буквально искать переменную с именем as.factor (modis_burn), тогда как на самом деле переменная называется modis_burn. Итак, для раздела прогнозирования я указал модель GAM как-

gam_for_prediction<-gam(modis_treecover~modis_burn+s(map)+s(dry season length)+s(sand fraction)+s(map, by=modis_burn)+s(dsl, by=modis_burn)+s(sand, by=modis_burn), df=data (without the ordinal 'noburn'/ 'burn' column), method=REML)

Затем я предсказал

predict(predictor stack, gam_for_prediction, type='response')

И это сработало! Я смог предсказать на основе моих новых данных, также называемых растровым стеком, мои предикторы для моей области исследования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...