误差分布:R 中单个光栅文件的标准偏差
distribution of errors: standard deviation for single raster file in R
我有一个光栅,我想为其计算
- 均方根误差 (RMSE)
- 平均误差
- 绝对平均误差
- 标准偏差
library(r)
r <- raster(system.file("external/test.grd", package="raster"))
对于 RMSE 和(绝对)平均误差,我需要某种预测值(?)我如何 calculate/get 它们?
对于标准偏差我可以写
sd(r)
但这给我错误
Error in as.double(x) :
cannot coerce type 'S4' to vector of type 'double'
我找了一段时间,只找到了适用于栅格堆栈的解决方案,然后 return 另一个栅格。但我不想那样。对于 4 次测量中的每一次,我都想要一个数字来 return 我计算出的值。
让我们创建具有已知标准偏差的数据:
set.seed(69)
m <- matrix(rnorm(10000), nrow = 100)
sd(m)
#> [1] 0.9979821
现在我们可以将其转换为光栅:
library(raster)
r <- raster(m)
r
#> class : RasterLayer
#> dimensions : 100, 100, 10000 (nrow, ncol, ncell)
#> resolution : 0.01, 0.01 (x, y)
#> extent : 0, 1, 0, 1 (xmin, xmax, ymin, ymax)
#> crs : NA
#> source : memory
#> names : layer
#> values : -3.507427, 3.669151 (min, max)
如果您想获取原始数据的值,您可以使用 data
插槽:
sd(r@data@values)
#> [1] 0.9979821
或者,更简洁地,使用子集运算符 []
:
sd(r[])
#> [1] 0.9979821
由 reprex package (v0.3.0)
于 2020-08-21 创建
而
sd(r[])
有点工作,它返回 NA,但通过添加“na.rm = TRUE”它工作正常。
另一个答案可能是:
sd(as.matrix(r), na.rm = TRUE)
我认为这基本上是一样的。第一个选项读取数据,而第二个选项首先将数据转换为矩阵。
cellStats
方法
set.seed(69)
m <- matrix(rnorm(10000), nrow = 100)
sd(m)
#[1] 0.9979821
library(raster)
r <- raster(m)
cellStats(r, sd)
#[1] 0.9979821
或者,使用 terra
,global
方法
library(terra)
x <- rast(m)
global(x, sd)
# global
#lyr.1 0.9979821
我有一个光栅,我想为其计算
- 均方根误差 (RMSE)
- 平均误差
- 绝对平均误差
- 标准偏差
library(r)
r <- raster(system.file("external/test.grd", package="raster"))
对于 RMSE 和(绝对)平均误差,我需要某种预测值(?)我如何 calculate/get 它们?
对于标准偏差我可以写
sd(r)
但这给我错误
Error in as.double(x) :
cannot coerce type 'S4' to vector of type 'double'
我找了一段时间,只找到了适用于栅格堆栈的解决方案,然后 return 另一个栅格。但我不想那样。对于 4 次测量中的每一次,我都想要一个数字来 return 我计算出的值。
让我们创建具有已知标准偏差的数据:
set.seed(69)
m <- matrix(rnorm(10000), nrow = 100)
sd(m)
#> [1] 0.9979821
现在我们可以将其转换为光栅:
library(raster)
r <- raster(m)
r
#> class : RasterLayer
#> dimensions : 100, 100, 10000 (nrow, ncol, ncell)
#> resolution : 0.01, 0.01 (x, y)
#> extent : 0, 1, 0, 1 (xmin, xmax, ymin, ymax)
#> crs : NA
#> source : memory
#> names : layer
#> values : -3.507427, 3.669151 (min, max)
如果您想获取原始数据的值,您可以使用 data
插槽:
sd(r@data@values)
#> [1] 0.9979821
或者,更简洁地,使用子集运算符 []
:
sd(r[])
#> [1] 0.9979821
由 reprex package (v0.3.0)
于 2020-08-21 创建而
sd(r[])
有点工作,它返回 NA,但通过添加“na.rm = TRUE”它工作正常。 另一个答案可能是:
sd(as.matrix(r), na.rm = TRUE)
我认为这基本上是一样的。第一个选项读取数据,而第二个选项首先将数据转换为矩阵。
cellStats
方法
set.seed(69)
m <- matrix(rnorm(10000), nrow = 100)
sd(m)
#[1] 0.9979821
library(raster)
r <- raster(m)
cellStats(r, sd)
#[1] 0.9979821
或者,使用 terra
,global
方法
library(terra)
x <- rast(m)
global(x, sd)
# global
#lyr.1 0.9979821