からっぽのしょこ

読んだら書く!書いたら読む!同じ事は二度調べ(たく)ない

2.3-4:空間的自己相関(Moran's I)の計算式の導出【空間データサイエンス入門のノート】

はじめに

 『Pythonで学ぶ空間データサイエンス入門』の独学ノートです。本の内容から寄り道してアレコレ考えます。
 本を読んだ上で補助的に読んでください。  

 この記事では、モランのIについて、数式を使って解説します。

【前の内容】

www.anarchive-beta.com

【他の内容】

www.anarchive-beta.com

【今回の内容】

2.3-4 空間的自己相関(Moran's I)の計算式の導出

 空間的自己相関(spatial autocorrelation)の指標であるグローバル・モランのI(GMI・global Moran's I)とローカル・モランのI(LMI・local Moran's I)の定義式に関して、ベクトルや行列を用いた式に変形します。
 空間重み行列(spatial weight matrix)については「【Python】2.2:空間重み行列の可視化【空間データサイエンス入門のノート】 - からっぽのしょこ」を参照してください。

定義式の確認

 まずは、GMIの定義を数式で確認します。

  N 個の区域に関して、 i 番目の区域のデータ(変数)を  x_i として、 N 個のデータをまとめて  N 次元ベクトル  \mathbf{x}、空間重み行列を  (N \times N) の行列  \mathbf{W} とします。

 \displaystyle
\mathbf{x}
    = \begin{pmatrix}
          x_1 \\
          x_2 \\
          \vdots \\
          x_N
      \end{pmatrix}
,\ 
\mathbf{W}
    = \begin{pmatrix}
          w_{11} & w_{12} & \cdots & w_{1N} \\
          w_{21} & w_{22} & \cdots & w_{2N} \\
          \vdots & \vdots & \ddots & \vdots \\
          w_{N1} & w_{N2} & \cdots & w_{NN}
      \end{pmatrix}


空間ラグ

 SLは、次の式で定義されます。

 \displaystyle
\mathrm{SL}_i
    = \sum_{j=1}^N
          w_{ij} (x_j - \bar{x})


グローバル・モランのI

 GMIは、次の式で定義されます。

 \displaystyle
\mathrm{GMI}
    = \frac{1}{\sum_{i=1}^N \sum_{j=1}^N w_{ij}}
      \frac{
          \sum_{i=1}^N \sum_{j=1}^N
              w_{ij} (x_i - \bar{x}) (x_j - \bar{x})
      }{
          \frac{1}{N}
          \sum_{i=1}^N
              (x_i - \bar{x})^2
      }


ローカル・モランのI

 LMIは、次の式で定義されます。

 \displaystyle
\mathrm{LMI}_i
    = \frac{
          (x_i - \bar{x})
          \sum_{j=1}^N
              w_{ij} (x_j - \bar{x})
      }{
          \frac{1}{N}
          \sum_{j=1}^N
              (x_j - \bar{x})^2
      }


計算式の導出

 次は、GMIやLGIの定義式を構成する計算に関して、ベクトルや行列を用いた計算で表現します。ただし、NumPyライブラリなどを利用して計算する場合は、ブロードキャストや関数によってよしなに処理してくれるものもあります。

ベクトルの平均

 変数  \mathbf{x} の平均は、 \mathbf{x} の総和をデータ数  N で割った式で定義されます。

 \displaystyle
\begin{aligned}
\frac{1}{N}
\mathbf{x}^{\top}
\mathbf{1}
   &= \frac{1}{N}
      \begin{pmatrix}
          x_1 & x_2 & \cdots & x_N
      \end{pmatrix}
      \begin{pmatrix}
          1 \\ 1 \\ \vdots \\ 1
      \end{pmatrix}
\\
   &= \frac{1}{N} \Bigl(
          x_1 + x_2 + \cdots + x_N
      \Bigr)
\\
   &= \frac{1}{N}
      \sum_{i=1}^N
          x_i
    \equiv
      \bar{x}
\end{aligned}

途中式の途中式(クリックで展開)


  • 1:  \mathbf{x}, \mathbf{1} の内積と  \frac{1}{N} の積の式を立てます。
  • 2: ベクトルの内積(要素ごとの積の和)を計算します。
  • 3:  N 個の項の和を  \sum_{i=1}^N でまとめます。

 ベクトルの総和の計算は、1ベクトルとの内積によって表現できます。
 全ての要素が1のベクトルを1ベクトルと言い、 \mathbf{1} で表します。また、 \mathbf{x} の標本平均を  \bar{x} で表します。

ベクトルの偏差

  \mathbf{x} の各変数  x_i と平均  \bar{x} の差  x_i - \bar{x} を偏差と言い、偏差ベクトルは、次のように計算できます。

 \displaystyle
\begin{aligned}
\mathbf{x} - \bar{x} \mathbf{1}
   &= \begin{pmatrix}
          x_1 \\ x_2 \\ \vdots \\ x_N
      \end{pmatrix}
      - \bar{x}
        \begin{pmatrix}
          1 \\ 1 \\ \vdots \\ 1
        \end{pmatrix}
\\
   &= \begin{pmatrix}
          x_1 \\ x_2 \\ \vdots \\ x_N
      \end{pmatrix}
       - \begin{pmatrix}
          \bar{x} \\\bar{x} \\ \vdots \\ \bar{x}
        \end{pmatrix}
\\
   &= \begin{pmatrix}
          x_1 - \bar{x} \\
          x_2 - \bar{x} \\
          \vdots \\
          x_N - \bar{x}
      \end{pmatrix}
\end{aligned}

途中式の途中式(クリックで展開)


  • 1:  \mathbf{x}, \bar{x} \mathbf{1} の差の式を立てます。
  • 2: ベクトルのスカラ倍(要素ごとの定数倍)を計算します。
  • 3: ベクトルの差(要素ごとの差)を計算します。

 ベクトルとスカラの差の計算は、1ベクトルのスカラ倍との差によって表現できます。

ベクトルの分散

 変数  \mathbf{x} の分散は、 \mathbf{x} の偏差の2乗和をデータ数  N で割った式で定義されます。

 \displaystyle
\begin{aligned}
\frac{1}{N}
(\mathbf{x} - \bar{x} \mathbf{1})^{\top}
(\mathbf{x} - \bar{x} \mathbf{1})
   &= \frac{1}{N}
      \begin{pmatrix}
          x_1 - \bar{x} & 
          x_2 - \bar{x} & 
          \cdots & 
          x_N - \bar{x}
      \end{pmatrix}
      \begin{pmatrix}
          x_1 - \bar{x} \\
          x_2 - \bar{x} \\
          \vdots \\
          x_N - \bar{x}
      \end{pmatrix}
\\
   &= \frac{1}{N} \Bigl(
          (x_1 - \bar{x}) (x_1 - \bar{x})
          + (x_2 - \bar{x}) (x_2 - \bar{x})
          + \cdots
          + (x_N - \bar{x}) (x_N - \bar{x})
      \Bigr)
\\
   &= \frac{1}{N}
      \sum_{i=1}^N (x_i - \bar{x})^2
\end{aligned}

途中式の途中式(クリックで展開)


  • 1: 2つの  \mathbf{x} - \bar{x} \mathbf{1} の内積と  \frac{1}{N} の積の式を立てます。
  • 2: ベクトルの内積を計算します。
  • 3:  N 個の項の和を  \sum_{i=1}^N でまとめます。

 ベクトルの2乗和の計算は、ベクトル自身との内積によって表現できます。

行列の総和

 重み行列  \mathbf{W} の総和は、次のように計算できます。

 \displaystyle
\begin{aligned}
\mathbf{1}^{\top} \mathbf{W} \mathbf{1}
   &= \begin{pmatrix}
          1 & 1 & \cdots & 1
      \end{pmatrix}
      \begin{pmatrix}
          w_{11} & w_{12} & \cdots & w_{1N} \\
          w_{21} & w_{22} & \cdots & w_{2N} \\
          \vdots & \vdots & \ddots & \vdots \\
          w_{N1} & w_{N2} & \cdots & w_{NN}
      \end{pmatrix}
      \begin{pmatrix}
          1 \\ 1 \\ \vdots \\ 1
      \end{pmatrix}
\\
   &= \begin{pmatrix}
          \sum_{i=1}^N w_{i1} & 
          \sum_{i=1}^N w_{i2} & 
          \cdots & 
          \sum_{i=1}^N w_{iN}
      \end{pmatrix}
      \begin{pmatrix}
          1 \\ 1 \\ \vdots \\ 1
      \end{pmatrix}
\\
   &= \sum_{i=1}^N \sum_{j=1}^N
          w_{ij}
\end{aligned}

途中式の途中式(クリックで展開)


  • 1:  \mathbf{1}, \mathbf{W} の二次形式の式を立てます。
  • 2: ベクトルと行列の積を計算します。
  • 3: ベクトルの内積を計算します。

 行列の総和は、1ベクトルとの二次形式で表現できます。横ベクトル・行列・縦ベクトルの積を二次形式と呼びます。

行列によるベクトルの重み付け和

 重み行列  \mathbf{W} による重み付け偏差の和は、次のように計算できます。

 \displaystyle
\begin{aligned}
\mathbf{W}
(\mathbf{x} - \bar{x} \mathbf{1})
   &= \begin{pmatrix}
          w_{11} & w_{12} & \cdots & w_{1N} \\
          w_{21} & w_{22} & \cdots & w_{2N} \\
          \vdots & \vdots & \ddots & \vdots \\
          w_{N1} & w_{N2} & \cdots & w_{NN}
      \end{pmatrix}
      \begin{pmatrix}
          x_1 - \bar{x} \\
          x_2 - \bar{x} \\
          \vdots \\
          x_N - \bar{x}
      \end{pmatrix}
\\
   &= \begin{pmatrix}
          \sum_{j=1}^N w_{1j} (x_j - \bar{x}) \\
          \sum_{j=1}^N w_{2j} (x_j - \bar{x}) \\
          \vdots \\
          \sum_{j=1}^N w_{Nj} (x_j - \bar{x})
      \end{pmatrix}
\end{aligned}

途中式の途中式(クリックで展開)


  • 1:  \mathbf{W}, \mathbf{x} - \bar{x} \mathbf{1} の積の式を立てます。
  • 2: 行列とベクトルの積を計算します。

 ベクトルの重み付け和の計算は、行列(重み)との積によって表現できます。

 重み行列  \mathbf{W} による重み付け偏差の全ての組み合わせ積の和は、次のように計算できます。

 \displaystyle
\begin{aligned}
(\mathbf{x} - \bar{x} \mathbf{1})^{\top}
\mathbf{W}
(\mathbf{x} - \bar{x} \mathbf{1})
   &= \begin{pmatrix}
          x_1 - \bar{x} &
          x_2 - \bar{x} &
          \cdots &
          x_N - \bar{x}
      \end{pmatrix}
      \begin{pmatrix}
          w_{11} & w_{12} & \cdots & w_{1N} \\
          w_{21} & w_{22} & \cdots & w_{2N} \\
          \vdots & \vdots & \ddots & \vdots \\
          w_{N1} & w_{N2} & \cdots & w_{NN}
      \end{pmatrix}
      \begin{pmatrix}
          x_1 - \bar{x} \\
          x_2 - \bar{x} \\
          \vdots \\
          x_N - \bar{x}
      \end{pmatrix}
\\
   &= \begin{pmatrix}
          \sum_{i=1}^N (x_i - \bar{x}) w_{i1} &
          \sum_{i=1}^N (x_i - \bar{x}) w_{i2} &
          \cdots &
          \sum_{i=1}^N (x_i - \bar{x}) w_{iN}
      \end{pmatrix}
      \begin{pmatrix}
          x_1 - \bar{x} \\
          x_2 - \bar{x} \\
          \vdots \\
          x_N - \bar{x}
      \end{pmatrix}
\\
   &= \sum_{i=1}^N \sum_{j=1}^N
          (x_i - \bar{x}) w_{ij} (x_j - \bar{x})
\end{aligned}

途中式の途中式(クリックで展開)


  • 1:  \mathbf{x} - \bar{x} \mathbf{1}, \mathbf{W} の二次形式の式を立てます。
  • 2: ベクトルと行列の積を計算します。
  • 3: ベクトルの内積を計算します。

 ベクトルの重み付け積和の計算は、行列(重み)との二次形式によって表現できます。

ベクトルの要素積

 偏差と重み付け偏差の和の積は、次のように計算できます。

 \displaystyle
\begin{aligned}
(\mathbf{x} - \bar{x} \mathbf{1})
\odot \mathbf{W} (\mathbf{x} - \bar{x} \mathbf{1})
   &= \begin{pmatrix}
          x_1 - \bar{x} \\
          x_2 - \bar{x} \\
          \vdots \\
          x_N - \bar{x}
      \end{pmatrix}
      \odot \begin{pmatrix}
          \sum_{j=1}^N w_{1j} (x_j - \bar{x}) \\
          \sum_{j=1}^N w_{2j} (x_j - \bar{x}) \\
          \vdots \\
          \sum_{j=1}^N w_{Nj} (x_j - \bar{x})
      \end{pmatrix}
\\
   &= \begin{pmatrix}
          (x_1 - \bar{x}) \sum_{j=1}^N w_{1j} (x_j - \bar{x}) \\
          (x_2 - \bar{x}) \sum_{j=1}^N w_{2j} (x_j - \bar{x}) \\
          \vdots \\
          (x_N - \bar{x}) \sum_{j=1}^N w_{Nj} (x_j - \bar{x})
      \end{pmatrix}
\end{aligned}

途中式の途中式(クリックで展開)


  • 1:  \mathbf{x} - \bar{x} \mathbf{1}, \mathbf{W} (\mathbf{x} - \bar{x} \mathbf{1}) の要素積の式を立てます。
  • 2: 2つのベクトルの対応する要素の積を計算します。

 ここで、 \odot はアダマール積の演算子であり、同じインデックスの要素の積を表します。
 ベクトルや行列の要素積は、アダマール積によって表現できます。

 この記事では、空間的自己相関を数式で確認しました。次からの記事では、プログラムや図で確認します。

参考文献

おわりに

 GMIの可視化で想定通りの図は作れたのですが期待通りの理解に繋がる図にならず、どうしたものか悩んでいたら、いつの間にか3章の記事を書いていました。補足的な記事を2つ書けたところで、本筋の式展開に詰まってしまい、気付けばこの記事を出来上がりました。
 GMIの可視化の記事中での補足として書き始めた内容ですが、内容的にも文量的にも納まりが悪く独立した記事にしました。
 このシリーズでは、どれくらいの粒度感で解説しようかやそもそもの想定読者もまだ手探り中です。はてさて。

 2024年7月17日は、元々はこぶしファクトリーのメンバーで現在はJuice=Juiceのメンバーの井上玲音さんの23歳のお誕生日です。

 色々とハイスペックなアイドルさんなので世間にもっと認知されてほしいなぁ。(しかし言葉を持ち合わせずどの人か説明できません。ロングヘアーの半分を後ろで結んでいて、大きめの輪っかのピアス?イヤリング?を付けていて、千鳥模様の衣装がジャケット?ベスト?でパンツルックの方です!)

【次の内容】

www.anarchive-beta.com