空間相関があるかどうかを検定する【モランI統計量・ギアリC統計量・G統計量】

:::note note

この記事は、「Rではじめる地理空間データの統計解析入門」の第7章を読んで自分なりの理解を整理するために書いたものです。
間違った理解もあるかもしれませんので、正確な情報、詳しい説明は「[Rではじめる地理空間データの統計解析入門](https://www.kspub.co.jp/book/detail/5273036.html)」をお読みください。

:::




以前の記事では、エリア同士の近接関係を調べる方法を整理した。

https://qiita.com/nbayashi/items/b27007a42349b81f55ec

ここでは、その近接関係をもとに空間相関を評価する方法を整理する。


# 大域空間統計量
空間相関を評価する指標には、標本全体に対する空間相関の強さを評価する大域空間統計量（`GISA: Global Indicator of Spatial Association`）と、ゾーンごとの局所的な空間相関の強さを評価する局所空間統計量(`LISA: Local Indicator of Spatial Association`)がある。

以下で紹介するモランI統計量、ギアリC統計量、G統計量はGISAの評価で使用される。


# モランI統計量
−1 ~ 1の数値で示され、数値が正の時は、「自身のエリアの数値が高いと周辺も高い」のような正の空間相関、逆に、負の値の時は「自身のエリアの数値が高いと周辺も低い」といった負の空間相関。
1に近いほど正の空間相関が強く、−1に近いほど負の空間相関が強い。0はランダムな空間分布となる。
目安としては
- *I* = 0.90 ~ 1.00 : 極めて強い
- *I* = 0.75 ~ 0.90 : 強い
- *I* = 0.50 ~ 0.75 : 中程度
- *I* = 0.25 ~ 0.50 : 弱い
- *I* = 0.00 ~ 0.25 : 微弱

となるらしい。

モランI統計量を用いることで、空間相関の有無が検定できるらしい。



## RでモランI統計量を求める

### データの読み込み

```R
library(sf);library(spdep); 

hokkaido <- read_sf("hokkaido.shp")
st_crs(hokkaido) <- 6668
hokkaido <- st_transform(hokkaido,crs=6680)
```
今回は北海道の市町村別人口のデータを使用する。
データは[総務省統計局e-Stat](https://www.e-stat.go.jp/) 2020年国勢調査の境界データ、統計データを一部使用して使用。
自分でも試したいという人は、[書籍](https://www.kspub.co.jp/book/detail/5273036.html)の中ではNipponMapライブラリのサンプルデータを使って実践してますので、そちらをご参照ください。

SETAIというカラムに人口の値が入っている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61492/c62f8900-d661-4af7-bbbb-7a7d3954f8a6.png)



### モランI統計量を求める

```R
# 近接行列の作成
coords <- st_coordinates(st_centroid(hokkaido))
knn <- knearneigh(coords,4)
nb2 <- knn2nb(knn)
w <- nb2listw(nb2)

# モランI統計量
moran <- moran.test(hokkaido$JINKO, list=w)
```

結果は以下のようになる。
```R
> moran

	Moran I test under randomisation

data:  hokkaido$JINKO  
weights: w    

Moran I statistic standard deviate = 3.1783, p-value =
0.0007408
alternative hypothesis: greater
sample estimates:
Moran I statistic       Expectation          Variance 
     0.0533900522     -0.0056179775      0.0003446969 
```


この場合、p値は0.0007408 (p値≦0.001)で、有意な正の空間相関があることがわかる。
モランI統計量は0.0533900522ということなので、微弱の正の空間相関があるということになる。

なお、`moran.test`の引数`alternative`で検定の方法を変更できる。
- greater: 正の空間相関の片側検定（デフォルト）
- less: 負の空間相関の片側検定
- two.sided: 正または負の両側検定

JINKOをプロットするとこのようになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61492/911b7096-17d4-47a3-a2ed-e2c25125f72f.png)
札幌市を中心に人口が高くなっており、検定の結果とも合っていることが伺える。


# ギアリC統計量
もう一つの空間相関の統計量としてギアリC統計量というものもある。
これは0以上の値を取り、
- C<1の時に正の空間相関
- C=1の時にランダム
- C>1の時に負の空間相関を示す

その求め方は`geary.test`関数を用いる。

```R
geary <- geary.test(hokkaido$JINKO, list=w)
```


`moran.test`と同様、引数`alternative`で検定の種類を指定できる。
- greater: 正の空間相関の片側検定（デフォルト）
- less: 負の空間相関の片側検定
- two.sided: 正または負の両側検定


結果は以下のようになる。
```R
> geary

	Geary C test under randomisation

data:  hokkaido$JINKO 
weights: w   

Geary C statistic standard deviate = 1.7499, p-value =
0.04007
alternative hypothesis: Expectation greater than statistic
sample estimates:
Geary C statistic       Expectation          Variance 
       0.70254289        1.00000000        0.02889613 
```
p値は0.04007となり、5%水準で有意な正の空間相関があることになる。
ギアリC統計量は0.70254289であり、この数値からも正の空間相関があることがわかる。


# G統計量とG*統計量
- G統計量：人口や地価など非負の数値に対する統計量で、0以上の値を取り、0に近いほどランダム、数値が大きいほど大きな観測値が特定の地域に集中していることを指す。
- G統計量は自身のエリアを無視して計算され、G*統計量では自身のエリアを含んで近隣関係を考慮した統計量となる。
- 人口や犯罪などのホットスポットの検出などに用いられるらしい。



- G統計量、G*統計量の算出にはいずれも`globalG.test`関数を用いる。
- G統計量、G*統計量の算出には書籍にならい、行基準化なしの近接行列を用いる。
- 行基準化なしの近接行列は`nb2listw`関数のパラメータに`style = "B"`をつける（デフォルトの行基準化ありは`style = "W"`となっている。）

## G統計量を求める

```R
# 行基準化なしの近接行列を算出
w_b <- nb2listw(nb2,style="B")

G <- globalG.test(hokkaido$JINKO, list=w_b)
```

結果

```R
> G

	Getis-Ord global G statistic

data:  hokkaido$JINKO 
weights: w_b   

standard deviate = 2.6142, p-value = 0.004472
alternative hypothesis: greater
sample estimates:
Global G statistic        Expectation           Variance 
      0.0573933760       0.0224719101       0.0001784499 
```

## G*統計量を求める
G*統計量の算出は近接行列を生成する`nb2listw`の実行時に`include.self(nb)`として、近接行列の対角項（自分自身のエリアとの近接性）を1にする

```R
w_b2 <- nb2listw(include.self(nb2),style="B")
Gstar <- globalG.test(hokkaido$JINKO, list=w_b2)
```

結果
```R
> Gstar

	Getis-Ord global G statistic

data:  hokkaido$JINKO 
weights: w_b2   

standard deviate = 14.226, p-value < 2.2e-16
alternative hypothesis: greater
sample estimates:
Global G statistic        Expectation           Variance 
      0.2417473094       0.0280898876       0.0002255685 
```

G統計量とG*統計量の詳しい使い分けは理解できていませんが、今回の結果かでいうと、どちらのもp値<0.01で、有意に空間集積が存在していることになる。


# まとめ
空間相関の評価にはいろいろある。

| 統計量                  | 値の幅     | 値の意味                                 |コード                                 |
|-------------------------|------------|------------------------------------------|-----------------------------------------|
| モランI統計量           | -1 ~ 1     | 正の値：正の空間相関<br>0：ランダム<br>負の値：負の空間相関 |`moran.test(data, list)`                                 |
| ギアリC統計量           | 0以上の値  | 1未満：正の空間相関<br>1：ランダム<br>1以上：負の空間相関を示す |`geary.test(data, list)`                                    |
| G統計量<br>（G*統計量）     | 0以上の値  | 0に近いほどランダム<br>数値が大きいほど空間集積が存在する |`globalG.test(data, list)`                                 |