R中两个光栅图像之间的线性回归

Ald*_*e 2 3 r raster linear-regression r-raster

我需要一个线性回归来计算经验参数.L1是光栅图像,格式为.tif.L2也是预先计算的光栅图像.两个图像具有相同数量的列和行.

公式为:L1 = a + b*L2,其在R中翻译为:

lm(L1 ~ L2)
Run Code Online (Sandbox Code Playgroud)

在第二个式I以后需要一个第二b.

我现在面临的问题是,两个栅格都包含NA值,我不知道如何为线性回归构建函数.我对R不熟悉所以我坚持这个可能相当简单的问题.我想我必须使用calc,但不知道怎么做.

编辑:到目前为止我有这个代码:

s = stack(L1,L2)
fun = function(x) {if (is.na(x[1])) { NA } else {lm(x[1] ~ x[2])$coefficients[2]}}
Run Code Online (Sandbox Code Playgroud)

但是,计算需要很长时间才能得出结果

Rob*_*ans 7

calc如果您想进行局部回归,则可以使用,即每个网格单元(像素)的单独回归.但是在这种情况下没有任何意义,因为你只有两个栅格; 因此每个网格单元只有一个数据点.

在您的情况下,您似乎想要全局回归.你可以这样:

s <- stack(L1, L2)
v <- data.frame(na.omit(values(s)))
# this step may not be necessary
names(v) <- c('L1', 'L2')
m <- lm(L2 ~ L1, data=v)
m
Run Code Online (Sandbox Code Playgroud)

如果s太大了,你可以做类似的事情

v <- sampleRegular(s, 100000)  
v <- data.frame(na.omit(v))
Run Code Online (Sandbox Code Playgroud)

等等

现在有一些数据(并显示如何获取残差)

library(raster)
f <- stack(system.file("external/rlogo.grd", package="raster")) 
s <- stack(f)
names(s)
v <- data.frame(na.omit(values(s)))
m <- lm(red ~ green, data=v)
m

p <- predict(s, m)
residuals <- s$red - p
Run Code Online (Sandbox Code Playgroud)