【问题标题】:Computing R2 values according to land cover types between 2 rasters in R?根据R中2个栅格之间的土地覆盖类型计算R2值?
【发布时间】:2020-03-21 15:55:38
【问题描述】:

我在 r 中有三个栅格

> lpjre
class      : RasterLayer 
dimensions : 2803, 5303, 14864309  (nrow, ncol, ncell)
resolution : 0.008333333, 0.008333333  (x, y)
extent     : 60.85, 105.0417, 15.95833, 39.31667  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
source     : memory
names      : xxx 
values     : 0, 21  (min, max)

> gcre
class      : RasterLayer 
dimensions : 2803, 5303, 14864309  (nrow, ncol, ncell)
resolution : 0.008333333, 0.008333333  (x, y)
extent     : 60.85, 105.0417, 15.95833, 39.31667  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
source     : memory
names      : layer 
values     : 0, 39.72  (min, max)

和土地覆盖栅格

> tif4
class      : RasterLayer 
dimensions : 2803, 5303, 14864309  (nrow, ncol, ncell)
resolution : 0.008333333, 0.008333333  (x, y)
extent     : 60.85, 105.0417, 15.95833, 39.31667  (xmin, xmax, ymin, ymax)
crs        : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
source     : C:/Users/XXXX/landusemaskedme.tif 
names      : landusemaskedme 
values     : 1, 12  (min, max)
attributes :
       ID                          zn
 from:  1 evergreen needleleaf forest
  to : 12                   croplands

我根据不同的土地覆盖等级在lpjregcre之间绘制散点图

plot(lpjre[tif4==2],gcre[tif4==2]) 

我想知道如何根据土地覆盖类型计算lpjregcre 之间的r2 值?

我尝试这段代码并给出错误:

> cor(values(lpjre)[tif4==1], values(gcre)[tif4==1], use="complete.obs", method = 'pearson')
Error in values(gcre)[tif4 == 1] : invalid subscript type 'S4'

可重现的栅格:

library(raster)
ras1 <- raster(matrix(c(1,1,1,2,2,2)))
ras2 <- raster(matrix(c(1,1,1,2,2,2)))

#Generating landcover example data
raster2 <- raster(matrix(c(1,1,1,2,2,2,3,3,3),ncol =3))
raster2 <- as.factor(raster2)

rat <- levels(raster2 )[[1]]
rat[["landcover"]] <- c("land","ocean/lake", "rivers")
levels(raster2 ) <- rat

【问题讨论】:

  • 您能否提出一个最小的可重现示例。因此,您可以更轻松地提供帮助。使用例如ras1 &lt;- raster(matrix(c(1,1,1,2,2,2))) 从头开始​​生成栅格。

标签: r raster scatter-plot tiff r-raster


【解决方案1】:

您可以为此使用矢量转换。首先是一个可重现的例子:

library(raster)
set.seed(42)

ras1 <- raster(nrow = 10, ncol = 10)
ras2 <- raster(nrow = 10, ncol = 10)
lcc <- raster(nrow = 10, ncol = 10)
ras1[] <- runif(100)
ras2[] <- runif(100)
lcc[] <- sample(c(1,2), 100, replace = TRUE)

现在您可以使用[] 将栅格值转换为矢量。从那里开始,您甚至可以在栅格之间使用逻辑选择,假设它们具有相应的几何特征。

cor(ras1[lcc[] == 2], ras2[lcc[] == 2], use = "complete.obs", method = "pearson")
# [1] -0.1644459

【讨论】:

  • 谢谢!我想知道如何根据土地覆盖类型在散点图 b/w r1 和 r2 上绘制回归线?
  • 您是否尝试过创建线性模型lm(...) 并绘制它?
  • 我对该代码有点困惑。例如,simple.fit = lm(ras1~ras2, data=dataset)。数据集应该是什么?我应该堆叠 ras1 和 ras2 吗?
  • 您应该在尝试 lm() 之前将其转换为 data.frame
  • 通过这段代码:scatter.smooth(x=ras1$df, y=ras2$df, main="scatterplot"),我实现了整个光栅的lm。如何根据土地覆盖类型实现 lm?例如,我想实现散点图和 lm b/w ras1 和 ras2 但土地覆盖类型 1(可能代表土地)
猜你喜欢
  • 2017-09-23
  • 2020-05-06
  • 2021-08-14
  • 1970-01-01
  • 2018-09-17
  • 2018-05-16
  • 2016-03-12
  • 2016-03-09
  • 2018-09-15
相关资源
最近更新 更多