Applied Spatial Statistics(九)GWR示例

Applied Spatial Statistics(九)GWR 示例


这是一个基本的示例笔记本,演示了如何使用开源“mgwr”包在 Python 中校准 GWR(Fotheringham 等人,2002)模型。mgwr 包由 Oshan 等人(2019 年)开发,托管在 https://github.com/pysal/mgwr。

Installation

pip install mgwr

我们将使用佐治亚州的一个示例数据集,以下是数据中的一些变量。

TotPop90 1990 年县的人口

PctRural 县内定义为农村的人口百分比

PctBach 县内拥有学士学位的人口百分比

PctEld 县内 65 岁或以上的人口百分比

PctFB 县内出生在美国以外的人口百分比

PctPov 县内生活在贫困线以下的人口百分比

PctBlack 县内黑人人口百分比


我们将使用几个社会人口统计变量对县级教育程度进行建模。


模型为:

PctBach = b0 + b1 * PctFB + b2 * PctBlack + b3 * PctRural


Load packages

import numpy as np
import matplotlib.pyplot as plt
import geopandas as gpd
import pandas as pd
import libpysal as ps 
from libpysal.weights import Queen
from esda.moran import Moran#MGWR functions
from mgwr.gwr import GWR
from mgwr.sel_bw import Sel_BW

从 pysal 加载 Georgia 数据集

georgia_shp = gpd.read_file("https://raw.github.com/Ziqi-Li/gis5122/master/data/georgia.geojson")

佐治亚州地图和每个县的质心。

fig, ax = plt.subplots(figsize=(5,5))
georgia_shp.boundary.plot(ax=ax,aspect=1)georgia_shp.centroid.plot(ax=ax, c='black',markersize = 10,aspect=1)
/var/folders/mp/9px298sd6vs8xccb_3sql0dr0000gp/T/ipykernel_55115/3938808638.py:4: UserWarning: Geometry is in a geographic CRS. Results from 'centroid' are likely incorrect. Use 'GeoSeries.to_crs()' to re-project geometries to a projected CRS before this operation.georgia_shp.centroid.plot(ax=ax, c='black',markersize = 10,aspect=1)<Axes: >

在这里插入图片描述

我们可以映射因变量“PctBach”。

georgia_shp.plot(column="PctBach",legend=True,aspect=1)
plt.title("PctBach")
Text(0.5, 1.0, 'PctBach')

在这里插入图片描述

模型规范:

PctBach = b0 + b1 * PctFB + b2 * PctBlack + b3 * PctRural


准备要输入到 mgwr 的 Georgia 数据集

y = georgia_shp['PctBach'].valuesX = georgia_shp[['PctFB', 'PctBlack', 'PctRural']].valuesu = georgia_shp['X']
v = georgia_shp['Y']coords = list(zip(u,v))

标准化变量(可选)

  • 将数据标准化,使平均值为 0,方差为 1。
  • 参数估计的幅度是可比的。系数越大 -> 关系越强。
#Standardize variables
X = (X - X.mean(axis=0)) / X.std(axis=0)
y = (y - y.mean(axis=0)) / y.std(axis=0)y = y.reshape(-1,1)
两步拟合 GWR 模型
  • 选择最佳带宽
  • 使用最佳带宽拟合 GWR 模型

默认内核是自适应(最近邻居数)双平方。

gwr_selector = Sel_BW(coords, y, X)gwr_bw = gwr_selector.search(verbose=True)print("Selected optimal bandwidth is:", gwr_bw)
Bandwidth:  90.0 , score:  301.83
Bandwidth:  117.0 , score:  299.05
Bandwidth:  133.0 , score:  300.58
Bandwidth:  106.0 , score:  299.75
Bandwidth:  123.0 , score:  299.85
Bandwidth:  112.0 , score:  299.29
Bandwidth:  119.0 , score:  299.43
Bandwidth:  115.0 , score:  299.08
Selected optimal bandwidth is: 117.0

使用最佳 bw 拟合模型

gwr_results = GWR(coords, y, X, bw=gwr_bw).fit()

GWR 输出摘要

gwr_results.summary()
===========================================================================
Model type                                                         Gaussian
Number of observations:                                                 159
Number of covariates:                                                     4Global Regression Results
---------------------------------------------------------------------------
Residual sum of squares:                                             71.793
Log-likelihood:                                                    -162.399
AIC:                                                                332.798
AICc:                                                               335.191
BIC:                                                               -713.887
R2:                                                                   0.548
Adj. R2:                                                              0.540Variable                              Est.         SE  t(Est/SE)    p-value
------------------------------- ---------- ---------- ---------- ----------
X0                                  -0.000      0.054     -0.000      1.000
X1                                   0.458      0.066      6.988      0.000
X2                                  -0.084      0.055     -1.525      0.127
X3                                  -0.374      0.065     -5.734      0.000Geographically Weighted Regression (GWR) Results
---------------------------------------------------------------------------
Spatial kernel:                                           Adaptive bisquare
Bandwidth used:                                                     117.000Diagnostic information
---------------------------------------------------------------------------
Residual sum of squares:                                             51.186
Effective number of parameters (trace(S)):                           11.805
Degree of freedom (n - trace(S)):                                   147.195
Sigma estimate:                                                       0.590
Log-likelihood:                                                    -135.503
AIC:                                                                296.616
AICc:                                                               299.051
BIC:                                                                335.913
R2:                                                                   0.678
Adjusted R2:                                                          0.652
Adj. alpha (95%):                                                     0.017
Adj. critical t value (95%):                                          2.414Summary Statistics For GWR Parameter Estimates
---------------------------------------------------------------------------
Variable                   Mean        STD        Min     Median        Max
-------------------- ---------- ---------- ---------- ---------- ----------
X0                       -0.004      0.180     -0.296      0.111      0.208
X1                        0.477      0.234      0.123      0.556      0.741
X2                       -0.043      0.083     -0.170     -0.053      0.100
X3                       -0.328      0.060     -0.464     -0.308     -0.241
===========================================================================

局部估计值可以从“gwr_results.params”中获得,它返回一个 n x p 数组,其中 p 是模型中的预测变量的数量(包括截距)。

from matplotlib import colorsax = georgia_shp.plot(column=gwr_results.params[:,3],figsize=(10,5),legend=True, linewidth=0.0,aspect=1)plt.title("Coefficients of Pct PctRural",fontsize=12)
Text(0.5, 1.0, 'Coefficients of Pct PctRural')

在这里插入图片描述

编写一些绘图代码,将参数估计表面全部可视化。我们需要将 GWR 结果与县 GeoDataFrame 连接起来。

from mpl_toolkits.axes_grid1 import make_axes_locatable
from mgwr.utils import shift_colormap,truncate_colormap
from matplotlib import cm,colorsdef param_plots(result, gdf, names=[], filter_t=False):#Size of the plot. Here we have a 2 by 2 layout.fig, axs = plt.subplots(2, 2, figsize=(10, 10))axs = axs.ravel()k = gwr_results.k#The max and min values of the color bar.vmin = -0.8vmax = 0.8cmap = cm.get_cmap("coolwarm")norm = colors.BoundaryNorm(np.arange(-0.8,0.9,0.1),ncolors=256)for j in range(k):pd.concat([gdf,pd.DataFrame(np.hstack([result.params,result.bse]))],axis=1).plot(ax=axs[j],column=j,vmin=vmin,vmax=vmax,cmap="bwr",norm=norm,linewidth=0.1,edgecolor='white',aspect=1)axs[j].set_title("Parameter estimates of \n" + names[j],fontsize=10)if filter_t:rslt_filtered_t = result.filter_tvals()if (rslt_filtered_t[:,j] == 0).any():gdf[rslt_filtered_t[:,j] == 0].plot(color='grey', ax=axs[j],linewidth=0.1,edgecolor='white',aspect=1)#plt.axis('off')fig = axs[j].get_figure()cax = fig.add_axes([0.99, 0.2, 0.025, 0.6])sm = plt.cm.ScalarMappable(cmap=cmap,norm=norm)# fake up the array of the scalar mappable. Urgh...sm._A = []fig.colorbar(sm, cax=cax)
以下是从 GWR 获得的参数估计图。每个图代表每个预测因子与 PctBach 之间的空间关系。
  • 正(负)关系以红色(蓝色)显示。
  • 较强(较弱)的关系颜色较深(较浅)。
param_plots(gwr_results, georgia_shp, names=['intercept','PctFB', 'PctBlack', 'PctRural'])
/var/folders/mp/9px298sd6vs8xccb_3sql0dr0000gp/T/ipykernel_55115/1271372694.py:17: MatplotlibDeprecationWarning: The get_cmap function was deprecated in Matplotlib 3.7 and will be removed two minor releases later. Use ``matplotlib.colormaps[name]`` or ``matplotlib.colormaps.get_cmap(obj)`` instead.cmap = cm.get_cmap("coolwarm")

在这里插入图片描述

现在让我们检查一下 GWR 模型的残差。

#Here we use the Queen contiguity
w = Queen.from_dataframe(georgia_shp)#row standardization
w.transform = 'R'
/var/folders/mp/9px298sd6vs8xccb_3sql0dr0000gp/T/ipykernel_55115/876426650.py:2: FutureWarning: `use_index` defaults to False but will default to True in future. Set True/False directly to control this behavior and silence this warningw = Queen.from_dataframe(georgia_shp)
georgia_moran = Moran(gwr_results.resid_response.reshape(-1), w, permutations = 199) #199 permutations
georgia_moran.I
0.040101374209262214

我们经常看到 GWR 模型的残差具有随机模式,这表明空间异质性和自相关性都被考虑在内。局部截距在解释空间自相关性方面发挥着作用,其作用类似于空间误差模型中的自回归误差分量。


GWR 推断

局部系数显著性

以下是**显著性(p<0.05)**参数估计值的图。显著性检验已调整以解决多重检验问题。

不显著的参数用灰色遮盖。例如,您可以发现,尽管我们在回归系数中看到了这种模式,但 PctBlack 和 PctBach 之间的关联实际上并不显著。

param_plots(gwr_results, georgia_shp,names=['intercept','PctFB', 'PctBlack', 'PctRural'],filter_t=True)
/var/folders/mp/9px298sd6vs8xccb_3sql0dr0000gp/T/ipykernel_55115/1271372694.py:17: MatplotlibDeprecationWarning: The get_cmap function was deprecated in Matplotlib 3.7 and will be removed two minor releases later. Use ``matplotlib.colormaps[name]`` or ``matplotlib.colormaps.get_cmap(obj)`` instead.cmap = cm.get_cmap("coolwarm")

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/56491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

塞班和诺基亚(中古手机图,你见过哪个?)

诺基亚的塞班系统&#xff0c;是比较早和强大的移动操作系统了。当时还有Palm&#xff0c;微软的平台&#xff0c;但市占率都很低。 安卓从被谷歌收购那天&#xff0c;每个特性都预示着&#xff0c;未来一定会超越塞班。而塞班后来取消了生态&#xff0c;自己来使用&#xff0c…

element-ui点击文字查看图片预览功能

今天做一个点击文字查看图片的功能&#xff0c;大体页面长这样子&#xff0c;点击查看显示对应的图片 引入el-image-viewer&#xff0c;点击的文字时候设置图片预览组件显示并传入图片的地址 关键代码 <el-link v-if"scope.row.fileList.length > 0" type&…

Python基础:18、Python文件操作

1&#xff09;文件的编码 什么是编码&#xff1f; 编码就是一种规则集合&#xff0c;记录了内容和二进制间进行相互转换的逻辑。 编码有许多中&#xff0c;我们最常用的是UTF-8编码 为什么需要使用编码&#xff1f; 计算机只认识0和1&#xff0c;所以需要将内容翻译成0和1才能…

Ubuntu20.04卸载ros2 foxy版本安装ros1 noetic版本

前言 如果你ubuntu中没有ros&#xff0c;可以试着直接从鱼香ros一键安装包指令处开始。 卸载ros2 sudo apt-get remove ros-*接下来如果你直接使用鱼香ros的一键安装命令&#xff0c;会出错。 设置源 设置源&#xff0c;这里使用的是中科大的。 sudo sh -c . /etc/lsb-r…

GRU--详解

GRU&#xff08;Gated Recurrent Unit&#xff09;&#xff08;门控循环单元&#xff09;是RNN&#xff08;循环神经网络&#xff09;的一种变体。GRU的设计简化了另一种RNN变体——LSTM&#xff08;长短期记忆网络&#xff09;&#xff0c;与LSTM不同的是&#xff0c;GRU将输入…

【OpenGauss源码学习 —— (VecSortAgg)】

VecSortAgg 概述SortAggRunner::SortAggRunner 函数SortAggRunner::init_phase 函数SortAggRunner::init_indexForApFun 函数SortAggRunner::set_key 函数BaseAggRunner::initialize_sortstate 函数SortAggRunner::BindingFp 函数SortAggRunner::buildSortAgg 函数SortAggRunne…

python从0快速上手(一)python环境搭建 windows macos linux

Python环境搭建超详细指南 Python是一种广泛使用的高级编程语言&#xff0c;它以其简洁的语法和强大的功能而受到开发者的喜爱。对于初学者来说&#xff0c;搭建一个合适的Python开发环境是开始Python之旅的第一步。本文将为你提供一个超级详细的Python环境搭建指南&#xff0…

基于SpringBoot+Vue+Uniapp家具购物小程序的设计与实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而…

3个方法快速恢复微信已过期或被清理图片

微信作为现在国内用户数量最多的社交软件&#xff0c;已经成为了许多人日常生活和工作中必不可少的一部分。但微信中的图片有时会因为多种原因而消失&#xff0c;如过期、被清理或者误删。遇到这种情况&#xff0c;那么已过期或被清理的图片还能恢复吗&#xff1f;下面小编就来…

学习之上下文管理器

one_file open(demo.txt, w) one_file.write("xxxxx") # raise ValueError # 如果抛出异常将会报错 one_file.close()with open(demo.txt, w) as f: # open--返回的是IO--IO中实现了__enter__方法和__exit__方法f.write("aaaa")class MyContextManger:d…

论文速读:通过目标感知双分支蒸馏进行跨域目标检测(CVPR2022)

原文标题&#xff1a;Cross Domain Object Detection by Target-Perceived Dual Branch Distillation 中文标题&#xff1a;通过目标感知双分支蒸馏进行跨域目标检测 论文地址&#xff1a; https://arxiv.org/abs/2205.01291 代码地址&#xff1a; GitHub - Feobi1999/TDD 这篇…

做个工作中的退让者,生活中的前进者

先来分享一下什么是退让者原则&#xff0c;退让者原则&#xff0c;也被称为“幸福者退让原则”&#xff0c;是一种在面对冲突和挑衅时采取的策略&#xff0c;其核心理念是在拥有幸福生活的背景下&#xff0c;选择退让而非直接对抗&#xff0c;以保护个人及家庭幸福为优先。 为…

在IDEA中配置Selenium和WebDriver

前言&#xff1a; 在当今自动化测试和网络爬虫的领域&#xff0c;Selenium是一个被广泛使用的工具。它不仅能够模拟用户与浏览器的交互&#xff0c;还能进行网页测试和数据抓取。而为了使用Selenium与谷歌/Edge浏览器进行自动化测试&#xff0c;配置合适的WebDriver至关重要。本…

【前端】Bootstrap:栅格系统 (Grid System)

Bootstrap的栅格系统是该框架的核心部分之一&#xff0c;能够让开发者轻松创建响应式网页布局&#xff0c;适配各种屏幕尺寸和设备。栅格系统通过将页面划分为12列的布局结构&#xff0c;开发者可以根据内容的重要性和设计需求灵活控制元素的宽度和排列。 在这篇文章中&#x…

Java--练习--DVD管理系统

一、详细代码 package demo2.Test;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner;public class DVD2 {//DVD管理系统//声明三个数组 用来存储 名称 状态 借出日期 借出次数String[] names new St…

学习使用linux的bash命令可以删除ps aux进程中今天之前指定运行进程的脚本

学习使用linux的bash命令可以删除ps aux进程中今天之前指定运行进程的脚本 脚本注意事项&#xff1a; 脚本 #!/bin/bash# 获取今天的日期&#xff08;格式 YYYY-MM-DD&#xff09; TODAY$(date %Y-%m-%d)# 使用 ps aux 查找所有名为 qipa250 的进程 # 并提取出 PID 和启动时间…

游戏引擎哪家强?选哪一个更有钱途

游戏引擎乃是构筑及开发视频游戏的软件架构。其供应一整套工具与库&#xff0c;以处置常见的游戏开发事务&#xff0c;诸如渲染图形、模拟物理、管控音频等等。凭借对游戏引擎的运用&#xff0c;开发人员能够将精力倾注于构建其游戏的独特之处&#xff0c;而非再度发明此类基础…

【游戏模组】极品飞车12无间风云冬季mod,冬天版本的无间风云你体验过吗

各位好&#xff0c;今天小编给大家带来一款新的高清重置魔改MOD&#xff0c;本次高清重置的游戏叫《极品飞车12无间风云》。 《极品飞车12&#xff1a;无间风云》是由Black Box游戏制作室开发的竞速类游戏&#xff0c;于2008年11月18日在北美首发、2008年11月21日在欧洲先后推…

【深入学习Redis丨第八篇】详解Redis数据持久化机制

前言 Redis支持两种数据持久化方式&#xff1a;RDB方式和AOF方式。前者会根据配置的规则定时将内存中的数据持久化到硬盘上&#xff0c;后者则是在每次执行写命令之后将命令记录下来。两种持久化方式可以单独使用&#xff0c;但是通常会将两者结合使用。 一、持久化 1.1、什么…

MySQL【知识改变命运】04

复习&#xff1a; 1&#xff1a;CURD 1.1Create &#xff08;创建&#xff09; 语法&#xff1a; insert [into] 表名 [column[,column]] valuse(value_list)[,vaule_list]... value_list:value,[value]...创建一个实例表&#xff1a; 1.1.1单⾏数据全列插⼊ values_l…