I have two rasters and I want to perform linear regression (LR). The first raster has 500m pixel size (called ntl.tif) and the other has 100m (called tirs.tif). In order to perform LR I need to aggregate the tirs to match the spatial resolution of ntl. After that I can perform LR and I can use the predict
function at the coarse spatial scale.
My question is this: How can I apply the model parameters (intercept and slope) to predict
at the fine spatial scale? What I mean is, I want to use the function predict
so I can create the lm_pred raster (see code below) and not by typing the coefficients manually like I do.
I know I need to check that the names (band names) of the raster from which the model was fitted should be the same as the names of the raster to which the model will be applied, but I can't figure it out how I can do that.
This is what I am doing so far:
library(terra)
ntl = rast("path/ntl.tif") # coarse resolution raster
tirs = rast("path/tirs.tif") # fine resolution raster
tirs_res <- resample(tirs, ntl, method="bilinear")
s = c(ntl, tirs_res)
names(s) = c("ntl", "tirs")
model <- lm(formula = ntl ~ tirs, data = s)
lm_pred = model$coefficients[1] + model$coefficients[2] * tirs
If I use the predict
function:
ntl = rast("path/ntl.tif") # coarse resolution raster
tirs = rast("path/tirs.tif") # fine resolution raster
tirs_res <- resample(tirs, ntl, method="bilinear")
s = c(ntl, tirs_res)
names(s) = c("ntl", "tirs")
model <- lm(formula = ntl ~ tirs, data = s)
p <- predict(tirs, model)
I am getting this error: Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : object is not a matrix. In addition: Warning message:'newdata' had 1377 rows but variables found have 1008 rows
Here's my dataset:
ntl = rast(ncols=272, nrows=200, nlyrs=1, xmin=12662503.7366, xmax=12798503.7366, ymin=3532049.3009, ymax=3632049.3009, names=c('ntl'), crs='EPSG:3857')
tirs = rast(ncols=1377, nrows=1008, nlyrs=1, xmin=12662000, xmax=12799700, ymin=3531700, ymax=3632500, names=c('B10_median'), crs='EPSG:3857')