移动窗口回归

时间:2015-05-21 16:39:09

标签: r linear-regression raster

我想对表示Landsat数据的Band3和Band4的两个栅格堆栈的每个像素执行移动窗口回归。结果应该是两个额外的堆栈,一个表示拦截,另一个表示回归的斜率。 因此,堆栈“B3”和堆栈“B4”的第1层导致堆栈“拦截”的层1并堆叠“斜率”。堆栈B3的第2层和堆栈B4产生第2层......,依此类推。

我已经使用了gwr函数,但希望保留在光栅包中。 我知道必须包含focal才能设置我的移动窗口(应该是3x3像素),并且不知何故是一个线性模型,如:lm(as.matrix(b3)~as.matrix(b4)),虽然我不认为这会让我获得价值逐像素...

也可以采用逐层方法代替rasterstack。 (所以它不一定是Band3的rasterstack。

有没有人在R中如何编程呢?

1 个答案:

答案 0 :(得分:2)

这是一种改编自?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])。