2015-03-09 2 views
0

У меня есть объект модели регрессии с частичным наименьшим квадратом в R, который я хотел бы использовать для прогнозирования значений в виде пространственных шаблонов на карте.Предсказать многодиапазонный растровый объект с PLS-моделью в R

Пока что это не работает для меня. Модель PLS, была обработана в R (PLS пакета), а вход представляет собой таблицу:

Dependent variable Indepentent var. 1 Indepentend var ...  Indepented var. 101 
Value    value    value     value 
Value    value    value     value 
...     ...     ...      ... 

Так я хочу, чтобы предсказать значение зависимой переменной в соответствии с 101 indepentent переменных для каждого пикселя на карте. Однако вход модели PLS представляет собой таблицу, а данные прогнозирования состоят из файла BSQ с 101 диапазоном (слоями). Таким образом, структура данных учебных данных и данных прогнозирования совершенно различна.

Кто-то сказал мне, что я должен уложить карту BSQ и что я мог бы просто использовать предсказание fuction после этого. Это не работает.

Как я могу каким-то образом принудить 101 группу в файле BSQ к структуре, на которой я смогу сделать прогноз для каждого пикселя на основе моей модели PLS? Баир в виду, что я немного новичок, когда дело доходит до Р.

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) 

Спасибо! Arend

ответ

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) и имитируйте это для прогноза.

Смежные вопросы