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

使用R语言GWmodel包运行MGWR时遇类型不兼容错误求助

解决GWmodel包gwr.multiscale函数的类型不兼容错误

错误原因分析

你遇到的Not compatible with requested type: [type=NULL; target=double]错误,核心问题是参数var.dMat.indx和dMats的匹配关系设置错误:

  • 根据GWmodel官方文档,var.dMat.indx用于指定哪些变量需要使用自定义距离矩阵,而dMats是对应这些变量的距离矩阵列表,两者长度必须严格一致。
  • 你的代码中设置var.dMat.indx = 2(仅指定第2个变量用自定义矩阵),但dMats传入了3个距离矩阵,参数不匹配导致内部函数接收到NULL类型的无效值。

另外,并行参数parallel.method = "omp"可能因系统环境不支持引发额外问题,建议先以串行模式调试。

修正方案

方案1:移除自定义距离矩阵参数(推荐)

如果不需要为特定变量指定专属距离矩阵,直接删除var.dMat.indx和dMats,让函数自动计算距离矩阵:

library(GWmodel)
data(LondonHP)

ab_gwr <- gwr.multiscale(PURCHASE ~ FLOORSZ + PROF, 
                         data = londonhp, 
                         criterion = "dCVR", 
                         kernel = "gaussian", 
                         adaptive = FALSE,
                         bws0 = c(100, 100, 100), 
                         bw.seled = rep(TRUE, 3))

方案2:正确匹配自定义距离矩阵参数

如果确实需要为第2个变量(FLOORSZ)指定自定义距离矩阵,需保证dMats的长度与var.dMat.indx一致:

library(GWmodel)
data(LondonHP)

# 仅为第2个变量生成自定义距离矩阵
dist_custom <- gw.dist(coordinates(londonhp))

ab_gwr <- gwr.multiscale(PURCHASE ~ FLOORSZ + PROF, 
                         data = londonhp, 
                         criterion = "dCVR", 
                         kernel = "gaussian", 
                         adaptive = FALSE,
                         var.dMat.indx = 2,  # 指定第2个变量用自定义矩阵
                         bws0 = c(100, 100, 100), 
                         bw.seled = rep(TRUE, 3), 
                         dMats = list(dist_custom))  # 仅传入对应变量的距离矩阵

额外调试建议

  • 确认londonhp数据结构:运行class(londonhp)应返回SpatialPointsDataFrame,若不是,需先转换为空间对象。
  • 调整带宽参数时,确保bws0的长度等于模型变量数(包括截距项,你的模型共3个变量:截距、FLOORSZ、PROF)。
  • 若仍有错误,尝试先运行最简单的MGWR模型(仅保留核心参数),逐步添加参数排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:01:43