基于R软件一个实际例子,实现空间回归模型以及包括检验和模型选择(数据集不要加州的,附代码和详细步骤,以及数据)
时间: 2024-06-11 16:11:21 浏览: 219
本文将使用R软件和Boston房价数据集来实现空间回归模型,并进行检验和模型选择。
数据集介绍:
Boston房价数据集是一个观测500个社区的房屋价格和其他16个变量的数据集。每个社区的数据包含了包括犯罪率、房产税率、学生-老师比例等特征,以及该社区的房价中位数。该数据集可用于探索房价与其他变量之间的关系,以及预测一个新社区的房价中位数。
数据集下载链接:https://archive.ics.uci.edu/ml/datasets/Housing
1. 导入数据集和必要的包
```r
library(spdep) # 空间依赖性包
library(ggplot2) # 可视化包
library(MASS) # 回归分析包
library(car) # 回归分析包
library(nlme) # 固定和随机效应模型包
library(tidyverse) # 数据操作和可视化包
data(Boston)
```
2. 数据预处理
```r
# 查看数据集前6行
head(Boston)
# 房价中位数为目标变量,将其提出来
medv <- Boston$medv
# 去除无用的变量
Boston <- Boston[, -c(1, 14)]
# 标准化数据集
Boston_std <- as.data.frame(scale(Boston))
# 添加坐标变量
coordinates(Boston_std) <- Boston_std[, c("lon", "lat")]
# 设置投影坐标系
proj4string(Boston_std) <- CRS("+proj=longlat +datum=WGS84")
# 生成邻居矩阵
nb <- dnearneigh(coordinates(Boston_std), d1 = 0, d2 = 1)
# 查看邻居矩阵
nb
```
3. 空间回归模型
```r
# 利用固定效应模型建立空间回归模型
fm1 <- lme(medv ~ crim + zn + indus + chas + nox + rm + age + dis + rad + tax + ptratio + black + lstat, random = ~ 1 | Id, data = Boston_std, method = "ML")
# 利用随机效应模型建立空间回归模型
fm2 <- lme(medv ~ crim + zn + indus + chas + nox + rm + age + dis + rad + tax + ptratio + black + lstat, random = ~ 1 | Id, data = Boston_std, method = "ML", correlation = corSpher(form = ~ lon + lat))
# 利用空间滞后模型建立空间回归模型
W <- nb2listw(nb)
fm3 <- spml(medv ~ crim + zn + indus + chas + nox + rm + age + dis + rad + tax + ptratio + black + lstat, data = Boston_std, listw = W, method = "ML")
# 利用空间误差模型建立空间回归模型
fm4 <- spautolm(medv ~ crim + zn + indus + chas + nox + rm + age + dis + rad + tax + ptratio + black + lstat, data = Boston_std, listw = W, method = "ML")
# 利用空间Durbin模型建立空间回归模型
fm5 <- spdurbin(medv ~ crim + zn + indus + chas + nox + rm + age + dis + rad + tax + ptratio + black + lstat, data = Boston_std, listw = W, method = "ML")
# 利用空间滑动窗口模型建立空间回归模型
fm6 <- spGWR(medv ~ crim + zn + indus + chas + nox + rm + age + dis + rad + tax + ptratio + black + lstat, data = Boston_std, listw = W, kernel = "bisquare")
```
4. 模型检验和模型选择
```r
# 查看模型的AIC和BIC值
AIC(fm1, fm2, fm3, fm4, fm5, fm6)
BIC(fm1, fm2, fm3, fm4, fm5, fm6)
# 利用简单线性回归模型建立基准模型
fm0 <- lm(medv ~ 1, data = Boston_std)
# 模型对比
anova(fm0, fm1, fm2, fm3, fm4, fm5, fm6)
# 查看模型的残差分布
autoplot(residuals(fm1), ylab = "Residuals")
# 查看模型的残差空间分布
spplot(resid(fm1) ~ 1, data = Boston_std, sp.layout = list("sp.points", coordinates(Boston_std), cex = 0.5, pch = 19))
# 查看模型的诊断图
plot(fm1, which = c(1, 2, 3, 4, 5, 6))
```