2015-06-14 2 views
-1

Я построил модели в glmer и хотел бы предсказать их на rasterStack, представляющих фиксированные эффекты в моей модели. моя glmer модель в виде:Прогнозируйте с помощью glmer, где новые данные - это Растровый стек фиксированных efefcts

m1<-glmer(Severity ~ x1 + x2 + x3 + (1 | Year) + (1 | Ecoregion), family=binomial(logit)) 

Как вы можете видеть, у меня есть случайные эффекты, которые не имеют в качестве пространственного слоя - например, «год». Поэтому проблема действительно предсказывает glmer на rasterStacks, когда у вас нет случайных слоев данных случайных эффектов. Если я использую его из коробки без добавления случайных эффектов, я получаю сообщение об ошибке.

m1.predict=predict(object=all.var, model=m1, type='response', progress="text", format="GTiff") 
Error in predict.averaging(model, blockvals, ...) :  
+0

'pred.MerMod' принимает фрейм данных и возвращает вектор. Можете ли вы привести воспроизводимый пример? Я не очень хорошо знаком с 'rasterStack'; возможно, кто-то еще может рассказать вам, как конвертировать туда и обратно. –

+0

PS: любая конкретная причина, по которой вы используете 'glmer', а не' lmer' (поскольку у вас нет аргумента 'family', все последние версии' glmer' должны были дать вам предупреждение) –

+0

Вы можете скрывать RasterStack с ' as.data.frame', но это может быть не очень хороший подход с очень большими наборами растровых данных. В этом случае лучше (но иногда немного сложнее) использовать «растровый :: прогноз» (см. Мой ответ ниже) – RobertH

ответ

2

Ваш вопрос очень краток и не указывает, с какой проблемой вы столкнулись. Кажется, это работает «из коробки», но, возможно, не в вашем случае. См. ?raster::predict.

library(raster) 
# example data. See ?raster::predict 
logo <- brick(system.file("external/rlogo.grd", package="raster")) 
p <- matrix(c(48, 48, 48, 53, 50, 46, 54, 70, 84, 85, 74, 84, 95, 85, 
    66, 42, 26, 4, 19, 17, 7, 14, 26, 29, 39, 45, 51, 56, 46, 38, 31, 
    22, 34, 60, 70, 73, 63, 46, 43, 28), ncol=2) 
a <- matrix(c(22, 33, 64, 85, 92, 94, 59, 27, 30, 64, 60, 33, 31, 9, 
    99, 67, 15, 5, 4, 30, 8, 37, 42, 27, 19, 69, 60, 73, 3, 5, 21, 
    37, 52, 70, 74, 9, 13, 4, 17, 47), ncol=2) 
xy <- rbind(cbind(1, p), cbind(0, a)) 
v <- data.frame(cbind(pa=xy[,1], extract(logo, xy[,2:3]))) 
v$Year <- sample(2000:2001, nrow(v), replace=TRUE) 


library(lme4) 
m <- lmer(pa ~ red + blue + (1 | Year), data=v) 

# here adding Year as a constant, as it is not a variable (RasterLayer) in the RasterStack object 
x <- predict(logo, m, const=(data.frame(Year=2000))) 
+0

Я обновил свой вопрос. Проблема заключается в использовании предсказания модели случайных эффектов, когда у вас нет слоев случайных эффектов. – Joe

1

Если у вас нет случайных эффектов, просто использовать re.form=~0 в вашем predict вызов предсказать на уровне населения:

x <- predict(logo, m, re.form=~0) 

работает без жалоб на меня @ например Roberth (хотя я не знаю, правильно)

+0

Оба ответа работали с моими данными, именно то, что я искал. Думаю, тогда возникает вопрос, не влияет ли случайные эффекты в предсказаниях на карту результатов/предсказания значительным образом. Я знаю, что это, вероятно, другой вопрос ... но был бы признателен за ваши мысли ... но краткие – Joe

+0

, если вы хотите использовать только один из двух случайных эффектов ... например, в моем случае, если в предсказаниях я хочу использовать ' ecoregion 'random effect, а не' year ', как мне настроить аргумент 're.form'? – Joe

+0

're.form = ~ ecoregion' ... –

Смежные вопросы