使用 R 中的 NA 计算栅格数据的变异函数

rob*_*ntw 5 statistics r spatial geor

摘要:我有一个包含 NA 值的栅格数据集,并且想要计算它的变异函数,而忽略 NA。我怎样才能做到这一点?

我有一个使用readGDAL函数加载到 R 中的图像,存储为im. 为了使这种可重现,dput图像上的结果可在https://gist.github.com/2780792 获得。我正在尝试显示此数据的变异函数并且正在挣扎。我将经历到目前为止我已经尝试过的:

我尝试了该gstat软件包,但似乎无法获得有效的函数调用。我已经收集到,基本上我需要的是数据值本身 ( im@data$band1) 和坐标 ( coordinates(im))。我尝试了各种命令,例如:

> variogram(locations=coordinates(im), y = im@data$band1)
Error in is.list(object) : 'object' is missing
Run Code Online (Sandbox Code Playgroud)

> variogram(coordinates(im), im@data$band1)
Error in variogram.default(coordinates(im), im@data$band1) : 
  argument object and locations should be lists
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

由于这似乎不起作用,我尝试了geoR使用以下方法调用的软件包:

> variog(coords=coordinates(im), data=im@data$band1)
variog: computing omnidirectional variogram
Error in FUN(X[[1L]], ...) : NA/NaN/Inf in foreign function call (arg 4)
Run Code Online (Sandbox Code Playgroud)

该错误似乎与其中包含 NA 的数据有关,因此我尝试使用 删除它们na.omit,但这会将所有 NA 留在那里。这是有道理的,因为光栅文件必须在每个网格方块中都有一些东西。有没有办法以某种方式删除 NA,或者至少让variog命令忽略它们?

任何帮助将非常感激。

mne*_*nel 6

如果传递给的数据对象gstat:variogram是空间对象(您的数据是 a SpatialGridDataFrame),那么您不需要指定位置,因为这些位置包含在数据中。

但是,显然这些NA值会导致问题,因此如果我们强制网格对象为 a SpatialPointsDataFrame,这将删除这些NA

im包含数据https://gist.github.com/2780792

library(gstat)
point_data <- as(im, 'SpatialPointsDataFrame')
gstat_variogram <- variogram(band1 ~ 1, data = point_data)
Run Code Online (Sandbox Code Playgroud)

使用 geoR

library(geoR)
geor_variogram <- variog(coords = coordinates(point_data), 
                          data = point_data@data$band1)
Run Code Online (Sandbox Code Playgroud)

或者更简单(geoR与类的对象一起使用geodata并包含as.geodata从 a 转换SpatialPointsDataFramegeodata对象的函数

geor_variogram <- variog(as.geodata(point_data))
Run Code Online (Sandbox Code Playgroud)