使用随机截距和二次项生成GLMM的空间预测(栅格)

时间:2016-03-09 23:22:07

标签: r raster predict lme4

如标题所示,我试图生成描述相对使用概率的预测栅格。为了创建可重现的示例,我使用了MaungaWhau包中的maxlike数据。 MaungaWhaulist,其中包含两个栅格图层以及一个1000个位置的图层。那么,有了这些数据和包......

library(maxlike)
library(lme4)
data(MaungaWhau)

我们可以制作两个栅格图层,一个栅格堆栈以及一个SpatialPoints对象。

elev <- raster(MaungaWhau$elev, xmn=0, xmx=61, ymn=0, ymx=87) 
precip <- raster(MaungaWhau$precip, xmn=0, xmx=61, ymn=0, ymx=87) 
rs <- stack(elev, precip)

PointDat <- SpatialPoints(MaungaWhau$xy)

然后我创建一个包含IndID的新数据框:每个人的唯一ID(AAA - DDD); Used:二进制响应变量,指示是否使用该点(分别为1或0);以及Elev对象中每个点的PrecipSpatialPoints值。

df <- data.frame(IndID = sample(c("AAA", "BBB", "CCC", "DDD"), 1000, replace = T),
            Used = sample(c(0,1),1000, replace = T),
            Elev = extract(elev, PointDat),
            Precip = extract(precip, PointDat))
head(df); tail(df)

> head(df); tail(df)
  IndID Used      Elev     Precip
1   DDD    0 0.3798393  0.6405494
2   DDD    1 0.8830846  1.1174869
3   AAA    0 1.9282864  0.9641432
4   DDD    0 1.5024634  0.4695881
5   BBB    1 1.3089075 -0.1341483
6   BBB    1 0.5733952  0.6246699

然后我构建资源选择模型(RSF)并将IndID指定为随机效果。另请注意,我包含了Elev的二次项。

#Make model
Mod <- glmer(Used ~ Elev + I(Elev^2) + Precip + (1|IndID), family=binomial, data = df, verbos = 1) 
summary(Mod)

鉴于已使用和可用的积分,我对解释不感兴趣。如果确认,我的第一个问题就更多了。 raster包装小插图指出&#34; Raster对象中的名称应与模型预期的名称完全匹配。&#34;在符合I(Elev^2)的二次项的情况下,我更正预测将会看到&#39; Elev?这似乎就是这种情况,因为下面的Elev代码中没有与predict相关的错误。

其次,我如何处理随机截距项(1|IndID)?我对边际预测感兴趣,不需要考虑个人。

使用以下代码

#Change names of layers in raster stack to match model
names(rs) <- c("Elev", "Precip")

Pred <- predict(rs, Mod)

我收到错误:

Error in eval(expr, envir, enclos) : object 'IndID' not found

是否有可能为“典型”&#39;生成边际预测?个人没有将IndID协变量传递给predict函数?换句话说,我想在制作预测表面时忽略IndID项以及对截距的相关个别调整。

2 个答案:

答案 0 :(得分:2)

lme4(merMod)对象的predict函数默认情况下进行条件预测。

要进行边缘/无条件预测,您需要使用re.form参数。您的代码如下:

Pred <- predict(rs, Mod, re.form = NA)

如果您还希望在响应变量的范围内完成预测,则可以使用type参数。有关可用参数的更多详细信息,请参阅帮助页面?predict.merMod

答案 1 :(得分:1)

不是依赖predict函数,而是通过首先制作固定效果的beta对象来手动生成预测

betas <- fixef(Mod)

然后通过将每个栅格乘以相应的β系数来生成预测。

Pred <- betas[1] + (elev * betas[2]) + (elev^2 * betas[3]) + (precip * betas[4])
plot(Pred)

然后可以轻松添加或删除拦截并手动指定链接功能(例如logit)。