如标题所示,我试图生成描述相对使用概率的预测栅格。为了创建可重现的示例,我使用了MaungaWhau
包中的maxlike
数据。 MaungaWhau
是list
,其中包含两个栅格图层以及一个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
对象中每个点的Precip
和SpatialPoints
值。
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
项以及对截距的相关个别调整。
答案 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)。