在raster
工具包提供的方法中,栅格数据可以直接用于非空间模型和空间模型预测,本篇主要介绍前者。
空间模型是指使用了空间位置作为隐式自变量(implicit independent variables)的模型,如克里金插值;非空间模型则指除此之外的其他模型,如线型模型、主成分分析、随机森林模型等。
在基础包中,用于模型预测的函数predict()
函数,使用语法为predict(object, newdata, ...)
,其中object
参数表示模型对象,newdata
表示用于执行预测的数据。
在raster
中,用于栅格数据的非空间模型预测的函数也被命名为predict()
,使用语法为predict(object, model, ...)
,其中object
参数表示栅格对象,即执行预测的栅格数据,model
为模型对象。它的完整语法如下:
predict(object, model, filename = "",
fun = predict, ext = NULL,
const = NULL, index = 1,
na.rm = TRUE, inf.rm = FALSE,
factors = NULL,
format, datatype,
overwrite = FALSE, progress = '', ...)
线性模型
先使用常规数据拟合一个线性模型:
data("mtcars")
mod <- lm(mpg ~ wt + qsec + I(wt^2),
data = mtcars)
mod
## Call:
## lm(formula = mpg ~ wt + qsec + I(wt^2), data = mtcars)
##
## Coefficients:
## (Intercept) wt qsec I(wt^2)
## 32.6418 -12.4331 0.8599 1.0730
再定义一个多图层栅格对象,每个图层对应着一个模型中的自变量,图层名称必须与自变量名完全一致:
library(raster)
wt <- raster(vals = 1:9, nrows = 3, ncols = 3)
qsec <- raster(vals = 9:1, nrows = 3, ncols = 3)
r <- brick(wt, qsec)
names(r) <- c("wt", "qsec")
plot(r)
将栅格对象用于模型预测:
r.pred <- predict(r, mod)
plot(r.pred)
随机森林模型
除基础包中的模型外,predict()
函数也支持其他一些非空间模型,如随机森林模型:
library(randomForest)
rdfmod <- randomForest(mpg ~ wt + qsec + I(wt^2),
data = mtcars)
r.pred2 <- predict(r, rdfmod)
plot(r.pred2)
fun
参数predict()
函数的fun
参数默认值为predict
,此处指的是基础包中的predict()
函数,即返回的是因变量预测值。该参数支持自定义函数。
## 预测的标准误
pred.se <- function(model, data) {
v <- predict(model, data, se.fit=TRUE)
se = as.vector(v$se.fit)
}
r.predse <- predict(r, mod, fun = pred.se)
plot(r.predse)
index
参数当fun
参数指定的函数返回的预测变量不止一个时,可以通过index
指定所要保留的变量索引。默认情况下index = 1
表示只保留第一个变量。
以主成分分析为例,它输出的主成分与参与模型的变量数目一致。默认情况下,prdeict()
函数只输出第一个主成分:
mod.pca <- prcomp(~ wt + qsec, data = mtcars)
r.pca <- predict(r, mod.pca)
plot(r.pca)
设置index = 1:2
可以将两个主成分得分都输出出来,因此返回的栅格对象是多图层的:
r.pca2 <- predict(r, mod.pca, index = 1:2)
plot(r.pca2)