行列を使って重回帰分析してみる

この記事では行列をつかって単回帰分析を実施した。この手法でほぼそのまま重回帰分析も出来るようなので、ついでに計算してみよう。

データの準備

データは下記のものを使用する。

x(説明変数)

1

2

3

4

5

y(説明変数)

2

6

6

9

6

z(被説明変数)

1

3

4

7

9

過去にsklearn.LinearRegressionで回帰した結果によると下記式が得られるはずだ。

z=2.017x-0.015y-1.160 

 

データを行列にしてみる

 説明変数が増えた分、説明変数の列と回帰係数の行が1つずつ増えているが、それほど難しくない。

f:id:Chemstat:20201118181257j:plain

 

残差平方和が最小になる解を求める

単回帰の際に正規方程式\boldsymbol{X^TXb=X^TY}を解くことで残差平方和が最小になる回帰係数を求めたが、そのまま重回帰分析でも使うことが出来る。

f:id:Chemstat:20201118182831p:plain

 このようにして\hat{b_1}=2.017\hat{b_2}=-0.015\hat{a}=-1.160が得られた。

pythonのコードも単回帰とほとんど変わらないので行列の汎用性が高くてびっくりした。

参考:pythonコード

import numpy as np

#Xのデータ
x_data = np.matrix([[1, 2, 3, 4, 5]]).T

#Yデータ
y_data = np.matrix([[2, 6,6, 9, 6]]).T

#切片項
const = np.matrix([[1, 1, 1, 1, 1]]).T

#Zデータ
z_data = np.matrix([[1,3,4,7,9]]).T

#Xと切片の行列
x_mat = np.hstack([x_data,y_data,const])

print((x_mat.T @ x_mat).I @ (x_mat.T @ z_data))
[[ 2.01732283]
 [-0.01574803]
 [-1.16062992]]

  

参考サイト

行列を使った回帰分析:統計学入門−第7章

Python, NumPyで行列の演算(逆行列、行列式、固有値など) | note.nkmk.me

正規方程式の導出と計算例 | 高校数学の美しい物語

ベクトルや行列による微分の公式 - yuki-koyama's blog