Python空间回归实战:用pysal分析美国大选数据(附完整代码)

Applied Spatial Statistics(八):Python 空间回归实战——从 Moran‘s I 到空间滞后效应分解 本文详细介绍了如何使用Python进行空间回归分析,从Moran's I检验到空间滞后效应分解的全流程实战。通过pysal和spreg库,结合美国大选数据,演示了空间误差模型(SEM)和空间滞后模型(SLM)的应用与选择标准,并深入解析了空间溢出效应的量化方法。 阅读详情

Python空间回归实战:用pysal分析美国大选数据(附完整代码)

空间数据分析正在成为社会科学研究的重要工具,特别是在选举预测、房价分析和公共卫生等领域。本文将带你用Python的pysal库,通过2020年美国大选数据,实战演练空间回归分析的全流程。不同于传统回归分析,空间回归考虑了地理单元之间的相互影响,能更准确地捕捉现实世界中的空间依赖现象。

1. 环境准备与数据加载

在开始分析前,我们需要准备Python环境和相关库。推荐使用Anaconda创建独立环境:

conda create -n spatial python=3.8
conda activate spatial
pip install pysal geopandas matplotlib seaborn numpy pandas

数据集包含两个关键部分:县级选举数据(CSV格式)和地理边界数据(GeoJSON格式)。让我们先加载并探索数据:

import pandas as pd
import geopandas as gpd

# 加载选举数据
voting = pd.read_csv('https://raw.github.com/Ziqi-Li/gis5122/master/data/voting_2020.csv')
voting['median_income'] = voting['median_income']/10000  # 收入单位转换为万美元

# 加载地理边界数据
shp = gpd.read_file("https://raw.github.com/Ziqi-Li/gis5122/master/data/us_counties.geojson")
shp_voting = shp.merge(voting, on="county_id")

# 选择分析变量
variable_names = ['sex_ratio', 'pct_black', 'pct_hisp', 'pct_bach', 'median_income','ln_pop_den']
y = shp_voting[['new_pct_dem']].values  # 因变量:民主党得票率
X = shp_voting[variable_names].values   # 自变量矩阵

数据预处理时需要注意:

  • 检查缺失值:shp_voting.isnull().sum()
  • 变量标准化:对连续变量考虑Z-score标准化
  • 空间权重矩阵的构建方式会影响最终结果

2. 构建空间权重矩阵

空间权重矩阵是空间分析的核心,它定义了地理单元之间的"邻居"关系。pysal提供多种构建方式:

from libpysal.weights import Queen, Rook, KNN

# Queen邻接(共享顶点或边即视为邻居)
w_queen = Queen.from_dataframe(shp_voting)
w_queen.transform = 'R'  # 行标准化

# 可视化连接关系
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(12,8))
shp_voting.plot(ax=ax, color='white', edgecolor='black')
w_queen.plot(shp_voting, ax=ax, edge_kws=dict(linewidth=0.5, color='red'))
plt.title("Queen Contiguity Spatial Weights")

权重矩阵类型对比:

类型定义适用场景优缺点
Queen共享边界或顶点均匀分布区域更密集连接
Rook仅共享边界规则网格数据连接较少
KNN最近的k个邻居不规则分布点确保每个单元有相同数量邻居
距离阈值指定距离内为邻居点数据连接数不均

提示:实际分析中建议尝试不同权重矩阵,通过Moran's I检验选择最优方案。

3. 基础OLS回归与空间自相关检验

我们先建立普通最小二乘(OLS)模型作为基准:

import spreg
ols = spreg.OLS(y, X, name_y='new_pct_dem', name_x=variable_names)
print(ols.summary)

关键指标解读:

  • R-squared: 0.609 - 模型解释约60.9%的方差
  • pct_black系数0.483 - 黑人比例每增加1%,民主党得票率增加0.48%
  • median_income系数-1.66 - 收入每增加1万美元,得票率下降1.66%

接下来检验残差的空间自相关:

from esda.moran import Moran
from splot.esda import plot_moran

ols_moran = Moran(ols.u, w_queen, permutations=999)
plot_moran(ols_moran, zstandard=True, figsize=(10,4))
print(f"Moran's I: {ols_moran.I:.3f}, p-value: {ols_moran.p_norm:.5f}")

结果显示出强烈的空间自相关(Moran's I=0.6, p<0.001),表明OLS假设被违反,需要考虑空间模型。

4. 空间回归模型实战

4.1 空间误差模型(SEM)

当误差项存在空间依赖时,SEM是合适选择:

sem = spreg.ML_Error(y, X, w=w_queen, name_x=variable_names, name_y='new_pct_dem')
print(sem.summary)

关键发现:

  • lambda系数0.87(p<0.001) - 强烈空间误差依赖
  • pct_black影响增强到0.75 - 考虑空间因素后效应更大
  • AIC=20355 - 优于OLS的23198

验证残差空间自相关:

sem_moran = Moran(sem.e_filtered, w_queen, permutations=999)
print(f"SEM Moran's I: {sem_moran.I:.3f}")  # 接近0,空间依赖已消除

4.2 空间滞后模型(SLM)

当因变量存在空间溢出效应时,SLM更合适:

slm = spreg.ML_Lag(y, X, w=w_queen, name_y='new_pct_dem', name_x=variable_names)
print(slm.summary)

模型特点:

  • rho系数0.58(p<0.001) - 强烈空间滞后效应
  • 教育水平(pct_bach)直接影响0.83
  • AIC=21723 - 优于OLS但不及SEM

4.3 模型比较与选择

三种模型关键指标对比:

指标OLSSEMSLM
AIC231982035521723
Moran's I(残差)0.60-0.080.15
pct_black系数0.480.750.28
空间参数-lambda=0.87rho=0.58

根据AIC和残差空间自相关,SEM是最佳选择。但SLM能分析空间溢出效应,适合不同研究目的。

5. 空间溢出效应分析

SLM的一个独特优势是可以量化空间溢出效应。我们以教育水平(pct_bach)为例:

import numpy as np

# 计算总效应矩阵
rho = slm.rho[0][0]
beta_bach = slm.betas[6][0]  # pct_bach系数
I = np.identity(w_queen.n)
W = w_queen.full()[0]
total_effects = np.linalg.inv(I - rho * W) * beta_bach

# 分析特定县的影响
leon_idx = shp_voting[shp_voting['NAME_x']=="Leon"].index[0]
shp_voting['leon_effect'] = total_effects[:, leon_idx]

# 可视化佛罗里达州内影响
florida = shp_voting[shp_voting['state']==12]
ax = florida.plot(column='leon_effect', legend=True, figsize=(12,8),
                 scheme='quantiles', cmap='Reds')
plt.title("Leon县教育水平提升1%对周边县民主党得票率的影响")

分析发现:

  • 直接影响:Leon县教育水平提升1%,本地民主党得票率增加0.83%
  • 总影响:0.90%(直接+间接)
  • 邻近县如Jefferson受影响约0.12%
  • 远距离县如Miami-Dade几乎无影响

6. 结果可视化技巧

有效可视化能增强分析说服力。以下是几种专业呈现方式:

空间回归系数图:

# 准备系数数据
models = ['OLS', 'SEM', 'SLM']
coefs = {
    'pct_black': [0.483, 0.749, 0.278],
    'pct_bach': [0.975, 0.729, 0.835],
    'median_income': [-1.660, -2.423, -2.991]
}

# 绘制系数比较
fig, axes = plt.subplots(1, 3, figsize=(18,5))
for ax, (var, vals) in zip(axes, coefs.items()):
    ax.bar(models, vals, color=['#4C72B0','#DD8452','#55A868'])
    ax.set_title(f'{var}系数比较')
    ax.axhline(0, color='black', linewidth=0.8)
plt.tight_layout()

残差空间分布图:

from mpl_toolkits.axes_grid1 import make_axes_locatable

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(20,8))

# OLS残差
divider = make_axes_locatable(ax1)
cax = divider.append_axes("right", size="5%", pad=0.1)
shp_voting.plot(column=ols.u.reshape(-1), ax=ax1, legend=True, cax=cax,
               scheme='quantiles', cmap='RdBu')
ax1.set_title("OLS残差空间分布", fontsize=14)

# SEM过滤残差
divider = make_axes_locatable(ax2)
cax = divider.append_axes("right", size="5%", pad=0.1)
shp_voting.plot(column=sem.e_filtered.reshape(-1), ax=ax2, legend=True, cax=cax,
               scheme='quantiles', cmap='RdBu')
ax2.set_title("SEM过滤残差空间分布", fontsize=14)

在实际项目中,空间回归往往需要多次迭代调试。一个常见问题是权重矩阵选择——我曾遇到使用Queen邻接导致模型不收敛的情况,改用KNN权重后解决。另一个经验是,当空间参数(rho/lambda)接近1时,可能需要检查是否存在空间单元定义错误。

空间数据分析入门避坑指南:手把手教你用GeoDa算莫兰指数,看懂p值z值不再懵 本文详细介绍了如何使用GeoDa进行空间数据分析,从软件安装到莫兰指数计算与解读的全流程。通过实战案例解析,帮助读者掌握专题图制作、权重矩阵构建等关键技能,并深入讲解莫兰指数的计算原理、结果解读及常见问题解决方案,是空间数据分析入门的实用指南。 阅读详情

相关推荐

【信息科学与工程学】【审计学】第一篇 招投标领域审计算法01

在每个关键流程节点(如文件上传、开标唱标、评标结束), 计算该环节所有电子文件的数字指纹(如SHA-256哈希值), 并将指纹和元数据(时间、操作人)上链存证。:从发票、合同中提取材料品名、规格、采购价、时间、地点。:对每个供应商, 提取其在历史投标中的行为序列特征, 如:中标率、与特定伙伴同时投标率、自身高报价次数、在伙伴中标项目中的“弃标”或“无效标”次数。:监控开标、评标现场音视频, 识别异常情绪(激烈争吵)、敏感关键词(“打点”、“关照”)、异常物品传递、私下交流等违规行为。

weixin_49199313的博客 817

Applied Spatial Statistics(七):Python 中的空间回归

本笔记本演示了如何使用 pysal 的spreg库拟合空间滞后模型和空间误差模型。

May the Force be with you 2557

VSCode + Clangd 配置避坑实录:从‘红波浪线’到完美代码提示的完整心路

本文详细记录了VSCode与Clangd配置过程中的常见问题及解决方案,从编译数据库生成到参数调优,帮助C++开发者快速解决代码提示失效、头文件找不到等问题,实现完美代码补全体验。重点介绍了Clangd与LLDB的集成配置及性能优化技巧,适用于Linux和跨平台开发环境。

weixin_28829479的博客 493

Applied Spatial Statistics(八):Python 空间回归实战与模型选择指南

本文详细介绍了Python在空间回归分析中的实战应用与模型选择方法,重点解析了空间滞后模型和空间误差模型的使用场景与实现技巧。通过pysal库的spreg模块,结合选举数据案例,展示了如何诊断空间自相关、比较模型效果以及量化空间溢出效应,为地理数据分析提供实用指南。

convnet3designer的博客 442

扫地机的CPU只要二十多块?2024第二拆来了

昨天还说到这个机器人的故障,经小鱼拆机后测试和后台网友留言确认,不是防跌落问题,是轮子故障,这个轮子不会动,轮子上有一个限位开关检测机器人是否离开地面的,测试的时候也没有误触发,所以电机存在故障,后面拆电机的时候再检查。最后再留下一个疑问,这个机器人的回充没有用红外管,机器人是如何识别基站进行返回充电的(因为只买了本体,没买充电桩,不确定充电桩的形状,是不是利用点云识别不确定)懂的请留言。全志的R16,封装是 BGA282,那这个板子至少是4层板,小鱼盲猜 6 层板,知道的小伙伴欢迎留言。

生活不止眼前的苟且 1981

手把手调试AD9653的LVDS数据采集:从VIO抓波形到用F0/F8帧对齐的实战心得

本文详细介绍了AD9653高速ADC与Xilinx 7系列FPGA(如7z035)的LVDS数据采集调试实战经验。从硬件环境搭建、Vivado工具链配置到LVDS数据对齐技巧,重点分享了利用VIO抓取波形和使用F0/F8帧对齐的实用方法,帮助工程师快速解决高速数据采集系统中的信号完整性问题。

weixin_29169899的博客 705

Xiaomi Home Integration 十分钟指南:米家接入 Home Assistant 并跑通下班回家自动化

用 Xiaomi Home Integration 把米家设备接入 Home Assistant,只需要十分钟。这篇文章写给已经装好 HA、手头有米家设备的你:先过一遍安装与自检清单,再挑定云端或本地控制通道,最后拿到一份直接能跑的回家自动化 YAML。读完并完成操作,你的米家设备就都能在 HA 里被自动化调度了。 ## 动手前先确认什么? 四件事,缺一样都建议先补上再往下走: - **版本

gitblog_00100的博客 288

【OpenCV-Python】——图像处理基础&读写及显示图像&读写及播放视频&灰度图/彩色图/图像通道操作、运算

在Python中,OpenCV使用NumPy数组存储图像,Numpy是使用Python进行数组计算的软件包,提供强大的N维数组对象,支持复杂的广播功能(数组运算),集成了C/C++和Fortran代码工具,支持线性代数、傅里叶变换和随机数等特性,还可作为通用数据的高效多维容器,如在OpenCV中显示图像。Numpy的知识点见数据处理专栏,主要包括数据类型、创建数组、数组形状、索引切片和迭代、数组运算等。作为初学者,里面可能有总结不全,后续深入学习后会改善文章!下次学习图形用户界面!

weixin_51658186的博客 2084

GIS与交通融合实战:从空间数据到智能决策的完整项目指南

地理信息系统(GIS)的核心在于对空间数据进行采集、管理与分析,其原理是通过对点、线、面等地理对象的几何与拓扑关系建模,实现对现实世界的数字化映射。这一技术价值在于将静态的空间信息转化为可计算、可分析的结构化知识,从而支撑科学的决策。在工程实践中,GIS与交通工程的交叉融合,催生了网络分析、时空数据挖掘等关键技术,广泛应用于智慧城市、物流优化与自动驾驶等场景。本文聚焦于GIS开发与交通数据分析,通过一个完整的“交通事故热点分析”实战项目,系统演示了如何利用Geopandas、OSMnx等工具链,将空间统计理

weixin_30267785的博客 356

注意力机制篇 | YOLOv8改进之在C2f模块添加EMA注意力机制(附2种改进方法)

EMA(Exponential Moving Average)注意力机制是一种用于增强模型性能的注意力机制,它通过对模型的特征图进行加权平均来提取更有用的特征信息。具体来说,EMA注意力机制通过引入一个权重因子来调整特征图中每个位置的重要性,从而使模型能够更好地关注重要的特征。🌈

小哥谈 4180

SAP-PLM传输MBOM传输至SAP

BOM 项目文本 (行 2)PLM创建及修改BOM接口。PLM 创建BOM接口抬头。BOM 项目文本(行1)PLM 创建BOM接口抬头。PLM BOM 错误消息。PLM BOM接口组件。组件数量 (BTCI)

qq_32198063的博客 432

适合做数据分析的 AI 工具怎么选:五类任务对应五类工具

选数据分析 AI 工具这件事,答案取决于三个条件:你的任务类型、技术门槛,以及要不要做工程化交付。先把结论放在前面:临时看看数据,用聊天式对话分析;日常表格处理,用 Excel/WPS AI;团队看板和口径管理,用商业 BI 或开源 BI;写代码做专业分析,用 Python 生态加编码助手;如果是多文件工程、要跑通并验证、要留版本记录,就进入 AI 原生 IDE 的领地。把“工具哪个好”换成“我属于哪类任务”,选型就不再是排行榜问题,而是条件匹配问题。

2603_96806404的博客 224

跨平台C#上位机开发:.NET MAUI与工业物联网的融合实战

NET MAUI正在重塑工业上位机的开发模式——从“为单一设备定制”转向“全场景覆盖”。其价值不仅在于“代码复用”,更在于打通了工业物联网的“最后一公里”:让边缘设备、云平台、移动终端通过统一的数据模型协同工作。未来,随着.NET MAUI对WebAssembly的支持(计划在.NET 9实现),上位机甚至可直接运行在浏览器中,进一步降低部署门槛。对于工业开发者,掌握跨平台技术意味着能更快响应多样化的现场需求,从“Windows专家”升级为“全栈工业开发者”。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1092

智能数据分析平台深度评测:主流产品优劣势与适用场景解析

智能数据分析平台的选型,核心是判断企业当前处于哪个数据阶段、下一步要解决什么问题。四款平台各有明确的能力侧重:帆软 FineBI 强在报表与指标体系的标准化,观远数据强在行业场景与决策智能,火山引擎 DataWind 强在字节生态与对话式问数,ThinkingAI 的价值在于把"分析"推进到"行动",让数据闭环真正转起来。与其纠结哪家功能更多,不如先用一个真实业务问题做验证,最快能跑通闭环的那一个,往往就是当前阶段的最优解。

效率工作研究中心 87

03. 线性规划与混合整数规划 (LP/MIP)

本文介绍了OR-Tools中的线性规划(LP)和混合整数规划(MIP)求解器。主要内容包括:1) LP/MIP的基本概念和数学形式,对比了LP、MIP、ILP和BIP的区别;2) OR-Tools支持的求解器类型,如GLOP、SCIP等,以及它们各自的特点和适用场景;3) 详细展示了如何使用GLOP求解器进行线性规划求解,包括变量定义、约束添加和目标函数设置;4) 介绍了SCIP求解器的配置和使用方法;5) 讨论了变量类型、约束类型、多目标优化等进阶功能。文章通过Java代码示例演示了如何实现一个完整的优化

智慧是做事用的 158

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

企业做 AI 数据分析,该用通用办公 Agent 还是专业数据 Agent?

企业做 AI 数据分析,选型的核心判断标准是数据复杂度,而非单纯的产品偏好。当数据分析停留在单表、小数据量、口径模糊的浅层问答时,通用办公 Agent 已经足够;当数据涉及多表关联、大数据量、严格指标口径和权限治理时,通用 Agent 的生成 SQL 路线会在这四道门槛前暴露能力边界,专业数据 Agent 才是承接深度分析的可靠选择。两类 Agent 的定位决定了它们应当协同而非替代。

Leo的博客 116

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

适合做数据分析的AI工具怎么选:按任务类型拆解五类方案与选型维度

以 AI 原生开发环境这一形态为例,TRAE 保留编辑器、终端、调试、Git 等传统工作流,并内置可规划并执行任务的 AI 智能体,生成的代码可以直接在终端里运行,报错可以进调试器定位,每一次修改都有 Git 提交可回溯。做数据分析选 AI 工具时,最容易踩的坑不是工具太少,而是把不同物种的东西放在一起比:把能聊天的通用大模型当成 BI 用,把自动补全的编程助手当成分析师用,最后得出 AI 做不了数据分析的结论。最后一步建议:拿你手头真实的一个分析任务去试,看工具在报错之后的表现,比看任何评测都准。

2603_96881810的博客 215

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

适合做数据分析的 AI 工具怎么选:按任务类型与工程要求定位到具体方案

回到最初的问题:适合做数据分析的 AI 工具,答案不是一个名字,而是一张按你的任务条件展开的选型表。表格办公和零代码临时分析不需要引入 AI 工具,对话 AI 加电子表格就能解决;企业级看板交付在成熟 BI 产品里选;写代码的 analysts 和开发者在开源生态加编码助手这条线上效率最好;而当分析项目复杂到需要多文件工程、运行验证和可追溯交付时,TRAE 这类提供 Agent 窗口与 IDE 窗口双形态、保留完整编辑/终端/调试/Git 工作流的 AI 原生 IDE,是值得考察的一类新选项。

2608_96881912的博客 134

读数据分析思维通识课02从数据中快速发现规律(上)

读数据分析思维通识课02从数据中快速发现规律(上)

lyingSeven的博客 354

WorkBuddy 接入奥威BI:让企业级数据分析在对话里完成

业务人员不需要下载数据、不需要打开 BI 门户,只需在对话框里说出业务问题——比如“分析去年公司经营风险”——就能拿到一份口径统一、数据可溯源的图文分析报告。奥威BI 的价值恰恰在于承接这类存量系统——通过数据接口把金蝶云·星空、K/3 WISE 以及用友等 ERP 的数据统一接入并建模,之后 AI 通过 MCP 调用的就是已经治理好的数据。写好配置之后,需要在连接器管理页面右上角的自定义连接器入口里,对新服务点击“信任”,这一步做完,WorkBuddy 才真正具备调用奥威BI 的能力。

qq_43696218的博客 287

大专商务数据分析与应用考哪些证书难度相对低?

对大专商务数据分析与应用专业的学生来说,选证书不能只看“好不好考”,还要看考试内容能否转化为实习中的具体能力:能不能整理销售明细、核对经营数据、制作分析报表,以及解释业务变化的原因。结合专业课程和常见就业方向,可以重点考虑这四类证书。其中,办公软件类更适合作为入门选择;分析类更贴近专业发展;会计类适合准备进入财务、零售经营和电商结算相关岗位的学生。

2501_93367079的博客 251

云计算技术应用专业考证路线:从Linux、云平台到Kubernetes与数据分析

云计算技术应用专业选证书,首先要看就业方向:是做云平台运维、Linux系统管理,还是向容器平台、云架构与数据应用发展?岗位不同,值得投入的证书也不同。面向2027年的实习和求职规划,可以重点考虑六项证书:华为HCIA-Cloud Computing、阿里云ACA云计算助理工程师、RHCSA、CDA数据分析师、AWS解决方案架构师助理级认证和CKA。它们分别对应云平台基础、系统管理、数据分析、架构设计与容器运维等能力,不必全部报考。

gentleing的博客 98

基于springboot+vue+uniapp的羽毛球预约小程序(Websocket智能沟通、Echarts数据分析、会员闭环管理、灵活运营规则、全流程预约)

本系统基于B/S架构,采用前后端分离设计,集成微信小程序与管理后台,实现多角色权限管控。核心亮点包括:全流程可视化预约、灵活运营规则配置、会员闭环管理(含余额、充值、退款)、ECharts多维度数据分析及WebSocket智能客服。支持语音、图片沟通,提升服务效率。系统覆盖用户、工作人员、管理员全链路功能,实现场馆资源高效管理与用户体验优化。

paopaokaka_luck的博客 250

“扣子编程”开发数据分析专家Agent实战案例

本项目虽然规模不大,但涉及提示词设计、工具编排、模型调用等多个关键环节。以下五条经验对同类项目具有普遍的借鉴意义。

夏天又到了的专栏 639

关于Atera数据分析的几点问题探讨

关于Atera数据分析的几点问题探讨

weixin_53637133的博客 122

visium数据分析范例--解码调控胶质母细胞瘤可塑性的基因调控程序

visium数据分析范例--解码调控胶质母细胞瘤可塑性的基因调控程序

weixin_53637133的博客 189
上一篇: 数字逻辑设计进阶:用Quartus-II 9.0构建可复用的加法器模块库
下一篇: MyBatis批量操作终极指南:从基础到高级实战(附完整代码示例)
github5actions
博客等级 码龄1天 0粉丝 1824原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值