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),]
我正在尝试使用跨管理区域的生物量数据的 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),]