R 中的 gstat - 变差函数截止距离不适用于大型网格数据集的较大指定距离

gstat in R - Variogram cutoff distance is not working at larger specified distances with large gridded datasets

我正在尝试使用跨管理区域的生物量数据的 gstat 包计算 R 中的变异函数。生物量数据是分辨率为 3.5 英尺或 1.0668 米的栅格数据集。我传递给变差函数的 spatialpointsDataFrame 的大小是 18.6 Mb(814223 个元素)。 (我也尝试过 spatialpixelsDataFrame,但它不喜欢 1.0668m 像素大小)。当我 运行 代码时:

v = variogram(ras.grid1@data[[1]]~1, data = ras.grid1)

并查看输出 "v",我得到的距离值比管理区域大得多(并且比对角线长度的 1/3 大得多)。

当我 运行 在较小的管理单元(40 公顷)上使用变差函数时,它给出了我期望的结果(这是使用大小为 7.9 Mb 和 344259 个元素的 SpatialPointsDataFrame)。

如果我将截止值硬编码为更小,初始较大的栅格数据集为 200m,它再次提供我期望的距离值。如果我尝试增加距离,让我们再次说 600m,它提供的距离值比指定的 600m 截止值大得多。 300m 也提供了意想不到的结果。例如:

    ####variogram computation with 200m cutoff....It works
    v = variogram(ras.grid1@data[[1]]~1, data = ras.grid1, cutoff=200)
    v
              np       dist    gamma dir.hor dir.ver   id
    1   195954282   8.874169 4990.504       0       0 var1
    2   572500880  20.621626 5627.534       0       0 var1
    3   958185761  33.701344 5996.423       0       0 var1
    4  1288501796  46.920392 6264.396       0       0 var1
    5  1652274803  60.198360 6472.187       0       0 var1
    6  1947750363  73.502011 6642.960       0       0 var1
    7  2282469596  86.807781 6802.124       0       0 var1
    8  2551355646 100.131946 6942.277       0       0 var1
    9  2849678492 113.441335 7049.838       0       0 var1
    10 3093057361 126.751400 7149.102       0       0 var1
    11 3375989515 140.081110 7240.848       0       0 var1
    12 3585116223 153.418095 7322.990       0       0 var1
    13 3821495516 166.721460 7394.616       0       0 var1
    14 4036375072 180.053643 7443.040       0       0 var1
    15 4235205167 193.389119 7476.061       0       0 var1

    ####variogram computation with 600m cutoff....It returns unexpected 
    ####distance values
    v2 = variogram(ras.grid1@data[[1]]~1, data = ras.grid1, cutoff=600) 
    v2
       np        dist      gamma dir.hor dir.ver   id
    1  1726640923    26.54691   5759.951       0       0 var1
    2   593559666   510.62232  53413.914       0       0 var1
    3  3388536438   229.26702  15737.659       0       0 var1
    4  1464228507   966.36789  49726.788       0       0 var1
    5  3503141163   623.13559  25680.965       0       0 var1
    6   878031648  3454.21122 117680.266       0       0 var1
    7  2233138601  1761.91799  50996.719       0       0 var1
    8  3266098834  1484.40162  37369.451       0       0 var1
    9  4056578316  1420.49358  31556.527       0       0 var1
    10  254561085 26030.66780 517601.669       0       0 var1
    11  562144107 13256.59985 239163.649       0       0 var1
    12  557621435 14631.84504 243476.857       0       0 var1
    13  385648032 22771.12890 352898.971       0       0 var1
    14 4285655256  2163.11091  31213.201       0       0 var1
    15 3744542323  2575.19496  34709.529       0       0 var1

此外,如果我将数据缩放到 3m,我将再次获得预期的距离值。

我不确定是不是大型栅格数据集导致了这个问题,我试图做的事情是不可能的,或者我做错了什么或者是否有其他方法?

感谢您的帮助和关注。

在更详细地探讨这个问题之后,似乎确实是 SpatialPointsDataFrame 的大小导致了这个问题。在我的机器上,将大小保持在 10 Mb 以下似乎可以解决问题。为了减小 SpatialPointsDataFrame 的大小,我使用以下方法对原始栅格进行了采样:

  ras.grid<-ras.grid[sample(1:length(ras.grid), 350000),]