# Week 7 Nearest Neighbor Analysis > Outline: > Analyizing global patterns > Nearest Neighbor Analysis(NNA) > 1. R-scale > 2. 顯著性檢定 > * 跟理論分布比較 > * 蒙地卡羅顯著性檢定 > 3. K-order NNA > G(d) function > ## Analyzing global patterns * First-order property (intensity 強度) **某一點**event發生的頻率、平均次數 * Second-order property (dependency 相依性) paired event 在**兩點之間**的關係、特性 ## NNA 計算每個點距離他最近點(nearest point)的平均距離(average distance) 與隨機分布下的平均距離比較 大於隨機分布的平均距離 ---> Dispersed (Uniform) 小於隨機分布的平均距離 ---> Clustered ### R-scale 觀察值與理論隨機值的比值: $R=\frac{r_{obs}}{r_{exp}}$ ![](https://i.imgur.com/pbBNJ0Y.png) * Generate random points by an<a style="color:red"> indepentdent random process (IRP), also called complete spatial randomness (CSR)</a> * 依照IRP/CSR產生的隨機點符合兩個條件: 1. 每個事件點出現在任何一個位置上都有相同的機率 2. 一個點的出現不會影響另一個點出現的機率 ![](https://i.imgur.com/7Mhn5Nv.png) ### Significance test of NNA 1. 與理論隨機值比較 $$Z=\frac{r_{obs}-r_{exp}}{s.e.},\ r_{exp}=\frac{0.5}{\sqrt{\frac{n}{A}}}; \ s.e.=\frac{0.26136}{\sqrt{\frac{n^2}{A}}}$$ 給定信心水準進行假設檢定,計算觀察值的Z-score 以95%的信心水準進行雙尾假設檢定, H_0: 點分布型態是隨機分布 H_a: 點分布型態不是隨機分布 當$|Z|>1.96$,則統計上顯著,推翻虛無假設 2. 蒙地卡羅顯著性檢定 模擬隨機分布點,做出信賴包絡(confidence envelopes),取出前後第5%的值比較 ![](https://i.imgur.com/Er7TRKe.png) ### K-order NNA 若只看第一鄰近的點位,就忽視了現實中的實際分布 為了能保有現實中的分布情形,因此使用K-order取出鄰近次序上的點比較 ![](https://i.imgur.com/eFKXpHr.png) R 實作: 利用 nndist() nndist(ppp格式的點資料, k=1)--->回傳第一鄰近的平均距離 ## G(d) function 學者認為取完平均之後會淡化點與其他點之間的距離分布,因此設計G(d) function試圖解決 核心概念:距離小於d的點有多少% 因此畫出來的圖表會是CDF ### G function的解讀 1. 若一地的點分布是密集的,那麼在短距離內就會上升很快 2. 若點分布是分散的,那圖形在短距離時會緩慢上升,到最後會快速爬升 R 實作 G(d): ecdf(nnd) ### G(d)的顯著性檢定 1. 模擬出隨機點分布並計算這些隨機點的G function 2. 重複模擬很多次,會得到很多條的G function 3. 利用多次模擬結果的信賴包絡去跟觀察值比較 ## 實習 以台南市行政區為邊界檢定台南市學校的空間型態分布 ```r= library(sp) library(rgdal) library(spatstat) library(maptools) library(GISTools) setwd("C:/Users/user/Desktop/SpatialAnalysis") School <- readOGR(dsn = "./data", layer = "Schools", encoding="utf8") TWCounty <- readOGR(dsn = "./data", layer = "Taiwan_county", encoding="utf8") ``` 學校點座標處理: ```r=+ bnd = bbox(School) x.coor = School$coords.x1 y.coor = School$coords.x2 x.range = bnd[1,] y.range = bnd[2,] ``` 取得台南市邊界: ```r=+ index = TWCounty$COUNTY=="台南市" TN_BND = TWCounty[index,] # 加寬500公尺 TN = gBuffer(TN_BND, width = 500) area = poly.areas(TN) ``` 格式轉換:ppp ```r=+ TN_BND2 = as.owin.SpatialPolygons(TN) school.ppp = ppp(x.coor, y.coor, window = TN_BND2) ``` ### NNA ```r=+ nnd = nndist(school.ppp2, k=1) d1 = mean(nnd);d1 # 觀察值 rd = 0.5/sqrt(424/area) r.scale = d1/rd ``` 模擬1000次 ```r=+ nn2 = c() for (i in 1:1000) { rp = rpoint(424, win = PTS_bnd) nn2[i] = mean(nndist(rp, k=1)) } ``` 出圖 ```r=+ hist(nn2, xlim=c(900,1500), main = "NNA", xlab = "平均距離") abline(v=d1, lwd=4, col='red') ``` ![](https://i.imgur.com/91q1ALO.png) ### K-order ```r= # 觀察值 ANN = apply(nndist(school.ppp2,k =1:50),2, FUN=mean) ## 模擬1000次 df = data.frame(ANN) for (i in 1:1000) { rp = rpoint(424, win=PTS_bnd) df[,i+1] = apply(nndist(rp, k=1:50),2,FUN=mean) } df = t(df) for (i in 1:50) { df[,i] = sort(df[,i]) } plot(df[501,], type="l", xlab="K-order nearest", main="K-order NN", col='blue') lines(df[51,], col='black') lines(df[951,], col='black') lines(ANN,col='red') ``` ![](https://i.imgur.com/VCMIwJC.png) ### G function ```r= G = ecdf(nnd) plot(G, main = "G function", col='red', cex=0, verticals=T, xaxs="i", yaxs="i") for(i in 1:1000){ nnd.sim = nndist(rpoint(424, win=PTS_bnd), k=1) G1 = ecdf(nnd.sim) lines(G1, col='blue',cex=0, verticals=T, xaxs="i", yaxs="i") } ``` ![](https://i.imgur.com/uTYTNsK.png)