【问题标题】:Linear regression between two raster images in RR中两个光栅图像之间的线性回归
【发布时间】:2018-06-20 00:59:28
【问题描述】:

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

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

lm(L1 ~ L2)

在第二个公式中,我稍后需要 a nd 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]}}

但是,计算需要很长时间,而且没有得出结果

【问题讨论】:

    标签: r linear-regression raster r-raster


    【解决方案1】:

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

    在你的情况下,你似乎想要一个 global 回归。你可以这样:

    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
    

    【讨论】:

    • 谢谢!我将如何添加一个条件,比如说:L2 > 0.0?使用 which 会引发错误,即该论点不合逻辑
    • 您可以对v 进行子集化处理。例如。 v &lt;- v[v$L2 &gt; 0.0, ]
    • 如何将此模型的残差绘制为新的栅格图层?
    • 那将是一个新问题,但我已经在上面添加了它
    猜你喜欢
    • 2016-01-03
    • 2014-11-25
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2017-09-17
    相关资源
    最近更新 更多