使用 R 中的 glmmTMB 预测人口级别的栅格堆栈
Predicting to raster stack at population level with glmmTMB in R
我正在尝试使用我适合 glmmTMB
包的 GLMM 在人口级别预测 R 中的栅格堆栈(即将随机效应设置为 0)。我遵循了 Ben Bolker 在 中的解决方案,该解决方案适用于适合 lme4
的模型,但即使函数参数 re.form=~0
除了 [=15] 之外似乎还适用于 predict.glmmTMB
=],当我预测使用 glmmTMB 模型时,它对我不起作用。这是一个使用 Robert Hijmans 在上述线程中提供的相同示例代码的示例:
# 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)
#fit model using glmmTMB
library(glmmTMB)
m <- glmmTMB(pa ~ red + blue + (1 | Year), data=v)
# use argument "re.form=~0" to make population-level prediction
x <- predict(logo, m, re.form=~0)
当我 运行 上述 predict
代码(生成对象 x)时,我得到错误:Error in eval(predvars, data, env) : object 'Year' not found
。谁能告诉我我可能做错了什么或者我该如何解决这个问题?
该错误表示您的测试数据“徽标”没有“年份”变量,有点不透明。
我只是在这里添加了相关代码,没有重复您上面提供的所有其他代码。
logo <- brick(system.file("external/rlogo.grd", package="raster"))
x <- predict(logo, m, re.form=~0)
Error in eval(predvars, data, env) : object 'Year' not found
logo$Year <- sample(2000:2001, ncell(logo), replace=TRUE)
x <- predict(logo, m, re.form=~0)
> x
class : RasterLayer
dimensions : 77, 101, 7777 (nrow, ncol, ncell)
resolution : 1, 1 (x, y)
extent : 0, 101, 0, 77 (xmin, xmax, ymin, ymax)
crs : +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs
source : memory
names : layer
values : 0.1260796, 1.690493 (min, max)
由于“年”不是预测栅格,因此您需要以不同的方式提供它。
你可以做到
x2000 <- predict(logo, m, re.form=~0, const=data.frame(Year=2000))
x2001 <- predict(logo, m, re.form=~0, const=data.frame(Year=2001))
这是等效的(但效率较低)
logo$Year <- 2000
x2000 <- predict(logo, m, re.form=~0)
如果有很多年,也许像
years <- c(2000, 2001)
s <- list()
for (i in 1:length(years)) {
s[[i]] <- predict(logo, m, re.form=~0, const=data.frame(Year=years[i]))
}
s <- stack(s)
sm <- mean(s)
我正在尝试使用我适合 glmmTMB
包的 GLMM 在人口级别预测 R 中的栅格堆栈(即将随机效应设置为 0)。我遵循了 Ben Bolker 在 lme4
的模型,但即使函数参数 re.form=~0
除了 [=15] 之外似乎还适用于 predict.glmmTMB
=],当我预测使用 glmmTMB 模型时,它对我不起作用。这是一个使用 Robert Hijmans 在上述线程中提供的相同示例代码的示例:
# 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)
#fit model using glmmTMB
library(glmmTMB)
m <- glmmTMB(pa ~ red + blue + (1 | Year), data=v)
# use argument "re.form=~0" to make population-level prediction
x <- predict(logo, m, re.form=~0)
当我 运行 上述 predict
代码(生成对象 x)时,我得到错误:Error in eval(predvars, data, env) : object 'Year' not found
。谁能告诉我我可能做错了什么或者我该如何解决这个问题?
该错误表示您的测试数据“徽标”没有“年份”变量,有点不透明。
我只是在这里添加了相关代码,没有重复您上面提供的所有其他代码。
logo <- brick(system.file("external/rlogo.grd", package="raster"))
x <- predict(logo, m, re.form=~0)
Error in eval(predvars, data, env) : object 'Year' not found
logo$Year <- sample(2000:2001, ncell(logo), replace=TRUE)
x <- predict(logo, m, re.form=~0)
> x
class : RasterLayer
dimensions : 77, 101, 7777 (nrow, ncol, ncell)
resolution : 1, 1 (x, y)
extent : 0, 101, 0, 77 (xmin, xmax, ymin, ymax)
crs : +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs
source : memory
names : layer
values : 0.1260796, 1.690493 (min, max)
由于“年”不是预测栅格,因此您需要以不同的方式提供它。 你可以做到
x2000 <- predict(logo, m, re.form=~0, const=data.frame(Year=2000))
x2001 <- predict(logo, m, re.form=~0, const=data.frame(Year=2001))
这是等效的(但效率较低)
logo$Year <- 2000
x2000 <- predict(logo, m, re.form=~0)
如果有很多年,也许像
years <- c(2000, 2001)
s <- list()
for (i in 1:length(years)) {
s[[i]] <- predict(logo, m, re.form=~0, const=data.frame(Year=years[i]))
}
s <- stack(s)
sm <- mean(s)