空间自相关是空间统计学中的一个重要概念。它允许空间插值;但它使统计测试复杂化。其计算和属性经常被误解。 自相关(无论空间还是不空间)是附近观测之间的相似度(相关性)的度量。
自相关
时间自相关
如果你随着时间的推移衡量关于同一个对象的一些特征,例如一个人的重量或财富,那么在时间上彼此接近的两个观察值很可能是相似的。
例如,您的体重从50公斤增加到80公斤。不太可能某天是60公斤,下一天50公斤,之后变成80公斤。相反,它可能逐渐上升,偶尔逐渐减弱,甚至反向。
您的银行帐户也是如此,但也可能有明显的每月趋势。为了测量随时间变化的关联程度,我们可以计算每次观察与下一次观察的相关性。
创建样本观察值
1 2 3
| set.seed(0) d <- sample(100, 10) d
|
1.set.seed设置随机种子
2.sample(100, 10):从1到100中不放回地随机抽取10个数。
初步自相关
1 2 3 4
| a <- d[-length(d)] b <- d[-1] plot(a, b, xlab='t', ylab='t-1') cor(a, b)
|
d[-length(d)]舍去最后一个元素
d[-1]舍去第一个元素
排序自相关
1 2 3 4 5 6
| d <- sort(d) d a <- d[-length(d)] b <- d[-1] plot(a, b, xlab='t', ylab='t-1') cor(a, b)
|
sort:排序函数
acf图
多阶滞后自相关图
空间自相关
空间自相关的概念是时间自相关的延伸。时间是一维的,只有朝着一个方向前进。空间对象具有(至少)二维和复杂形状,并且可能不明确如何确定什么是“近”。
空间自相关的度量描述了观察值彼此空间位置(无论是点,区域还是栅格单元)的相似程度。 所以我们需要两件事情:观察和位置。
变量中的空间自相关可以是外生的(其由另一空间自相关变量,例如降雨引起)或内生(由内部过程引起,例如疾病的传播)。
描述空间自相关的常用统计量是莫兰指数,我们将在后面详细讨论。 其他统计量包括包括Geary’s C,对于二进制数据,连接计数索引(join-count index)。半变差函数(semi-variogram)也表示数据集中的空间自相关量(参见插值一章)。
读取数据
1 2 3 4 5
| library(raster) p <- shapefile(system.file("external/lux.shp", package="raster")) p <- p[p$NAME_1=="Diekirch", ] p$value <- c(10, 6, 4, 11, 6) data.frame(p)
|
2.system.file:获取已注册安装包中的数据文件路径,本地文件夹不用此步。
2.shapefile:raster包中读取矢量数据的函数,也可以用readOGR
5.查看数据属性表
绘图
1 2 3 4 5 6
| par(mai=c(0,0,0,0)) # par(mai=c(1.02,0.82,0.82,0.42)) plot(p, col=2:6) xy <- coordinates(p) points(xy, cex=6, pch=20, col='white') text(p, 'ID_2', cex=1.5)
|
1.mai:图边距 c(bottom, left, top, right)
3.col=2:6,颜色2-6
4-5.coordinates(p):求p的质心位置
5.points()画点
6.text():添加文本
相邻多边形
计算邻接
1 2 3 4 5
| library(spdep) w <- poly2nb(p, row.names=p$Id) class(w) summary(w) str(w)
|
2.poly2nb:根据连续边界的区域构建邻居列表
3.邻居列表的类别: nb
4-5.查看邻接结构
绘制邻接
1 2
| plot(p, col='gray', border='blue', lwd=2) plot(w, xy, col='red', lwd=2, add=TRUE)
|
6.绘制底图
7.在图上画出邻接
空间权重矩阵
空间权重矩阵反映观测值之间的地理关系的强度。
1 2
| wm <- nb2mat(w, style='B') wm
|
nb2mat:将邻居列表w转换为二进制矩阵
莫兰指数
不仅是相关系数的扩展版本,重要的是增加了空间权重矩阵。
手动计算
计算n yi yabr
1 2 3
| n <- length(p) y <- p$value ybar <- mean(y)
|
计算(yi-ybar)*(yj-ybar)
1 2 3
| dy <- y - ybar g <- expand.grid(dy, dy) yiyj <- g[,1] * g[,2]
|
1.计算差值
2.生成nrow(dy)nrow(dy)行,两列。第一列,dy个dy;第二列dy个dy[1],y个dy[2],…
3.计算yiyj
1 2 3 4 5 6
| rep(1:4, 2) rep(1:4, each = 2) # not the same. rep(1:4, c(2,2,2,2)) # same as second. yi <- rep(dy, each=n) yj <- rep(dy) yiyj <- yi * yj
|
1.rep(1:4, 2) 1 2 3 4 1 2 3 4
2.rep(1:4, each = 2) 1 1 2 2 3 3 4 4
3.rep(1:4, c(2,2,2,2)) 1 1 2 2 3 3 4 4
建立矩阵’yiyj’
1
| pm <- matrix(yiyj, ncol=n)
|
计算wij * (yi-ybar)*(yj-ybar)
求和
除以权重和
1 2
| smw <- sum(wm) sw <- spmw / smw
|
计算y的逆方差
莫兰指数结果
这是估计莫兰指数期望的简单方法,即不存在空间自相关时(数据时空间随机的)的莫兰指数。
莫兰函数计算
1 2 3
| ww <- nb2listw(w, style='B') ww moran(p$value, ww, n=length(ww$neighbours), S0=Szero(ww))
|
1.nb2listw:向邻居列表中增加一个权重列表. style=’B’代表二进制.
3.第一个参数:数据;第二个参数:权重;第三个参数:区域数量;第四个参数:Szero(ww)全局权重总和:权重不为1的个数。
莫兰检验
基于线性回归的逻辑和假定
1
| moran.test(p$value, ww, randomisation=FALSE)
|
参数: 数据 权重 随机假设:FALSE
蒙特卡罗模拟
1 2 3
| moran.mc(p$value, ww, nsim=99) rwm <- mat2listw(wm, style='W') moran.plot(y, rwm)
|
模拟次数为99
style=’W’: 行标准化
绘图,如图21所示: