遥感生态笔记生态遥感R语言

R语言长时间序列栅格数据之逐像素相关性分析

2020-03-24  本文已影响0人  年迈的小怪兽

问题引入

假设有两组栅格数据,一组代表2019年中国每月降雨量,一组代表2019年中国每月植被叶面积指数(LAI)。想要得到中国月降水量与LAI的相关性分布,那么需要对两组栅格数据对应的栅格点进行逐栅格的相关性分析。

R包加载

library(raster)
library(broom)
library(rgdal)

数据导入

将降水数据导入栅格栈中,这个过程可以理解为将降水数据按时间顺序从上到下堆叠。同理,按相同的时间顺序将LAI数据堆叠。值得一提的是,stack()函数在堆叠栅格数据时是按文件名拼音和数字大小顺序自动堆叠的,具体规则可以亲自尝试。最后,将这两个栅格栈合并成一个。

setwd("D:/1data/rain")                                    #降水数据所在文件夹
raster1<-stack(list.files(pattern='*.tif$'))         #堆栈降水栅格数据
setwd("D:/1data/LAI")                                    #LAI数据所在文件夹
raster1<-stack(list.files(pattern='*.tif$'))         #堆栈LAI栅格数据
r_all<-stack(raster1,raster2)

编写函数

对相关性分析函数稍作改变。

corvec <- function(vec = NULL) {
  cor(
    # 上半部分栅格栈
    x      = vec[1:(length(vec)/2)],
    # 下半部分栅格栈
    y      = vec[((length(vec)/2) + 1):length(vec)],
    use    = 'complete.obs',
    #如果是线性相关性分析改成‘person’
    method = 'spearman'           
  )
}

逐栅格计算

corlyrs <- calc(
  r_all,
  fun = function(x) {
    # 对缺失值进行处理
    if (all(is.na(x))) {
      NA_real_
    } else {
      corvec(vec = x)
    }
  }
)

栅格输出

writeRaster(corlyrs,filename = file.path( "E:/1data","降水与LAI相关性分析.tif"),format="GTiff", overwrite=TRUE)

小结

以上方法是可以推广的,线性回归函数lm()和相关性分析函数cor()的输入都可以是向量,因此只要函数支持向量输入,理论上讲都可以类比上述过程实现。但是如果函数只支持数据框输入,如gbm包中的函数gbm(),那就只能另辟蹊径了。

上一篇下一篇

猜你喜欢

热点阅读