Spatial autocorrelation

空间自相关是空间统计学中的一个重要概念。它允许空间插值;但它使统计测试复杂化。其计算和属性经常被误解。 自相关(无论空间还是不空间)是附近观测之间的相似度(相关性)的度量。

  • 莫兰指数
  • 蒙特卡罗模拟

自相关

时间自相关

如果你随着时间的推移衡量关于同一个对象的一些特征,例如一个人的重量或财富,那么在时间上彼此接近的两个观察值很可能是相似的。
例如,您的体重从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图

1
acf(d)

多阶滞后自相关图

Figure20-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.计算yi
yj

  • 方法二
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
pmw <- pm * wm
pmw

求和

1
2
spmw <- sum(pmw) 
spmw

除以权重和

1
2
smw <- sum(wm)
sw <- spmw / smw

计算y的逆方差

1
vr <- n / sum(dy^2)

莫兰指数结果

1
2
MI <- vr * sw
MI

这是估计莫兰指数期望的简单方法,即不存在空间自相关时(数据时空间随机的)的莫兰指数。

莫兰函数计算

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所示:

Figure21-Moran Plot
-------------文章结束啦 ฅ●ω●ฅ 感谢您的阅读-------------