首页 > 编程知识 正文

北京语言大学地理位置,地理语言学

时间:2023-05-04 08:17:27 阅读:233639 作者:1443

今天需要做要给GWR回归,使用了R语言中的spgwr包。做的工作主要有;

1)安装R语言

直接去R官网就好。

2)安装spgwr包 > install.packages("spgwr")

发现报错

Warning in install.packages : 'lib = "C:/Program Files/R/R-4.0.3/library"' is not writableWarning in install.packages : cannot create dir 'D:onedrivePKUOneDrive - pku.edu.cn??', reason 'Invalid argument'Error in install.packages : unable to create ‘D:/onedrivePKU/OneDrive - pku.edu.cn/??/R/win-library/4.0’

或许是文件名的原因,为了省事,直接重新指向了一个新的置放R包的文件夹:

> .libPaths("E:/Rpackages")

问题得到解决,可以通过一下代码查看目前的R包:

> library()

以及查看当前R包所有的几个文件夹(系统默认的,和我刚刚指定的"E:/Rpackages"):

> .libPaths()

因为spgwr需要其他的环境,因此安装另外一个包,然后再install spgwr

> install.packages('spDataLarge')> install.packages("spgwr") 3)数据的载入与探索

首先,载入spgwr包

> library("spgwr")

其次,读取CSV文件(含XY坐标,以及需要进行GWR回归的自变量和因变量),给大家看一下我的数据样式吧,一个需要注意的地方就是数据一定都是数值,不能有字符串(反正我遇到了这样的报错,不知道是否有解决办法,但是最省事的方式:删掉字符串的那一列)

加载数据的代码如下:

> acc<-read.table(file="D:/GWRR/Poi_Acc_Result.csv",header=TRUE,sep=',')

在这里,我将该数据命名为acc。

可以进行简单的可视化,按照XY坐标映射一下(注意指定XY坐标的格式),对数据有个大体的认识:

> map=SpatialPointsDataFrame(data=acc, coords=cbind(acc$X,acc$Y))> spplot(map)

当然,也可以在spplot中自定义一些颜色参数。我这里就直接用了默认值。

在GWR之前,需要对数据进行检验,比如相关性等,今天只做了一个简单的尝试:

> plot(WindMill_Acc~School_Acc,data=map) # 绘制了两个变量之间的散点图> model1=lm(WindMill_Acc~School_Acc,data=map) # 构建线性回归方程> abline(model1,col='red') # 画出回归线> summary(model1) # 看一下回归后的数据

比如,我的结果是这样的:

Call:lm(formula = WindMill_Acc ~ School_Acc, data = map)Residuals: Min 1Q Median 3Q Max -1483638 -317718 117220 382794 1105836 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 1.413e+06 4.407e+04 32.06 <2e-16 ***School_Acc 3.679e-01 1.979e-02 18.59 <2e-16 ***---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 503600 on 542 degrees of freedomMultiple R-squared: 0.3893,Adjusted R-squared: 0.3882 F-statistic: 345.5 on 1 and 542 DF, p-value: < 2.2e-16

然后对残差的空间分布可视化:

> resids=residuals(model1)> subplot(map.resids)> map.resids=SpatialPointsDataFrame(data=data.frame(resids),coords=cbind(acc$X,acc$Y))> spplot(map.resids)> View(map) 4)进行GWR回归

接下来的任务就很简单了,就俩:计算带宽,然后GWR回归

> bw=gwr.sel(WindMill_acc~Police_acc,data=map,adapt=T)> gwe.model=gwr(WindMill_Acc~Police_Acc,data=map,adapt=bw,hatmatrix=TRUE,se.fit=TRUE)

然后看一下回归结果:

> gwe.model

我的结果如下:

Call:gwr(formula = WindMill_Acc ~ Police_Acc, data = map, adapt = bw)Kernel function: gwr.Gauss Adaptive quantile: 0.007102629 (about 3 of 544 data points)Summary of GWR coefficient estimates at data points: Min. 1st Qu. Median 3rd Qu. Max. GlobalX.Intercept. -1.2469e+06 -1.2662e+04 2.7146e+05 7.0544e+05 2.6298e+06 1.4123e+06Police_Acc -8.7869e-01 7.7288e-01 1.0090e+00 1.3356e+00 1.9961e+00 3.6920e-01 5)结果的导出 > results <-as.data.frame(gwe.model$SDF)> write.csv(x=results,file="D:/GWRR/data.csv")

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。