用R语言实现地理加权回归(GWR)

发布时间 2023-10-08 14:47:56作者: 海王大人

地理加权回归(GWR)

地理加权回归(Geographically Weighted Regression,简称GWR)是一种用于解释地理空间数据的统计方法。它是多元线性回归的一种扩展,允许模型的参数在空间上变化,以更好地捕捉地理数据的空间异质性。

GWR 考虑了地理位置的影响,认为不同地理位置的数据可能具有不同的关系,因此在不同地点拟合不同的回归模型。这使得 GWR 能够更好地分析和解释空间数据的变化。在 GWR 中,回归系数是空间上的可变参数,根据地理位置的不同而变化。

GWR 可以用于各种领域,如城市规划、地理信息系统(GIS)、环境科学等,以研究地理位置对某个变量的影响。通过考虑空间变异性,GWR 可以提供更准确的空间预测和更深入的空间数据分析。

操作流程

1、导入包

导入了必要的R包,包括GWmodel用于GWR分析和sf用于处理地理空间数据。

library(GWmodel)
library(sf)

2、读取shp数据

读取了一个名为"Watershed"的Shapefile文件,将其转换为Spatial对象,并绘制了地图。

ES <- st_read(dsn = getwd(), layer = "Watershed") %>% 
  as("Spatial")
plot(ES)

研究区域

3、确定最优带宽(bandwidth)

计算地理加权回归(GWR)中的bw(带宽)通常需要一些经验和试验,因为它决定了权重在空间上的分布。带宽控制了模型中每个数据点周围的邻域大小,从而影响了模型的拟合。以下是一些常见的方法来计算bw带宽:

  1. Cross-Validation(交叉验证): 交叉验证是一种常见的方法,用于确定最优的带宽值。你可以尝试不同的带宽值,然后对每个值进行交叉验证,选择具有最佳性能的带宽。

  2. AIC(赤池信息准则)或BIC(贝叶斯信息准则): 这些信息准则可以用于选择最合适的带宽。你可以计算不同带宽下的AIC或BIC值,并选择具有最小值的带宽。

  3. 经验法: 根据你的研究领域和数据特点,可以使用一些经验法来选择带宽。例如,使用平均最短距离(average nearest neighbor distance)或使用空间数据的密度来估计带宽。

  4. 参考文献和先前研究: 查阅与你的研究类似的文献,了解其他研究中使用的带宽值。这可以作为一个起点来选择带宽。

  5. 试验法: 尝试不同的带宽值,然后评估模型的性能。可以绘制拟合的残差图、R-squared值等指标,以判断哪个带宽值最适合你的数据。

  6. 自适应带宽(Adaptive Bandwidth): 使用自适应带宽方法,其中带宽值根据数据的密度和分布自动调整。这可以通过设置adaptive = TRUE和提供适当的自适应函数来实现。

注意,不同的数据和研究问题可能需要不同的带宽选择方法。通常,建议尝试多种方法,并根据模型的性能和数据的特点来选择最合适的带宽值。通过交叉验证等方法可以帮助你更好地确定合适的带宽。在R中,你可以使用gwr.basic函数中的bw参数来指定带宽值,然后根据你选择的方法确定这个值。
使用AIC方法计算了最佳带宽值,然后将其打印出来。

bw.AB<-bw.gwr(A~B,data = ES,
              approach = "aic",
              adaptive = F,
              kernel = "gaussian")
bw.AB

[1] 22348.91

bw.gwr函数是"GWmodel"包中用于带宽选择的函数,它用于计算地理加权回归(GWR)中的最佳带宽(bandwidth)值。

bw.gwr(
  formula,
  data,
  family = gaussian(),
  kernel = "gaussian",
  adaptive = FALSE,
  approach = "AIC",
  fixed = FALSE,
  minB = 0.1,
  maxB = 0.9,
  longlat = NULL,
  search.method = "grid",
  percentiles = NULL,
  ...)
  • formula: 一个公式,指定了回归模型的结构,例如 y ~ x1 + x2 + xn,其中 y 是因变量,x1, x2, xn 是自变量。

  • data: 包含因变量和自变量的数据框。

  • family: 用于指定模型的误差分布。默认是正态分布(gaussian()),但你也可以使用其他分布,如泊松分布或二项分布,根据你的数据类型选择适当的分布。

  • kernel: 用于计算权重的核函数。通常使用的核函数有"Gauss"(高斯核)和"Bisquare"(双二次核)。你可以根据你的研究需求选择不同的核函数。

  • adaptive: 一个逻辑值,表示是否使用自适应带宽。如果为TRUE,带宽将根据数据的密度在空间上自适应调整。

  • approach: 用于带宽选择的方法。常用的方法包括"AIC"(赤池信息准则)和"BIC"(贝叶斯信息准则)等。

  • fixed: 一个逻辑值,表示是否固定带宽。如果为TRUE,将使用指定的带宽值,而不进行带宽选择。

  • minBmaxB: 用于搜索最佳带宽的带宽范围的最小值和最大值。通常情况下,搜索方法会在这个范围内寻找最佳带宽。

  • longlat: 一个逻辑值,表示是否在经纬度坐标系中运行。如果为TRUE,将自动考虑地球的曲率。

  • search.method: 用于带宽搜索的方法。常用的方法有"grid"(网格搜索)和"optimize"(优化搜索)等。

  • percentiles: 用于指定带宽搜索的百分位数,可以用于精细化搜索。

  • ...: 其他参数,用于传递给底层函数。

bw.gwr函数执行带宽选择过程,计算最适合数据的带宽值,以用于后续的GWR模型拟合。带宽选择的方法和参数可以根据你的需求进行调整,以便选择最佳的带宽值。该函数通常用于帮助确定合适的带宽,以优化GWR模型的性能。

运行GWR模型

运行了地理加权回归(GWR)模型,使用之前计算得到的最佳带宽值,并绘制了自变量B的回归系数图。最后,将GWR模型结果导出到Shapefile文件中,以便在ArcGIS等GIS软件中进一步分析和可视化。

AB<-gwr.basic(A~B, data = ES,
              bw = bw.AB,
              adaptive = F,
              kernel = "gaussian")
spplot(AB$SDF['B']) #绘图查看自变量B的回归系数
gwr.write.shp(AB,fn="AB") #导出到一个shp文件,之后就可以导入到ArcGIS

回归系数B的可视化分布
gwr.basic函数是"GWmodel"包中用于执行地理加权回归(GWR)的函数,它执行最基本的GWR模型估计。

gwr.basic(
  formula,
  data,
  coords,
  bw,
  family = gaussian(),
  kernel = "gaussian",
  adaptive = FALSE,
  ...
)
  • formula: 一个公式,指定了回归模型的结构,例如 y ~ x1 + x2 + xn,其中 y 是因变量,x1, x2, xn 是自变量。

  • data: 包含因变量和自变量的数据框。

  • coords: 一个包含地理坐标信息的Spatial*DataFrame对象,或类似的对象。这些坐标将用于地理加权回归。

  • bw: 地理权重的带宽(bandwidth)。可以是一个常数值,也可以是一个向量,用于指定每个数据点的带宽。通常,这是GWR中重要的参数,它控制了权重在空间上的分布。

  • family: 用于指定模型的误差分布。默认是正态分布(gaussian()),但你也可以使用其他分布,如泊松分布或二项分布,根据你的数据类型选择适当的分布。

  • kernel: 用于计算权重的核函数。通常使用的核函数有"Gauss"(高斯核)和"Bisquare"(双二次核)。你可以根据你的研究需求选择不同的核函数。

  • adaptive: 一个逻辑值,表示是否使用自适应带宽。如果为TRUE,带宽将根据数据的密度在空间上自适应调整。

  • ...: 其他参数,用于传递给底层函数。

gwr.basic函数执行GWR模型估计,根据提供的参数和数据来生成GWR模型。你可以根据你的研究需求自定义这些参数,以获得符合你需求的GWR模型。一般来说,你可以查阅"GWmodel"包的文档以获取更详细的信息和示例代码,以更好地理解如何使用gwr.basic函数。这个函数通常用于拟合地理加权回归模型并生成模型的拟合结果和统计信息。

本文由mdnice多平台发布