前言

GWR4其实是一个非常专业的软件,功能非常强大,无奈bug实在是太多了,通常是在数据量大(大于1w条记录)的时候会出现。所以我不得不求助于R语言。

准备工作

1. 安装R Studio

2. 安装spgwr的包

install.packages("spgwr")

3. 引入spgwr包

library(spgwr)

读取CSV数据

这里我使用的就是之前在GWR4软件中运行的数据

guangzhousufang<-read.table(file="/Users/xxx/xxx/xxx/xxx.csv", header = TRUE, sep=',')

read.table其实是读取csv最好的函数。第一个参数为文件路径,header参数是数据的第一行(列名),sep参数是数据的分隔符。函数的返回结果是data.frame。

还有一个函数read.csv也可以读取csv,但是它其实是封装了read.table。

如果csv文件巨大,想要提升读取速度,可使用read_delim

ps.如果需要读取shp格式的数据并运算,可移步这一教程: https://www.zhihu.com/question/304853593/answer/551289317

计算带宽

bw<-gwr.sel(rent~area+subway+pSchool+mSchool+university+hospital, data=guangzhousufang, coords=cbind(x=guangzhousufang$lon, y=guangzhousufang$lat), gweight = gwr.Gauss, verbose = TRUE, method = "aic")

调用gwr.sel函数来计算带宽。

第一个参数中指定了因变量(rent)与自变量(area subway pSchool mSchool university hospital)

第二个参数指定了数据(上一步中读入的数据)

第三个参数指定了坐标(lon和lat为数据中自定义的列名):注意⚠️ x对应经度,y对应纬度

第四个参数(gweight)指定了空间权重函数(代码中使用的gauss函数)

第五个参数(verbose)控制是否汇打印计算带宽的过程

r语言 骨外科 gwas r语言_变量名

第六个参数(method)指定带宽的计算方法(代码中使用的aic)

ps. 如果搞不懂GWR模型的原理,不知道参数值之前的区别,推荐大虾卢的博客与苏世亮老师编写的《空间数据分析》

计算GWR模型

gwr_result <- gwr(rent~area+subway+pSchool+mSchool+university+hospital,coords=cbind(x=guangzhousufang$lon, y=guangzhousufang$lat), data = guangzhousufang, bandwidth = bw, gweight = gwr.Gauss, hatmatrix = TRUE)

函数运行完之后,输入变量名(在我的程序中是gwr_result)查看结果:

r语言 骨外科 gwas r语言_r语言 骨外科_02

此时我发现了一个很严重的问题:在spgwr包中,衡量模型拟合度的参数名为“Quasi-global R2",中文直译过来是“近似全局R2”。我查看了一下源码,在源码中Quasi-global R2的计算方法是:1 - rss/gTSS。rss是residual sum of squares(残差平方和,

),但是gTSS是指什么我并没有在源码中找到,或许就是

吧。

除了上图之外,还有一些计算出的参数可以通过“变量名”+“$”+"参数名"的方法查看,例如:

r语言 骨外科 gwas r语言_拟合_03

更多关于参数的信息可参考官方文档https://rdrr.io/cran/spgwr/man/gwr.html

总结

spgwr总体上使用起来比较简单,运算时比较稳定,结果也没什么bug(不像GWR4有时算出来的结果中R2比Adjusted R2还小零点几,呕),但是比起GWR4,它缺少了与全局回归进行比较的部分(还要自己重新跑一遍多元线性回归),并且衡量模型拟合度的时候用了一个非主流的参数“Quasi-global R2”(至少我没有在网上查到关于这个参数的定义,如果有人了解这个参数欢迎交流),所以也不是十分完美。

如果你不是十分享受写代码的过程,那我其实我更建议对数据进行随机抽样,在减小了数据量之后用GWR4进行运算。

如果你热爱coding,那么可以把目光转向另一个包:GWmodel。GWmodel比起spgwr更加稳定,并且构建GWR模型时运算速度要更快。我先放上运算出来的结果:

r语言 骨外科 gwas r语言_变量名_04

r语言 骨外科 gwas r语言_r语言 骨外科_05

r语言 骨外科 gwas r语言_数据_06

预知详细操作,且听下回分解。