【空间插值】地理加权回归模型(GWR, Geographically Weighted Regression)


地理加权回归(GWR)是一种面向空间异质性的局部回归方法,用于分析地理空间数据中变量之间的关系如何随空间位置变化。与传统的线性回归模型相比,GWR允许回归系数随地理位置变化,以捕捉空间异质性。

GWR原理

GWR是局部模型,公式如下所示:
在这里插入图片描述
在这里插入图片描述

回归系数(Coefficients)随位置发生变化,针对每个给定的位置分别进行求解。
求解时确定以下三件事:确定带宽(bandwidth,即以任意一点为中心,邻域的范围);邻域对该点影响的大小即权重,通过核函数确定。
遵循原则为越近的数据点所待估计点的权重越高;距离类型,如欧式距离。
在这里插入图片描述
单一带宽(Single Bandwidth):
GWR 使用一个固定的带宽(或者自适应带宽),即所有自变量都共享同一个带宽。这意味着所有变量的空间影响范围是相同的,即它们都被认为在相同的空间尺度上变化。

适用于单一尺度问题:
如果所有解释变量的影响范围相似(例如,房价受邻近学校和公园的影响),GWR 可能是适合的模型。

核权重函数

GWR通过一个加权的局部回归来估计每个位置的回归系数。加权由核函数控制,用以衡量地理位置之间的相似性。常见的核函数包括:

  • 固定距离法:权重仅取决于两个点之间的距离。
  • 自适应核法:权重根据点的局部密度动态调整核带宽。

在这里插入图片描述
常用的核函数如下所示,其中参数b为核函数的带宽(bandwidth):

参数估计

在这里插入图片描述

Multiscale Geographically Weighted Regression (MGWR)

MGWR(多尺度地理加权回归)和 GWR(地理加权回归)都属于空间回归模型,用于分析地理空间上的回归关系。然而,它们有一些关键区别,主要体现在带宽选择和空间尺度上。

地理加权回归模型(GWR, Geographically Weighted Regression)存在一些问题,不能捕捉不同变量的不同空间尺度:现实世界中,不同变量可能在不同的空间尺度上起作用。
例如:

  • 人口密度 对房价的影响可能是城市级别的(大尺度)。
  • 噪音污染 对房价的影响可能是街区级别的(小尺度)。

GWR 由于使用相同的带宽,难以准确描述这些不同变量的空间影响范围。

MGWR 核心概念: MGWR 允许不同自变量在不同的空间尺度上变化,从而提供更精细的空间回归分析。

MGWR特点

多尺度带宽(Multiple Bandwidths):MGWR 允许每个自变量有自己的带宽,即:

  • 一些变量可能只影响局部区域(较小带宽)。
  • 另一些变量可能影响更大区域(较大带宽)。

这样可以更准确地描述不同变量在不同地理尺度上的作用。

更精细的空间异质性分析:
例如,在分析房价时:

  • X1(噪音污染) 的影响可能局限于几百米范围(小带宽)。
  • X2(人口密度) 的影响可能扩展到整个城市(大带宽)。

MGWR 允许每个变量的回归系数在适当的空间范围内变化,提高模型的解释能力。

GWR vs. MGWR 的直观对比

特性GWRMGWR
带宽单一带宽(所有变量共享)每个变量都有不同的带宽
变量的空间尺度假设所有变量影响范围相同允许不同变量影响范围不同
模型灵活性适用于单一尺度问题适用于多尺度问题
计算复杂度计算较快计算较慢(带宽优化更复杂)
适用场景适用于所有变量影响范围接近的情况适用于不同变量影响范围不同的情况

R 实现 GWR 插值

工具包简介-spgwr: Geographically Weighted Regression

Python 实现 GWR 插值

Python 可以实现 地理加权回归模型(GWR, Geographically Weighted Regression),并且有专门的 Python 库可供使用,其中最常用的是 mgwr 这个库。

Python- Multiscale Geographically Weighted Regression (MGWR)
在这里插入图片描述

安装相关 Python 库

Python 提供了 mgwr 库来实现 GWR,该库依赖 spreg 和 libpysal,可以通过以下命令安装:

pip install mgwr

conda install -c conda-forge mgwr

如果遇到依赖问题,可以尝试安装 libpysal 和 spreg:

pip install libpysal spreg

conda install -c conda-forge pysal
conda install -c conda-forge mgwr

GWR 模型实现示例

Python实现全代码如下:

import numpy as np
import matplotlib.pyplot as plt
import geopandas as gpd
from mgwr.gwr import GWR
from mgwr.sel_bw import Sel_BW
import libpysal as ps
from scipy.interpolate import griddata


# 设置全局字体
plt.rcParams["font.family"] = "Times New Roman"

# 生成示例数据
np.random.seed(42)
n = 100  # 样本数量
x1 = np.random.rand(n, 1) * 10  # 自变量1
x2 = np.random.rand(n, 1) * 5   # 自变量2
y = 3 * x1 + 2 * x2 + np.random.randn(n, 1) * 2  # 因变量

# 生成随机坐标(模拟地理位置)
coords = np.random.rand(n, 2) * 100

# 组合数据
X = np.hstack([np.ones((n, 1)), x1, x2])  # 添加截距项

# 选择最佳带宽
bw = Sel_BW(coords, y, X).search()

# 运行 GWR 模型
model = GWR(coords, y, X, bw)
results = model.fit()

# 输出结果
print(results.summary())

# 提取 GWR 估计的局部回归系数
beta1 = results.params[:, 1]  # x1 的回归系数
beta2 = results.params[:, 2]  # x2 的回归系数

# 生成插值网格
grid_x, grid_y = np.mgrid[0:100:200j, 0:100:200j]  # 200x200 网格
grid_beta1 = griddata(coords, beta1, (grid_x, grid_y), method='cubic')
grid_beta2 = griddata(coords, beta2, (grid_x, grid_y), method='cubic')

# 绘制插值结果
fig, axes = plt.subplots(1, 2, figsize=(12, 5))

# x1 的局部回归系数插值图
ax1 = axes[0]
c1 = ax1.contourf(grid_x, grid_y, grid_beta1, cmap='coolwarm', levels=20)
fig.colorbar(c1, ax=ax1)
ax1.scatter(coords[:, 0], coords[:, 1], c=beta1, cmap='coolwarm', edgecolors='k')
ax1.set_title("GWR local regression rate - x1")

# x2 的局部回归系数插值图
ax2 = axes[1]
c2 = ax2.contourf(grid_x, grid_y, grid_beta2, cmap='coolwarm', levels=20)
fig.colorbar(c2, ax=ax2)
ax2.scatter(coords[:, 0], coords[:, 1], c=beta2, cmap='coolwarm', edgecolors='k')
ax2.set_title("GWR local regression rate - x2")

plt.show()

两张插值图分别表示 x1 和 x2 在不同地理位置的局部回归系数:颜色代表回归系数的大小(红色表示较高,蓝色表示较低)
在这里插入图片描述

输出结果如下:包含 全局回归(OLS) 和 地理加权回归(GWR)

===========================================================================
Model type                                                         Gaussian
Number of observations:                                                 100
Number of covariates:                                                     3

Global Regression Results
---------------------------------------------------------------------------
Residual sum of squares:                                            378.269
Log-likelihood:                                                    -208.416
AIC:                                                                422.831
AICc:                                                               425.252
BIC:                                                                -68.433
R2:                                                                   0.957
Adj. R2:                                                              0.956

Variable                              Est.         SE  t(Est/SE)    p-value
------------------------------- ---------- ---------- ---------- ----------
X0                                  -0.179      0.508     -0.352      0.725
X1                                   2.932      0.067     43.917      0.000
X2                                   2.288      0.136     16.883      0.000

Geographically Weighted Regression (GWR) Results
---------------------------------------------------------------------------
Spatial kernel:                                           Adaptive bisquare
Bandwidth used:                                                      99.000

Diagnostic information
---------------------------------------------------------------------------
Residual sum of squares:                                            361.035
Effective number of parameters (trace(S)):                            6.153
Degree of freedom (n - trace(S)):                                    93.847
Sigma estimate:                                                       1.961
Log-likelihood:                                                    -206.084
AIC:                                                                426.474
AICc:                                                               427.744
BIC:                                                                445.109
R2:                                                                   0.959
Adjusted R2:                                                          0.956
Adj. alpha (95%):                                                     0.024
Adj. critical t value (95%):                                          2.286

Summary Statistics For GWR Parameter Estimates
---------------------------------------------------------------------------
Variable                   Mean        STD        Min     Median        Max
-------------------- ---------- ---------- ---------- ---------- ----------
X0                       -0.206      0.294     -0.633     -0.198      0.244
X1                        2.940      0.041      2.852      2.956      2.991
X2                        2.248      0.077      2.136      2.263      2.377
===========================================================================

None

全局回归(OLS)结果如下:

  • X1、X2 的 p 值都小于 0.05,说明它们对因变量 Y 有显著影响。
  • 截距项 X0 的 p 值为 0.725,不显著,意味着在所有自变量都为 0 时,Y 的预测值接近 0。
  • X1=2.932,X2=2.288,表示全局模型中,它们对 Y 的影响是固定的,不随地理位置变化。

地理加权回归(GWR) 结果如下:

指标解释
空间核(Spatial kernel)Adaptive bisquare,自适应双二次核(适用于数据点密度不均匀的情况)。
带宽(Bandwidth used)99.000,表示 GWR 使用了 99 个邻近点进行局部回归。

GWR 回归系数的空间变异

变量均值(Mean)标准差(STD)最小值(Min)中位数(Median)最大值(Max)
X0(截距项)-0.2060.294-0.633-0.1980.244
X12.9400.0412.8522.9562.991
X22.2480.0772.1362.2632.377

X1 和 X2 的系数在不同地理位置略有波动:

  • X1 的回归系数在 [2.852, 2.991] 之间波动,说明其影响力在不同地区几乎相同。
  • X2 的回归系数在 [2.136, 2.377] 之间波动,说明它的影响力略有地理差异。
  • 截距项 X0 在不同地区的变化较大(-0.633 到 0.244),说明空间异质性较强。

带宽选择为 99,几乎覆盖了所有 100 个观测点: 这说明 GWR 退化成了接近 OLS 的情况,即局部回归的作用不强。 如果数据点较多,可以尝试固定带宽或减少邻近点数量以增强局部差异。

参考

1、Geographically Weighted Regression Analysis

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WW、forever

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值