You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 14:40:00