根据 R 中 2 个栅格之间的土地覆盖类型计算 R2 值?
Computing R2 values according to land cover types between 2 rasters in R?
我在 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
我根据
的不同土地覆盖类绘制了lpjre
和gcre
之间的散点图
plot(lpjre[tif4==2],gcre[tif4==2])
我想知道如何根据土地覆盖类型计算 lpjre
和 gcre
之间的 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
您可以为此使用矢量转换。首先是一个可重现的例子:
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
我在 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
我根据
的不同土地覆盖类绘制了lpjre
和gcre
之间的散点图
plot(lpjre[tif4==2],gcre[tif4==2])
我想知道如何根据土地覆盖类型计算 lpjre
和 gcre
之间的 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
您可以为此使用矢量转换。首先是一个可重现的例子:
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