R语言gstat包variogram函数点对计算规则咨询
gstat包variogram函数的点对计算规则
核心原因:默认距离截断限制
你遇到的点对总数不等于n*(n-1)/2,核心原因是variogram()函数默认只计算距离不超过数据空间最大距离一半的点对,这个限制由maxdist参数控制,默认值为数据中两点间最大距离的1/2。
详细计算规则
- 距离截断(maxdist):
只有两点间距离 ≤maxdist的点对才会被纳入计算。默认maxdist = 0.5 * max(dist(coordinates(data))),可以通过显式设置maxdist = Inf来强制计算所有可能的点对。 - 分箱分组:
符合距离要求的点对会被按距离区间(bin)分组,每个bin对应的np值是该区间内的点对数量,所有np的总和就是参与计算的点对总数。 - 方向过滤(alpha):
如果设置了alpha参数(指定方向角度范围),只会计算落在该方向范围内的点对,进一步减少总数量。 - 重合点处理:
若存在坐标完全重合的点,默认会被排除(距离为0的点对不参与常规变异函数计算),可通过zero.dist参数调整这一行为。
验证与解决方法
以你的代码为例,只需添加maxdist = Inf参数,即可得到所有40个点的全部点对(780个):
library(gstat) n <- 40 X <- runif(n, 0, 100) Y <- runif(n, 0, 100) ref_exponential <- exp(runif(n, 0, 1)) data_exponential <- data.frame(X, Y, ref = ref_exponential) coordinates(data_exponential) <- ~X + Y # 强制计算所有点对 variogram_model_exponential <- variogram(ref ~ 1, data_exponential, maxdist = Inf) print(sum(variogram_model_exponential$np)) # 输出780,符合40*39/2的结果
你提到30个点时得到全部435个点对,是因为这批随机点的分布相对集中,所有点对的距离都未超过默认的maxdist阈值,因此全部被纳入计算。
内容的提问来源于stack exchange,提问作者Cassieleee
相关产品推荐
相关产品推荐

