R语言可以做的,用Moran's I
在R的ape包,有关于Moran's I的详细的说明。
##################
library(spdep)
## 为了检验ntaxa是否具有空间自相关
setwd("C:/one/")
test0 <- read.csv("test.csv", header = TRUE, row.names = 1)
ntaxa <- test0$ntaxa
## 将test数据集转换成Spatial格式
test <- test0[,c(1,2)]
sptest <- SpatialPoints(test, proj4string = CRS("+proj=longlat +datum=WGS84"))
## 计算每个点最近的几个neighbour(这里k = 1,表示只计算一个的)
nbk1 <- knn2nb(knearneigh(sptest, k = 5, longlat = TRUE))
## 将nbk1转换成 spatial weight linkage object 对象
snbk1 <- make.sym.nb(nbk1)
### n.comp.nb() finds the number of disjoint connected subgraphs
### in the graph depicted by nb.obj - a spatial neighbours list object.
### 查看每个点不相接的相邻点数量
n.comp.nb(snbk1)$nc
### 查看各点链接情况
plot(nb2listw(snbk1), cbind(test$longitude, test$latitude))
### Moran's Test检验该数据集是否存在显著的空间自相关
### Moran's I test under randomisation
moran.test(ntaxa, nb2listw(snbk1))
### Moran's I Correlograms
### par(mfrow = c(1, 3))
ntaxa.Moron.I <- sp.correlogram(snbk1, ntaxa, order=6, method="I", zero.policy = TRUE)
plot(ntaxa.Moron.I)
### SAR model
### Saddlepoint approximation for global Moran's I (Barndorff-Nielsen formula)
lm.morantest.sad(lm(ntaxa~1),nb2listw(snbk1))
## sacsarlm
COL.sacW.eig <- sacsarlm(ntaxa ~ Pre + Elev + factor(Time) + factor(Geology), data = test0, nb2listw(snbk1, style="W"))
summary(COL.sacW.eig, correlation=TRUE)
|