R中两个光栅图像之间的线性回归
Linear regression between two raster images in R
我需要线性回归来计算经验参数。 L1 是光栅图像,格式为 .tif。 L2 也是事先计算好的光栅图像。两个图像具有相同的列数和行数。
公式为:
L1 = a + b * L2 在 R 中翻译为:
lm(L1 ~ L2)
在第二个公式中我稍后需要 a 和 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]}}
但是计算了好长时间没有结果
如果您想进行 local 回归,您可以使用 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
如果 s
太大了,你可以这样做
v <- sampleRegular(s, 100000)
v <- data.frame(na.omit(v))
等等
现在有了一些数据(并展示了如何获得残差)
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
我需要线性回归来计算经验参数。 L1 是光栅图像,格式为 .tif。 L2 也是事先计算好的光栅图像。两个图像具有相同的列数和行数。
公式为: L1 = a + b * L2 在 R 中翻译为:
lm(L1 ~ L2)
在第二个公式中我稍后需要 a 和 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]}}
但是计算了好长时间没有结果
如果您想进行 local 回归,您可以使用 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
如果 s
太大了,你可以这样做
v <- sampleRegular(s, 100000)
v <- data.frame(na.omit(v))
等等
现在有了一些数据(并展示了如何获得残差)
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