使用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
相关产品推荐
相关产品推荐

