R 中栅格堆栈的分位数函数似乎 return 不正确的值
quantile function for a raster stack in R seems to return incorrect values
我正在尝试使用 raster::quantile
计算 R 中栅格堆栈的分位数。这适用于单个栅格,但将函数应用于栅格堆栈,其中栅格不具有相同的 NA 像元会导致不正确的分位数值。
这是一个可重现的问题示例:
library(raster)
#> Loading required package: sp
#create raster stack
r <-raster(system.file("external/test.grd", package="raster"))
r1 <- setValues(r, sample(100:2000, ncell(r), replace = TRUE))
s <- stack(r, r1)
plot(s)
#quantiles of raster stack
quantile(s)
#> 0% 25% 50% 75% 100%
#> test.1 138.7071 293.9575 371.9001 501.0102 1736.058
#> test.2 100.0000 596.0000 1062.0000 1530.0000 2000.000
#quantiles of each raster in the stack
quantile(s[[1]])
#> 0% 25% 50% 75% 100%
#> 138.7071 293.9575 371.9001 501.0102 1736.0580
quantile(s[[2]])
#> 0% 25% 50% 75% 100%
#> 100 591 1071 1530 2000
如您所见,与直接在该栅格上使用 quantile
函数相比,使用栅格堆栈计算的 25% 和 50% 分位数对于堆栈中的第二个栅格是不同的。请注意,如果两个栅格具有相同的 NA 值,则不会发生此问题,例如
quantile(stack(r1, sqrt(r1)))
#> 0% 25% 50% 75% 100%
#> test 100 585.00000 1045.50000 1537.00000 2000.00000
#> layer 10 24.18677 32.33419 39.20459 44.72136
quantile(r1)
#> 0% 25% 50% 75% 100%
#> 100.0 585.0 1045.5 1537.0 2000.0
quantile(sqrt(r1))
#> 0% 25% 50% 75% 100%
#> 10.00000 24.18677 32.33419 39.20459 44.72136
在您使用的 CRAN 版本中,如果单元格在一层中为 NA,则它在所有层中都设置为 NA。我同意这不是预期的,我已经在 3.5-4 版(目前是开发版)中修复了它。
quantile(s)
# 0% 25% 50% 75% 100%
#test.1 138.7071 293.9575 371.9001 501.0102 1736.058
#test.2 100.0000 601.0000 1061.5000 1542.0000 2000.000
我正在尝试使用 raster::quantile
计算 R 中栅格堆栈的分位数。这适用于单个栅格,但将函数应用于栅格堆栈,其中栅格不具有相同的 NA 像元会导致不正确的分位数值。
这是一个可重现的问题示例:
library(raster)
#> Loading required package: sp
#create raster stack
r <-raster(system.file("external/test.grd", package="raster"))
r1 <- setValues(r, sample(100:2000, ncell(r), replace = TRUE))
s <- stack(r, r1)
plot(s)
#quantiles of raster stack
quantile(s)
#> 0% 25% 50% 75% 100%
#> test.1 138.7071 293.9575 371.9001 501.0102 1736.058
#> test.2 100.0000 596.0000 1062.0000 1530.0000 2000.000
#quantiles of each raster in the stack
quantile(s[[1]])
#> 0% 25% 50% 75% 100%
#> 138.7071 293.9575 371.9001 501.0102 1736.0580
quantile(s[[2]])
#> 0% 25% 50% 75% 100%
#> 100 591 1071 1530 2000
如您所见,与直接在该栅格上使用 quantile
函数相比,使用栅格堆栈计算的 25% 和 50% 分位数对于堆栈中的第二个栅格是不同的。请注意,如果两个栅格具有相同的 NA 值,则不会发生此问题,例如
quantile(stack(r1, sqrt(r1)))
#> 0% 25% 50% 75% 100%
#> test 100 585.00000 1045.50000 1537.00000 2000.00000
#> layer 10 24.18677 32.33419 39.20459 44.72136
quantile(r1)
#> 0% 25% 50% 75% 100%
#> 100.0 585.0 1045.5 1537.0 2000.0
quantile(sqrt(r1))
#> 0% 25% 50% 75% 100%
#> 10.00000 24.18677 32.33419 39.20459 44.72136
在您使用的 CRAN 版本中,如果单元格在一层中为 NA,则它在所有层中都设置为 NA。我同意这不是预期的,我已经在 3.5-4 版(目前是开发版)中修复了它。
quantile(s)
# 0% 25% 50% 75% 100%
#test.1 138.7071 293.9575 371.9001 501.0102 1736.058
#test.2 100.0000 601.0000 1061.5000 1542.0000 2000.000