raster | 栅格对象如何用于非空间模型的预测?

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)
raster | 栅格对象如何用于非空间模型的预测?_第1张图片

将栅格对象用于模型预测:

r.pred <- predict(r, mod)
plot(r.pred)
raster | 栅格对象如何用于非空间模型的预测?_第2张图片
  • 随机森林模型

除基础包中的模型外,predict()函数也支持其他一些非空间模型,如随机森林模型:

library(randomForest)
rdfmod <- randomForest(mpg ~ wt + qsec + I(wt^2),
                       data = mtcars)

r.pred2 <- predict(r, rdfmod)
plot(r.pred2)
raster | 栅格对象如何用于非空间模型的预测?_第3张图片

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)
raster | 栅格对象如何用于非空间模型的预测?_第4张图片

index参数

fun参数指定的函数返回的预测变量不止一个时,可以通过index指定所要保留的变量索引。默认情况下index = 1表示只保留第一个变量。

以主成分分析为例,它输出的主成分与参与模型的变量数目一致。默认情况下,prdeict()函数只输出第一个主成分:

mod.pca <- prcomp(~ wt + qsec, data = mtcars)

r.pca <- predict(r, mod.pca)
plot(r.pca)
raster | 栅格对象如何用于非空间模型的预测?_第5张图片

设置index = 1:2可以将两个主成分得分都输出出来,因此返回的栅格对象是多图层的:

r.pca2 <- predict(r, mod.pca, index = 1:2)
plot(r.pca2)
raster | 栅格对象如何用于非空间模型的预测?_第6张图片

你可能感兴趣的:(python,java,机器学习,js,tensorflow)