Multiscale GWR 模型

本文主要介绍函数 gwr_multiscale() 的用法。

基本用法

我们以示例数据 LondonHP 为例,展示函数 gwr_multiscale() 的用法。 假设我们以 PURCHASE 为因变量,FLOORSZ, PROFUNEMPLOY 为自变量,可以使用下面的方式构建多尺度 GWR 模型。

data(LondonHP)
m1 <- gwr_multiscale(
 formula = PURCHASE ~ FLOORSZ + UNEMPLOY + PROF,
 data = LondonHP
)
m1
Multiscale Geographically Weighted Regression Model
===================================================
  Formula: PURCHASE ~ FLOORSZ + UNEMPLOY + PROF
     Data: LondonHP


Parameter-specified Weighting Configuration
-------------------------------------------
                 bw   unit type   kernel longlat p theta optim_bw criterion
Intercept  3758.992 Meters Null gaussian   FALSE 2     0     TRUE       AIC
FLOORSZ    1684.743 Meters Null gaussian   FALSE 2     0     TRUE       AIC
UNEMPLOY  45226.177 Meters Null gaussian   FALSE 2     0     TRUE       AIC
PROF      13000.959 Meters Null gaussian   FALSE 2     0     TRUE       AIC
             threshold centered
Intercept 1.000000e-05    FALSE
FLOORSZ   1.000000e-05     TRUE
UNEMPLOY  1.000000e-05     TRUE
PROF      1.000000e-05     TRUE


Summary of Coefficient Estimates
--------------------------------
 Coefficient        Min.     1st Qu.      Median     3rd Qu.        Max. 
   Intercept  125497.191  132762.279  150831.667  168818.165  190110.170 
     FLOORSZ    -184.067     997.289    1506.309    1970.043    3027.671 
    UNEMPLOY  310326.670  315433.209  318711.539  320575.312  325930.524 
        PROF  222076.169  236767.029  248433.345  258565.543  274402.517 


Diagnostic Information
----------------------
  RSS: 230041770180
  ENP: 69.67341
  EDF: 246.3266
   R2: 0.8715428
R2adj: 0.8350606
 AICc: 7486.598

这里展示的是在不进一步设置变量的情况下调用函数,函数默认以如下配置设置算法

  • 无初始带宽
  • 非可变带宽
  • 高斯核函数
  • 非地理坐标系
  • 欧氏距离度量
  • 中心化非截距变量
  • 根据 AIC 值优选带宽
  • 带宽优选收敛阈值为 \(10^{-5}\)

大多数情况下,这样设置可以保证算法能够运行。如需进一步定制参数,请参考加权配置

该函数返回一个 gwrmultiscalem 的对象,通过控制台输出信息,我们可以得到 调用的表达式、数据、带宽、核函数、系数估计值的统计、诊断信息。 同样,也支持使用 coef() fitted() residuals() 等函数获取信息。

head(coef(m1))
  Intercept   FLOORSZ UNEMPLOY     PROF
0  136571.4 1125.6123 317951.9 222076.2
1  136399.8 1088.7621 317908.4 222413.4
2  134523.3 1198.3076 318342.1 223189.3
3  134101.9 1167.6316 318365.7 223632.4
4  135117.1 1070.7761 318056.3 223445.3
5  136170.9  972.5949 317036.1 223865.2
head(fitted(m1))
[1] 340891.9 335865.2 329410.1 363434.9 367997.6 347934.2
head(residuals(m1))
[1] -183891.9 -222365.2 -247660.1 -213434.9 -177997.6 -187984.2

此外,与旧版 GWmodel 包类似,gwrmultiscalem 对象中提供了一个 $SDF 变量保存了系数估计值等一系列局部结果。

head(m1$SDF)
Simple feature collection with 6 features and 6 fields
Geometry type: POINT
Dimension:     XY
Bounding box:  xmin: 531900 ymin: 159400 xmax: 535700 ymax: 161700
CRS:           NA
  Intercept   FLOORSZ UNEMPLOY     PROF     yhat  residual
0  136571.4 1125.6123 317951.9 222076.2 340891.9 -183891.9
1  136399.8 1088.7621 317908.4 222413.4 335865.2 -222365.2
2  134523.3 1198.3076 318342.1 223189.3 329410.1 -247660.1
3  134101.9 1167.6316 318365.7 223632.4 363434.9 -213434.9
4  135117.1 1070.7761 318056.3 223445.3 367997.6 -177997.6
5  136170.9  972.5949 317036.1 223865.2 347934.2 -187984.2
               geometry
0 POINT (533200 159400)
1 POINT (533300 159700)
2 POINT (532000 159800)
3 POINT (531900 160100)
4 POINT (532800 160300)
5 POINT (535700 161700)

使用该变量,可以进行专题制图。除此之外,改包还提供了一个 plot() 函数,通过输入 gwrmultiscalem 对象,可以快速查看回归系数。

plot(m1)

plot(m1, columns = c("FLOORSZ", "UNEMPLOY"))

如果指定了 columns 参数,则仅绘制第二个参数列出的系数,否则绘制所有回归系数。

加权配置

多尺度加权配置选项

包中定义了一个 MGWRConfig 的 S4 类型,用于提供多尺度加权配置的设置。 该类型的对象包含以下几个成员:

名称 类型 说明
bw Numeric 带宽值。
adaptive Logical 是否为可变带宽。
kernel Character 核函数名称。
longlat Logical 是否为经纬度坐标。
p Numeric Minkowski 距离次数。
theta Numeric Minkowski 距离旋转角度。
centered Logical 是否中心化变量。
optim_bw Character 是否优选带宽以及带宽优选指标。如果值是 "no" 则不再进行带宽优选。否则根据指定的指标值进行优选。
optim_threshold numeric 带宽优选阈值。

使用函数 mgwr_config() 可以直接构造一个对象。

mgwr_config(36, TRUE, "bisquare", optim_bw = "AIC")
An object of class "MGWRConfig"
Slot "bw":
[1] 36

Slot "adaptive":
[1] TRUE

Slot "kernel":
[1] "bisquare"

Slot "longlat":
[1] FALSE

Slot "p":
[1] 2

Slot "theta":
[1] 0

Slot "centered":
[1] TRUE

Slot "optim_bw":
[1] "AIC"

Slot "optim_threshold":
[1] 1e-05

该类型的对象也支持使用 rep() 函数复制,但支持持 times 参数。

rep(mgwr_config(36, TRUE, "bisquare", optim_bw = "AIC"), 2)
[[1]]
An object of class "MGWRConfig"
Slot "bw":
[1] 36

Slot "adaptive":
[1] TRUE

Slot "kernel":
[1] "bisquare"

Slot "longlat":
[1] FALSE

Slot "p":
[1] 2

Slot "theta":
[1] 0

Slot "centered":
[1] TRUE

Slot "optim_bw":
[1] "AIC"

Slot "optim_threshold":
[1] 1e-05


[[2]]
An object of class "MGWRConfig"
Slot "bw":
[1] 36

Slot "adaptive":
[1] TRUE

Slot "kernel":
[1] "bisquare"

Slot "longlat":
[1] FALSE

Slot "p":
[1] 2

Slot "theta":
[1] 0

Slot "centered":
[1] TRUE

Slot "optim_bw":
[1] "AIC"

Slot "optim_threshold":
[1] 1e-05

使用 MGWRConfig 进行参数配置

函数 gwr_multiscale() 既可以统一设置加权配置项,也可以分别设置加权配置项。

统一设置

如果要给所有变量统一设置加权配置项,可以传入只包含一个 MGWRConfig 类型对象的列表。 例如,将所有变量的带宽类型设置为可变带宽,核函数设置为 Bi-square 核函数。

m2 <- gwr_multiscale(
 formula = PURCHASE ~ FLOORSZ + UNEMPLOY + PROF,
 data = LondonHP,
 config = list(mgwr_config(adaptive = TRUE, kernel = "bisquare"))
)
m2
Multiscale Geographically Weighted Regression Model
===================================================
  Formula: PURCHASE ~ FLOORSZ + UNEMPLOY + PROF
     Data: LondonHP


Parameter-specified Weighting Configuration
-------------------------------------------
           bw unit type   kernel longlat p theta optim_bw criterion
Intercept  92   NN Null bisquare   FALSE 2     0     TRUE       AIC
FLOORSZ    19   NN Null bisquare   FALSE 2     0     TRUE       AIC
UNEMPLOY   51   NN Null bisquare   FALSE 2     0     TRUE       AIC
PROF      157   NN Null bisquare   FALSE 2     0     TRUE       AIC
             threshold centered
Intercept 1.000000e-05    FALSE
FLOORSZ   1.000000e-05     TRUE
UNEMPLOY  1.000000e-05     TRUE
PROF      1.000000e-05     TRUE


Summary of Coefficient Estimates
--------------------------------
 Coefficient         Min.     1st Qu.      Median     3rd Qu.         Max. 
   Intercept   128027.588  134315.206  147425.383  168778.168   185788.635 
     FLOORSZ      -71.171     999.976    1480.660    1938.071     3736.606 
    UNEMPLOY  -537304.673  108123.294  611883.562  902220.559  2303154.999 
        PROF   163822.997  221234.648  246805.452  300170.581   348794.459 


Diagnostic Information
----------------------
  RSS: 221062803902
  ENP: 68.95713
  EDF: 247.0429
   R2: 0.8765567
R2adj: 0.8419599
 AICc: 7474.897

由于 centered 选项默认为 TRUE,因此函数在运行时, 会自动将截距对应的加权配置项中的 centered 变量设置为 FALSE 以避免可能存在的问题。

同样的,也可以使用 rep 函数,但是要确保传入正确的 times 变量的值。

m2 <- gwr_multiscale(
 formula = PURCHASE ~ FLOORSZ + UNEMPLOY + PROF,
 data = LondonHP,
 config = rep(mgwr_config(adaptive = TRUE, kernel = "bisquare"), times = 4)
)

分别设置

如果分别设置加权配置项,则需要传入包含与自变量(如果有截距也包括截距)相同数量的 MGWRConfig 对象的列表。

m3 <- gwr_multiscale(
 formula = PURCHASE ~ FLOORSZ + UNEMPLOY + PROF,
 data = LondonHP,
 config = list(mgwr_config(bw = 92, adaptive = TRUE, kernel = "bisquare"),
               mgwr_config(bw = 19, adaptive = TRUE, kernel = "bisquare"),
               mgwr_config(bw = 51, adaptive = TRUE, kernel = "bisquare"),
               mgwr_config(bw = 157, adaptive = TRUE, kernel = "bisquare"))
)
m3
Multiscale Geographically Weighted Regression Model
===================================================
  Formula: PURCHASE ~ FLOORSZ + UNEMPLOY + PROF
     Data: LondonHP


Parameter-specified Weighting Configuration
-------------------------------------------
           bw unit    type   kernel longlat p theta optim_bw criterion
Intercept  92   NN Initial bisquare   FALSE 2     0     TRUE       AIC
FLOORSZ    19   NN Initial bisquare   FALSE 2     0     TRUE       AIC
UNEMPLOY   51   NN Initial bisquare   FALSE 2     0     TRUE       AIC
PROF      157   NN Initial bisquare   FALSE 2     0     TRUE       AIC
             threshold centered
Intercept 1.000000e-05    FALSE
FLOORSZ   1.000000e-05     TRUE
UNEMPLOY  1.000000e-05     TRUE
PROF      1.000000e-05     TRUE


Summary of Coefficient Estimates
--------------------------------
 Coefficient         Min.     1st Qu.      Median     3rd Qu.         Max. 
   Intercept   128027.588  134315.206  147425.383  168778.168   185788.635 
     FLOORSZ      -71.171     999.976    1480.660    1938.071     3736.606 
    UNEMPLOY  -537304.673  108123.294  611883.562  902220.559  2303154.999 
        PROF   163822.997  221234.648  246805.452  300170.581   348794.459 


Diagnostic Information
----------------------
  RSS: 221062803902
  ENP: 68.95713
  EDF: 247.0429
   R2: 0.8765567
R2adj: 0.8419599
 AICc: 7474.897

这样就可以通过使用 c() rep() 等函数的组合灵活设置每个变量的配置项。