尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Python 空间统计分析实战:3种方法实现地理加权回归(GWR)与OLS结果对比
Python 空间统计分析实战3种方法实现地理加权回归(GWR)与OLS结果对比地理加权回归Geographically Weighted Regression, GWR作为空间统计分析的重要工具近年来在计量地理学、城市规划、环境科学等领域获得广泛应用。与传统的普通最小二乘回归OLS相比GWR能够捕捉空间异质性为局部关系建模提供更精细的视角。本文将深入探讨三种Python实现GWR的方法并与OLS进行系统对比帮助研究人员选择适合的分析工具。1. 空间统计分析基础与环境准备空间统计分析的核心在于考虑地理要素的空间依赖性和异质性。地理学第一定律指出任何事物都与其他事物相关但邻近的事物比遥远的事物更相关。这为空间统计分析提供了理论基础。1.1 必要库安装与数据准备首先确保安装以下Python库pip install geopandas pysal mgwr statsmodels matplotlib我们使用波士顿房价数据集作为示例数据该数据集包含506个社区的各项特征import geopandas as gpd from libpysal.examples import load_example from mgwr.sel_bw import Sel_BW from mgwr.gwr import GWR import numpy as np import statsmodels.api as sm # 加载数据 boston load_example(Boston) gdf gpd.read_file(boston.get_path(boston.shp)) y gdf[MEDV].values.reshape((-1,1)) X gdf[[CRIM, RM, LSTAT]].values coords list(zip(gdf[X], gdf[Y]))1.2 空间权重矩阵构建空间权重矩阵是GWR分析的关键常用的构建方法包括K最近邻法每个点选择固定数量的邻近点距离阈值法设定距离阈值范围内的点为邻居反距离法权重随距离增加而衰减from libpysal.weights import KNN, DistanceBand # K最近邻法 knn KNN.from_array(coords, k10) # 距离阈值法 dist_band DistanceBand.from_array(coords, threshold1000)2. 三种GWR实现方法对比2.1 MGWR库实现MGWR是专门为地理加权回归设计的Python库提供了完整的GWR分析流程# 选择最优带宽 sel_bw Sel_BW(coords, y, X).search() print(f最优带宽{sel_bw}) # 构建GWR模型 gwr_model GWR(coords, y, X, sel_bw) results gwr_model.fit() # 结果分析 print(results.summary()) print(f调整R²{results.adj_rsq}) print(fAICc{results.aicc})MGWR库的优势在于自动带宽选择完整的结果输出支持多尺度GWR2.2 PySAL实现PySAL是空间分析的标准库也提供了GWR实现from spreg import GWR # 转换为PySAL格式 X sm.add_constant(X) gwr_pysal GWR(coords, y, X, bwsel_bw) results_pysal gwr_pysal.fit() # 获取局部参数估计 params results_pysal.betasPySAL版本更适合与其他空间分析工具链集成。2.3 手动实现核心算法理解GWR核心算法有助于深入掌握其原理def gwr_manual(y, X, coords, bw): n len(y) params np.zeros((n, X.shape[1])) for i in range(n): # 计算高斯权重 dists np.array([np.sqrt((coords[i][0]-c[0])**2 (coords[i][1]-c[1])**2) for c in coords]) weights np.exp(-0.5*(dists/bw)**2) # 加权最小二乘 W np.diag(weights) XtWX X.T W X XtWy X.T W y params[i] np.linalg.inv(XtWX) XtWy return params # 使用示例 manual_params gwr_manual(y, X, coords, sel_bw)3. OLS与GWR模型对比3.1 全局OLS模型实现# 全局OLS回归 ols_model sm.OLS(y, X).fit() print(ols_model.summary())3.2 模型性能对比指标我们使用以下指标对比模型性能指标说明计算公式R²模型解释方差比例1 - RSS/TSS调整R²考虑变量数的R²调整1 - (1-R²)(n-1)/(n-p-1)AICc修正的Akaike信息准则AIC 2k(k1)/(n-k-1)残差空间自相关残差的Morans I指数衡量残差的空间聚集程度3.3 实际对比结果下表展示了一个典型的对比结果模型R²调整R²AICc残差Morans I计算时间(s)OLS0.6730.6713024.50.32**0.02GWR0.8210.8152897.30.084.56注意**表示p0.01Morans I检验显著4. 空间异质性分析与可视化4.1 参数空间分布import matplotlib.pyplot as plt # 绘制RM变量的GWR系数空间分布 fig, ax plt.subplots(figsize(10,8)) gdf[gwr_rm] results.params[:,2] gdf.plot(columngwr_rm, legendTrue, schemequantiles, k5, cmapcoolwarm, axax) plt.title(RM变量的GWR系数空间分布) plt.show()4.2 带宽选择影响带宽是GWR的关键参数影响模型的空间尺度bws np.linspace(500, 5000, 10) aics [] for bw in bws: model GWR(coords, y, X, bw).fit() aics.append(model.aicc) plt.plot(bws, aics) plt.xlabel(带宽) plt.ylabel(AICc) plt.title(带宽选择与模型拟合)4.3 局部R²分析gdf[local_r2] results.localR2 fig, ax plt.subplots(figsize(10,8)) gdf.plot(columnlocal_r2, legendTrue, schemequantiles, k5, cmapviridis, axax) plt.title(局部R²空间分布) plt.show()5. 实际应用建议与注意事项5.1 方法选择指南OLS适用场景空间异质性不显著样本量较小(100)需要快速初步分析GWR适用场景明显的空间异质性样本量较大(100)需要探究局部关系5.2 常见问题解决方案带宽选择不稳定尝试多种选择方法(CV、AICc)考虑使用自适应带宽多重共线性问题计算局部VIF指标移除高度相关变量计算效率优化使用并行计算考虑空间子集分析5.3 高级技巧半参数GWR结合参数和非参数部分时空GWR加入时间维度多尺度GWR(MGWR)不同变量使用不同带宽from mgwr.sel_bw import Sel_BW from mgwr.gwr import GWR # 多尺度GWR sel_bw Sel_BW(coords, y, X, multiTrue).search() mgwr_model GWR(coords, y, X, sel_bw, multiTrue) results mgwr_model.fit()在实际项目中我发现GWR对空间权重矩阵的选择非常敏感。一次分析中使用KNN权重和距离阈值权重得到了截然不同的结果这提示我们需要通过敏感性分析来验证结论的稳健性。同时当处理大规模数据时MGWR库的内存优化版本或分布式计算框架可能更为适合。
RELATED

相关推荐

ClaudeCode Desktop:原生桌面级AI编程协作者深度解析

ClaudeCode Desktop:原生桌面级AI编程协作者深度解析

1. 这不是另一个“AI写代码”玩具,而是一套真正能嵌入你日常开发流的桌面级编程协作者ClaudeCode Desktop——这个名字刚出现时,我第一反应是:又一个把网页版API套个Electron壳的“伪桌面应用”。直到我把它装进自己每天用的主力开发机&#…

📅 2026/10/12 22:25:45
上线 HR 系统效果不及预期?41% 企业踩中 AI 外挂、数据孤岛等选型陷阱

上线 HR 系统效果不及预期?41% 企业踩中 AI 外挂、数据孤岛等选型陷阱

根据2026年HR科技行业调研,中国500人以上规模企业中,已有超过68%部署了某种形式的人力资源管理系统,但其中真正实现AI深度应用的比例不足22%。换句话说,多数企业买的是软件,跑的还是人工。人力资源AI管理系统的核心价值…

📅 2026/9/20 2:41:32
Excel隐藏行排查指南:过滤、零高度、分组折叠全解析

Excel隐藏行排查指南:过滤、零高度、分组折叠全解析

1. 为什么“消失”的行最让人抓狂——从一次真实的数据事故说起 你有没有过这种经历:周五下午三点,老板催着要一份销售汇总表,你核对了三遍总和,数字就是对不上。公式检查过了,数据源确认过了,连小数点位数…

📅 2026/10/1 13:54:06
MORE NEWS

更多资讯

📰

EasyU优启通PE维护盘实战指南:制作、启动与核心操作全解析

1. 为什么一个PE维护盘值得单独拿出来聊装系统、修引导、救数据、清病毒,这些活儿但凡干过几次的人都知道,真正决定效率的往往不是你手速多快,而是手边那套PE环境靠不靠谱。EasyU(圈内习惯叫优启通)就是在这个场景下被…

📰

Rust原来很简单二:所有权系统

Part 2 核心篇 —— 所有权系统 本篇覆盖 第 6 ~ 10 章:所有权、借用与引用、生命周期、字符串与切片、内存模型。 ⚠️ 这是全书最重要的一篇。 把它吃透,Rust 从此“很简单”;跳过它,你会处处碰壁。请慢下来,动手敲每一段代码。 第 6 章 所有权:Rust 的第一性原理 6…

📰

基于Hadoop+Spark的民宿智能推荐系统设计与实现

1. 项目概述:大数据时代的民宿智能推荐这个毕业设计项目融合了当前大数据领域最主流的技术栈,构建了一个完整的民宿推荐系统解决方案。作为一名长期从事大数据系统开发的工程师,我认为这个选题非常贴合实际应用场景——随着旅游业的复苏和共享…

📰

ADS122U04IPWR+STM32F427ZI工业级温度测量信号链设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

UART接口24位ADC搭配RS485,解决远距离温度监控难题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

UART接口24位ADC搭配PIC18F46K22的RTD与热电偶测温实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬