如何在 R 中的两个 tiff 文件之间找到 r2 (Rsquared)?

How to find r2 (Rsquared) between two tiff files in R?

我有 2 个栅格,我想计算它们之间的 r2 (Rsquared)。不是相关性而是 r2 的值。

 >modelledraster
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, 400  (min, max)

> modelledraster
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      : VegH
values     : 1.874989e-05, 250  (min, max)

计算这两个栅格之间的 r2 的最简单方法是什么? 示例数据:

library(raster)
set.seed(42)

ras1 <- raster(nrow = 10, ncol = 10)
ras2 <- raster(nrow = 10, ncol = 10)

您可以使用以下代码计算 2 个栅格之间的 Rsquare

#Create 2 rasters
library(raster)

ras1 <- raster(nrow = 10, ncol = 10)
ras2 <- raster(nrow = 10, ncol = 10)
# Assign random cell values
set.seed(42)
values(ras1) <- runif(ncell(ras1))
values(ras2) <- runif(ncell(ras2))

df <- cbind.data.frame(values(ras1), values(ras2))
names(df) <- c("ras1", "ras2")
lm_mod <- lm(ras1~ras2, data = df)
summary(lm_mod)

#> Call:
#> lm(formula = ras1 ~ ras2, data = df)
#>
#> Residuals:
#>      Min       1Q   Median       3Q      Max 
#> -0.54040 -0.25376  0.05857  0.22808  0.44925 
#> 
#> Coefficients:
#>             Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)  0.57525    0.05202  11.058   <2e-16 ***
#> ras2        -0.12545    0.09911  -1.266    0.209    
#> ---
#> Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#> 
#> Residual standard error: 0.2824 on 98 degrees of freedom
#> Multiple R-squared:  0.01609,    Adjusted R-squared:  0.006045 
#> F-statistic: 1.602 on 1 and 98 DF,  p-value: 0.2086

#Or
cor(values(ras1), values(ras2), use="complete.obs", method = 'pearson')^2
#>[1] 0.01608534

你可以看到 lm 和平方 cor 函数的 Rsquare 值是相同的。