Вычисление значений R2 в соответствии с типами растительного покрова между 2 растрами в R? - PullRequest
1 голос
/ 21 марта 2020

У меня есть три растра в 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      : agbipsl 
values     : 0, 20.86364  (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, 31.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/Halima Usman/Documents/ICIMOD/landusemaskedme.tif 
names      : landusemaskedme 
values     : 1, 12  (min, max)
attributes :
       ID                          zn
 from:  1 evergreen needleleaf forest
  to : 12                   croplands

Я строю график рассеяния между lpjre и gcre в соответствии с различными классами земного покрова:

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

Я хотел бы найти, как я могу вычислить значение r2 между lpjre и gcre в соответствии с типами растительного покрова?

Я пытаюсь этот код и выдает ошибку:

> 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

1 Ответ

0 голосов
/ 21 марта 2020

Для этого вы можете использовать векторное преобразование. Сначала воспроизводимый пример:

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)

Теперь вы можете преобразовать растровые значения в векторы, используя []. Оттуда вы можете использовать логический выбор даже между растрами, предполагая, что они имеют соответствующие геометрические особенности c.

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