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

时间:2012-05-24 10:53:57

标签: r statistics spatial geor

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

我有一个图像,我使用readGDAL函数加载到R中,存储为im。为了使其可重现,https://gist.github.com/2780792上可以获得图像dput的结果。我试图显示这些数据的变异图并且正在努力。我将介绍到目前为止我尝试过的内容:

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

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

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

我在这里做错了什么?

由于这似乎不起作用,我尝试了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)

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

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

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

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

library(gstat)
point_data <- as(im, 'SpatialPointsDataFrame')
gstat_variogram <- variogram(band1 ~ 1, data = point_data)

使用geoR

library(geoR)
geor_variogram <- variog(coords = coordinates(point_data), 
                          data = point_data@data$band1)

或更简单(因为geoR适用于类geodata的对象,并包含要从as.geodata转换为SpatialPointsDataFrame对象的函数geodata / p>

geor_variogram <- variog(as.geodata(point_data))