我想对代表Landsat数据的Band3和Band4的两个光栅堆栈的每个像素执行移动窗口回归。结果应该是两个额外的堆栈,一个代表截距,另一个代表回归的斜率。因此,堆栈B3和堆栈B4的第一层导致堆栈截距和堆栈斜率的第一层。堆栈B3和堆栈B4的第2层产生第2层....等等。
我已经使用了gwr
函数,但想留在栅格包中。我不知何故知道focal
必须包括为了设置我的移动窗口(应该是3x3像素)和某种程度上的线性模型,如:lm(as.matrix(b3)~as.matrix(b4))
虽然我不认为这让我的像素值…
除了栅格堆栈,还可以采用逐层方法。(所以它不一定是Band3的栅格堆栈。
有人知道如何在R中编程吗?
这是一种方法,改编自?raster::localFun
set.seed(0)
b <- stack(system.file("external/rlogo.grd", package="raster"))
x <- flip(b[[2]], 'y') + runif(ncell(b))
y <- b[[1]] + runif(ncell(b))
# local regression:
rfun <- function(x, y, ...) {
d <- na.omit(data.frame(x, y))
if (nrow(d) < 3) return(NA)
m <- lm(y~x, data=d)
# return slope
coefficients(m)[2]
}
ff <- localFun(x, y, fun=rfun)
plot(ff)
不幸的是,您将不得不运行此两次以获得斜率和截距(coefficients(m)[1]
)。