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

GWmodel包GWR模型交叉验证中dMat参数设置咨询

解决GWmodel中gwr.cv.contrib的dMat参数设置问题

核心问题修正

你当前代码里gw.dist(dp.locat=coordinates(coord))的用法有误——coord已经是经纬度构成的数值矩阵,不需要再用coordinates()转换,直接传入即可。

gw.dist的正确用法

gw.dist用于计算空间点对之间的距离矩阵,针对你的PM2.5地理数据场景,正确调用方式如下:

# 计算所有观测点之间的欧氏距离(适用于平面坐标)
DM <- gw.dist(dp.locat = coord)

# 如果是经纬度地理坐标,需添加longlat=TRUE计算球面距离
DM <- gw.dist(dp.locat = coord, longlat = TRUE)
  • dp.locat:直接传入数值型经纬度矩阵(每行对应一个观测点的经度、纬度),无需转换为Spatial对象。
  • longlat:当数据是地理坐标系(经纬度)时必须设为TRUE,否则会用平面欧氏距离计算,结果会失真。

gwr.cv.contrib中dMat的正确设置

dMat参数直接传入上述gw.dist生成的距离矩阵即可,作用是避免函数内部重复计算距离,提升运行效率。修正后的完整代码如下:

X <- PM25[,c("x1","x2","x3","x4","x5")]
X <- cbind(FirstColumn = rep(1, nrow(X)), X)
coord <- as.matrix(PM25[, c('Longitude', 'Latitude')])
coord[, 'Longitude'] <- as.numeric(coord[, 'Longitude'])
coord[, 'Latitude'] <- as.numeric(coord[, 'Latitude'])

# 针对地理坐标计算球面距离矩阵
DM <- gw.dist(dp.locat = coord, longlat = TRUE)

# 调用gwr.cv.contrib,传入预计算的距离矩阵
cv_results <- gwr.cv.contrib(
  bw = as.numeric(bw_cv$gaussian$CV),
  X = X,
  y = y_PM25,
  kernel = "gaussian",  # 与之前GWR模型的kernel参数保持小写一致
  dp.locat = coord,
  adaptive = TRUE,
  dMat = DM
)

注意:kernel参数要和你之前bw.gwr、gwr.basic中的设置统一为小写"gaussian",避免参数不匹配导致错误。

额外说明

  • 如果不指定dMat,gwr.cv.contrib会自动计算距离矩阵,但预计算DM可以在多次调用函数时重复使用,大幅节省计算时间(尤其针对大样本数据)。
  • 对于自适应带宽(adaptive=TRUE),距离矩阵用于确定每个观测点的邻近样本数量,确保交叉验证过程中带宽逻辑与原GWR模型一致。

内容的提问来源于stack exchange,提问作者Kevser Cifci

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:12:55