前回の記事「投票率と高齢化率の関係をsfパッケージで可視化する」では、投票率と高齢化率の相関をsfパッケージを利用して可視化しました。今回は空間データの統計解析では避けて通れない「空間的自己相関」の分析を行います。
データと空間配置に相関があるか
「空間的自己相関」という字面だけだとなんのことかさっぱり想像がつかないのですが、今回のケースで言うと、「投票率に地域性があるか」を分析することになります。つまり、投票率と投票所間の距離に相関があるかどうかを分析します。
spdepパッケージを使う
spdepパッケージが今回の目玉機能になります。空間統計の定番パッケージだそうです。
## パッケージの読み込み
library(tidyverse)
library(sf)
library(spdep) #空間自己相関分析を行うパッケージ
続いて使用するデータを読み込みます。
# 投票率データ
touhyou<-read.csv("senkyo/senkyo2019.csv")
# 投票所座標データ(shp)
touhyou_p<-st_read(dsn="tohyou",layer="tohyou")
# 投票区ポリゴン(shp)
assabu_t<-st_read(dsn="shp",layer="assabu_touhyou")
## 投票率データと投票区ポリゴンを結合
data_t<-inner_join(assabu_t,touhyou ,by="投票区")
隣り合う関係を定義する
投票所間の距離を分析指標とするわけですが、正確には「隣り合う投票所間の距離」です。したがって「隣り合う投票所」を決めるのが最初のステップになります。「隣り合う投票所」の関係性は「空間隣接行列」として定義されます。
spdepパッケージのtri2nb()関数でドローネ三角網図を作成します。
# 投票所の座標を抜き出す
touhyou_c<-st_coordinates(touhyou_p)
# 投票所の座標からドローネ三角網図を作成
touhyou_d<-tri2nb(touhyou_c)
ドローネ三角網図の図示
touhyou_dにドローネ三角網が付置されていますので、投票区のポリゴンデータと重ねて表示します。sfクラスのままだとうまく重ならないので、投票区ポリゴンをspクラスに変換しています。
## 投票区と三角網図の図化
data_sp<-as(data_t,"Spatial") #投票区のデータをspクラスに変換
plot(data_sp)
plot(touhyou_d,touhyou_c,add=TRUE)
Moran'sIテストで空間自己相関の検定
moran.test関数は連続量のベクトル型データと空間重み付け隣接行列を引数にとります。連続量のベクトル型データは投票率のデータです。重み付け隣接行列はnb2listw()関数で作成します。
nb2listw()の引数はnbクラスの隣接行列(tri2nb()関数で作成したtouhyou_d)です。
# moran.test関数を実行する
moran.test(data_t$投票率,nb2listw(touhyou_d,style="W"))
## 実行結果
Moran I test under randomisation
data: data_t$投票率
weights: nb2listw(touhyou_d, style = "W")
Moran I statistic standard deviate = -1.2643, p-value = 0.8969
alternative hypothesis: greater
sample estimates:
Moran I statistic Expectation Variance
-0.25293925 -0.08333333 0.01799764
p-value = 0.8969
statistic = -0.25293925
という結果となりました。
Moran Iのstatisticは相関係数と同じように1〜-1の範囲をとり、正の値では投票率が近い地域が隣接する傾向が強く、負の値では投票率が近い地域が遠方に位置する傾向が強くなります。
つまり、上記の結果からは、投票率と投票所の間に空間的自己相関があるとはいえないことを示していると思われます。投票率は投票区単位で独立しており、いわゆる「地域性」は薄いと考えられます。