如何在 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 值是相同的。
我有 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 值是相同的。