我在R中有一个偏最小二乘回归模型对象,我想用它来预测地图上的空间模式。
然而,到目前为止,这对我不起作用。 PLS模型在R(PLS包)中处理,输入是表格:
Dependent variable Indepentent var. 1 Indepentend var ... Indepented var. 101
Value value value value
Value value value value
... ... ... ...
所以我想根据地图上每个像素的101个独立变量来预测因变量的值。然而,PLS模型输入是表格,并且预测数据由具有101个带(层)的BSQ文件组成。因此,训练数据和预测数据的数据结构完全不同。
有人告诉我,我应该堆叠BSQ地图,之后我可以使用Predict功能。这不起作用。
如何以某种方式将BSQ文件中的101个波段强制转换为一个结构,我可以根据我的PLS模型对每个像素进行预测?请记住,当涉及到R时,我有点像新手。
library(raster)
library(rgdal)
library(maptools)
library(sp)
library(pls)
# the dir and name of the plsr model object
modDir <- "H:/Process"
modName <- "Model"
# the dir and type of the remote sensing image
rsDir <- "H:/data"
rsName <- "Hyper.bsq"
# Read the PLSR model
setwd("H:/Process")
# setwd(paste(modDir, modName, sep= "/"))
m <- load(list.files()[grep("Model", list.files())])
mod <- get(m)
# Read the RS image
setwd(rsDir)
rs <- stack(rsName)
predict(mod, rs)
谢谢!阿伦德
答案 0 :(得分:0)
rs
的结构需要与用于拟合模型的数据结构完全相同。通常,拟合模型将使用(这使用示例数据):
library(plsr)
yarn.pls <- plsr(density ~ NIR, 6, data = yarn)
其中yarn[['NIR']]
实际上是一个矩阵,其行数与整体data.frame
的行数相同:
> str(yarn)
'data.frame': 28 obs. of 3 variables:
$ NIR : num [1:28, 1:268] 3.07 3.07 3.08 3.08 3.1 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : NULL
.. ..$ : NULL
$ density: num 100 80.2 79.5 60.8 60 ...
$ train : logi TRUE TRUE TRUE TRUE TRUE TRUE ...
为了进行预测,您需要提供预测data.frame
,该NIR
也具有density
变量(具有该名称),该变量实际上是具有相同数量的列的矩阵(即你的情况),和许多行。对于每一行,进行str
的预测。
因此,请仔细查看您的训练数据(使用{{1}})并模拟预测。