【问题标题】:Calculate variogram of raster data with NAs in R用R中的NA计算栅格数据的变异函数
【发布时间】:2012-05-24 10:53:57
【问题描述】:

总结:我有一个包含 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

> 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 留在其中。这有点道理,因为光栅文件必须在每个网格方块中都有一些东西。有没有办法以某种方式删除 NA,或者至少让 variog 命令忽略它们?

任何帮助将不胜感激。

【问题讨论】:

    标签: r statistics spatial geor


    【解决方案1】:

    如果传递给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)
    

    或者更简单(因为geoRgeodata 类的对象一起使用,并包含函数as.geodataSpatialPointsDataFrame 转换为geodata 对象

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多