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

使用ClustGeo做空间约束层次聚类时如何计算地理距离矩阵

ClustGeo空间约束聚类所需地理距离矩阵解决方案

你当前运行代码报错的核心原因是pollution数据集内没有预计算好的D.geo地理距离矩阵对象,和代码语法无关。要完成带空间约束的聚类,你需要先补充对应乡镇的地理空间相关数据,可选解决方案如下:

方案1:补充坐标后计算地理距离(最常用,符合官方逻辑)

  • 给当前属性表新增2列空间数据,可二选一:
    • 平面投影坐标系下的乡镇中心点X/Y坐标(优先选择,计算出的欧氏距离误差更小)
    • WGS84/GCJ02等坐标系下的经纬度坐标
  • 提取和属性数据排序完全一致的坐标列,计算距离矩阵,代码示例:
# 示例1:已新增平面坐标列x、y,顺序与污染物属性数据的乡镇顺序完全匹配
coords <- pollution[, c("x", "y")]
# 计算地理距离并转为dist格式,对应你原来的D1变量
D1 <- dist(coords)

# 示例2:用经纬度计算大地距离,需调用geosphere包
library(geosphere)
D.geo_matrix <- distm(pollution[, c("lon", "lat")], fun = distHaversine)
D1 <- as.dist(D.geo_matrix)

方案2:基于邻接关系生成约束距离(无坐标时可选)

如果你暂时无法获取乡镇坐标,仅需要聚类结果满足同类别乡镇空间接壤的约束,可以先生成乡镇的邻接矩阵(相邻赋值为1,不相邻赋值为大于1的自定义值),再转为dist格式作为D1输入即可。

关键注意事项

  • 地理距离矩阵的乡镇排序必须和你之前做无约束Ward聚类时用的属性距离矩阵的乡镇排序完全一致,否则空间约束会匹配错误。
  • 后续调用hclustgeo函数时,传入的属性距离矩阵D0、地理距离矩阵D1的样本量、样本顺序必须完全对应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:06:04