如何用spgwr包将GWR模型参数应用于精细空间尺度及报错解决
解决spgwr包GWR应用到精细尺度的错误问题
错误原因解析
1. SpatialPointsDataFrame行不匹配错误
这个错误是因为创建SpatialPointsDataFrame时,空间点的数量和绑定的属性数据表行数不一致。比如调用SpatialPointsDataFrame(coords = pts, data = df)时,nrow(pts)和nrow(df)必须完全相等。
2. fit.points无数据槽错误
spgwr的gwr()函数要求fit.points必须是带有data槽的空间对象(比如SpatialPointsDataFrame),如果你的regpoints只是纯空间点(SpatialPoints类型,无属性数据),就会触发该报错。
修正步骤与代码示例
步骤1:正确创建精细尺度的SpatialPointsDataFrame
假设精细尺度坐标存储在fine_coords(两列:x,y),先为其绑定一个占位数据框,确保数据槽存在:
# 加载依赖包 library(spgwr) library(sp) # 读取精细尺度坐标数据 fine_data <- read.csv("fine_resolution_points.csv") fine_coords <- fine_data[, c("x", "y")] # 创建带数据槽的SpatialPointsDataFrame regpoints <- SpatialPointsDataFrame( coords = fine_coords, data = data.frame(id = 1:nrow(fine_coords)) # 绑定id列作为占位数据 )
步骤2:重新运行GWR模型
确保block.data是合法的SpatialPointsDataFrame,再调用gwr():
# 定义GWR公式 eq1 <- y ~ x1 + x2 + x3 # 计算自适应带宽(基于原始数据) abw <- gwr.sel(eq1, data = block.data, gweight = gwr.Gauss) # 运行GWR并应用到精细尺度点 gwr_fit <- gwr( eq1, data = block.data, adapt = abw, gweight = gwr.Gauss, fit.points = regpoints, # 使用带数据槽的SpatialPointsDataFrame se.fit = TRUE # 可选:计算拟合值标准误 ) # 提取精细尺度拟合结果 fine_results <- as.data.frame(gwr_fit$SDF)
关键注意事项
- 验证
SpatialPointsDataFrame的一致性:通过nrow(regpoints)和nrow(regpoints@data)检查点数量与数据行数是否匹配。 - spgwr不接受纯
SpatialPoints作为fit.points,必须保证对象带有data槽,哪怕只是占位空列。 - 若精细尺度数据为栅格,需先将栅格中心转换为空间点,再创建
SpatialPointsDataFrame。
内容的提问来源于stack exchange,提问作者Nikos
相关产品推荐
相关产品推荐

