地理加权回归模型——一种局部的空间回归分析方法

        地理加权回归(GWR)是一种局部的空间回归分析方法,它允许模型参数在空间上变化,从而能够捕捉到空间数据的局部空间非平稳性。GWR模型的基本思想是在回归分析中引入空间权重,使得模型能够根据地理位置的邻近程度对观测值进行加权。

1. GWR模型的基本形式

y_{i} = \beta (u_{i})\cdot X_{i}+\varepsilon _{i}

其中,y{_{i}}是第i个观测变量,X_{i} 是第i个观测值的自变量向量,\beta (u_{i})是空间上变化的回归系数向量,u_{i}表示第i个观测值的地理位置,\varepsilon _{i}是第i个观测值的误差项。 

2. 空间权重矩阵

        GWR模型中的关键部分是空间权重矩阵 W,它根据观测值之间的空间距离来定义权重。权重通常由空间权重函数 W(h_{ij}) 计算得出,其中​h_{ij}是第 i个和第j个观测值之间的空间距离。权重函数可以是高斯函数、双平方指数函数等。


3. 模型参数估计

        GWR模型的参数估计通常采用最大似然估计方法。通过最大化似然函数,可以得到回归系数的估计值。

4. 模型优缺点

4.1 优点

  • 局部空间非平稳性:GWR能够捕捉到空间数据的局部空间非平稳性,即模型参数在空间上的变化。
  • 灵活性:模型允许参数随位置变化,提供了一种灵活的方式来分析空间数据。
  • 可视化:GWR模型的局部估计可以生成空间效应的可视化,帮助理解不同区域的空间关系。

4.2 缺点

  • 模型复杂性:由于参数空间变化,模型可能会变得复杂,难以解释。
  • 过度拟合:如果空间权重过大,可能会导致模型对局部数据过度拟合。
  • 选择带宽:需要选择合适的带宽(bandwidth),这可能需要依赖于经验或交叉验证

        GWR模型在地理学、环境科学、流行病学等领域中有着广泛的应用,尤其是在分析空间数据时,能够提供比传统全局回归模型更深入的洞察。

5. python实现

        我们在这里给出一段Python代码,使用了各个省份的省会的经纬度作为空间位置的衡量,使用了bi-square函数作为核函数,使用了AIC(赤池信息准责)和BIC(贝叶斯信息准则)确定最优带宽,来帮助读者更好的理解和实现:

import os
import pandas as pd
from mgwr.gwr import GWR
from mgwr.sel_bw import Sel_BW
import numpy as np
from sklearn.utils import check_array  # 添加这一行来导入check_array
from sklearn.utils.validation import check_array

import os
os.environ['PYTHONUTF8'] = '1'
os.environ['PYTHONIOENCODING'] = 'utf-8'

# 步骤 1: 加载数据
# 使用'openpyxl'引擎来读取Excel文件
data = pd.read_excel('shu_ju_ji.xlsx', engine='openpyxl')




# 检查数据是否包含“经度”和“纬度”列
#print(data.dtypes)

# 将非数值列转换为数值类型(float或int)
# 这里需要确保所有自变量的列名都是正确的,并且存在于data中
numeric_columns = ['GDP', '人口密度', '城乡人均收入比值', '分省政府网站数量',
                   '网民人数', '互联网普及率', '互联网宽带接入端口数量', '光缆线路长度',
                   '老年人占比', '性别比', '流量', '高中及以上学历占比',
                   '本科及以上学历占比', '经度值', '纬度值']

# 确保所有自变量都是数值类型
for col in numeric_columns:
    data[col] = pd.to_numeric(data[col], errors='coerce')  # errors='coerce' 会将无法转换的值设置为NaN

# 移除包含NaN的行,如果需要的话
data = data.dropna()

# 定义自变量的列名
independent_vars = ['GDP']  # 示例中只选择'GDP'作为自变量
dependent_var = 'RSR拟合值'

# 确保所有自变量和因变量都是数值类型
for col in independent_vars + [dependent_var]:
    data[col] = pd.to_numeric(data[col], errors='coerce')  # errors='coerce' 会将无法转换的值设置为NaN

# 移除包含NaN的行
data = data.dropna(subset=independent_vars + [dependent_var])

# 提取自变量和因变量
X = data[independent_vars].values.astype('float64')  # 确保X是2D数组
y = data[dependent_var].values.astype('float64').reshape((-1, 1))  # 确保y是2D数组

# 检查X和y的大小
print(f"X shape: {X.shape}")
print(f"y shape: {y.shape}")

# 如果X或y是空的,处理数据问题
if X.size == 0 or y.size == 0:
    raise ValueError("One of the input arrays is empty. Please check the data.")

# 提取经纬度用于地理权重
coords = data[['经度值', '纬度值']].values

# 选择带宽
bw = Sel_BW(coords, y, X, fixed=False, kernel='bisquare').search()
print(f'Optimal bandwidth: {bw}')

# 拟合GWR模型

model = GWR(coords, y, X, bw=bw, fixed=False, kernel='bisquare')
results = model.fit()

# 输出地理加权回归的摘要统计信息
print(results.summary())

# 获取局部估计的参数
local_params = results.params

# 打印每个观测点的局部估计参数
print("\nLocally Estimated Parameters for Each Observation:")
for i, params in enumerate(local_params):
    print(f"Observation {i+1}: "
          f"Intercept: {params[0]:.4f}, "
          f"GDP Coefficient: {params[1]:.4f}")

# 如果您需要构建每个观测点的局部回归方程,可以这样做:
print("\nLocal Regression Equations for Each Observation:")
for i, params in enumerate(local_params):
    eqn = f"RSR拟合值 = {params[0]:.4f} + {params[1]:.4f} * GDP"
    print(f"Observation {i+1}: {eqn}")

6. 结论

        GWR模型在地理学、环境科学、流行病学等领域中有着广泛的应用,尤其在分析空间数据时,能够提供比传统全局回归模型更深入的洞察。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

手写Windows文件路径获取小工具

手写Windows文件路径获取小工具 目的 给Windows右键增加功能,右键任何文件(夹)显示复制文件路径的扩展。 效果展示 实现思路 右键调用,自身会把文件路径传递给被调用文件,被调用文件内只需将路径参数复制到剪贴板即…

Qt---窗口系统

一、QMainWindow QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget) 1. 菜单栏(最多有一个) QMenuBar *bar…

Chromium编译指南2024 Windows11篇-编译前的准备工作和Visual Studio安装(一)

前言 在这个数字化快速发展的时代,浏览器不仅是我们获取信息的窗口,更是开发者表达创意和技术实力的舞台。 Chromium是由Google于2008年发起的开源浏览器项目,致力于为用户提供更快、更安全、更稳定的网页浏览体验。 其作为开源浏览器项目…

团结引擎+OpenHarmony 3 通信

团结引擎和鸿蒙之间通信 因为 ts 并没有像 JAVA 有反射的调用,所以我们必须要像 Web GL 平台一样通过导出的行为告诉引擎到底哪些 ts 的接口可以给 C# 来调用。 1 在 Tuanjie 引擎里 需要一个tsllib文件,用于设置给导出对象 C#使用。就可以直接创建以 …

基于大模型的idea提炼:围绕论文和引用提炼idea之ResearchAgent

前言 对本博客比较熟悉的朋友知道,我司论文项目组正在基于大模型做论文的审稿(含CS英文论文审稿、和金融中文论文审稿)、翻译,且除了审稿翻译之外,我们还将继续做润色/修订、idea提炼(包含论文检索),是一个大的系统,包…

C# 统计代码运行时长

using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms;namespace Sci {/// <summary>/// 统计代码…

如何通过iptables配置URL过滤黑名单?

正文共&#xff1a;1555 字 16 图&#xff0c;预估阅读时间&#xff1a;2 分钟 我们前面曾经简单介绍过URL过滤功能&#xff08;URL过滤功能了解一下&#xff1f;&#xff09;&#xff0c;并且以H3C VFW为例简单配置了一下URL过滤功能。 首先回顾一下&#xff0c;URL过滤&#…

若依微服务docker-compose 启动

docker-compose 文件 version : 3 services: ruoyi-nacos: container_name: ruoyi-nacos image: nacos/nacos-server build: context: ./nacos environment: - MODEstandalone volumes: - ./nacos/logs/:/home/nacos/logs - ./n…

【linux-IMX6ULL-定时器-GPT-串口配置流程-思路】

目录 1. 定时器配置流程1.1 EPIT定时器简介1.2 定时器1(epit1)的配置流程1.3 配置代码(寄存器版本)1.4 定时器-配合按键消抖1.4.1 实现原理1.4.2 代码实现&#xff08;寄存器版&#xff09; 2. GPT定时器实现高精度延时2.1 延时原理分析2.2 代码实现 3. UART串口配置流程3.1 UA…

Kafka的安装及接入SpringBoot

环境&#xff1a;windows、jdk1.8、springboot2 Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/ 1.概述 Kafka 是一种高性能、分布式的消息队列系统&#xff0c;最初由 LinkedIn 公司开发&#xff0c;并于2011年成为 Apache 顶级项目…

Datax数据采集

一、Datax介绍 官网&#xff1a; DataX/introduction.md at master alibaba/DataX GitHub DataX 是阿里云 DataWorks数据集成 的开源版本&#xff0c;在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。 DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、…

# ERROR: node with name “rabbit“ already running on “MS-ITALIJUXHAMJ“ 解决方案

ERROR: node with name “rabbit” already running on “MS-ITALIJUXHAMJ” 解决方案 一、问题描述&#xff1a; 1、启动 rabbitmq-server.bat 服务时&#xff0c;出错 Error 2、查询 rabbitmqctl status 状态时&#xff0c;出错 Error 3、停止 rabbitmqctl stop 服务时&a…

探索人类意识的多样性:从安全感到语感、节奏感的差异

在我们的日常生活中&#xff0c;人类意识表现出多种多样的特点&#xff0c;这些特点往往与个体的天生禀赋和生活经历密切相关。从安全感到语感、节奏感&#xff0c;每个人的表现都有所不同。今天&#xff0c;让我们一起来探索这些差异&#xff0c;感受人类意识的多样性。 首先&…

指针(5)加油吧

指针&#xff08;5&#xff09; 拿冒泡排序来举例&#xff1a; 1 .qsort void qsort (void* base,//base指向待排序数组的首元素的指针size_t num,//base指向数组中元素的个数size_t size,//base指向的数组中的一个元素的大小&#xff0c;单位是字节int(*cmp)(const void*,co…

通过mvn archetype 创建一个spring boot start 工程

mvn archetype https://maven.apache.org/archetype/index.html 遇到的问题 对于想自定义一个spring-boot-start的同学,比如 Springboot自定义Starter启动器 整个过程很繁琐。 定义属性开关增加 spring boot test start插件定义自动装载 spring.factories or org.springfra…

类加载机制(双亲委派机制)

文章目录 JVM的作用是什么双亲委派机制加载流程 JVM的作用是什么 我们运行Java程序时&#xff0c;要安装JDK&#xff0c;JDK包含JVM&#xff0c;不同环境的JDK都是不同的。 Java 代码在编译后会形成 class 的字节码文件&#xff0c;该字节码文件通过 JVM 解释器&#xff0c;生…

【牛客】SQL206 获取每个部门中当前员工薪水最高的相关信息

1、描述 有一个员工表dept_emp简况如下&#xff1a; 有一个薪水表salaries简况如下&#xff1a; 获取每个部门中当前员工薪水最高的相关信息&#xff0c;给出dept_no, emp_no以及其对应的salary&#xff0c;按照部门编号dept_no升序排列&#xff0c;以上例子输出如下: 2、题目…

7.STL_string(详细)

1. 什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且 是一个包罗数据结构与算法的软件框架。 2. STL的版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版…

[单机]成吉思汗3_GM工具_VM虚拟机

稀有端游成吉思汗1,2,3单机版虚拟机一键端完整版 本教程仅限学习使用&#xff0c;禁止商用&#xff0c;一切后果与本人无关&#xff0c;此声明具有法律效应&#xff01;&#xff01;&#xff01;&#xff01; 教程是本人亲自搭建成功的&#xff0c;绝对是完整可运行的&#x…

校园管理系统,基于 SpringBoot+Vue+MySQL 开发的前后端分离的校园管理系统设计实现

目录 一. 前言 二. 功能模块 2.1. 管理员功能模块 2.2. 用户功能模块 2.3. 院校管理员功能模块 三. 部分代码实现 四. 源码下载 一. 前言 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身…