この記事では行列をつかって単回帰分析を実施した。この手法でほぼそのまま重回帰分析も出来るようなので、ついでに計算してみよう。
データの準備
データは下記のものを使用する。
x(説明変数) |
1 |
2 |
3 |
4 |
5 |
y(説明変数) |
2 |
6 |
6 |
9 |
6 |
z(被説明変数) |
1 |
3 |
4 |
7 |
9 |
過去にsklearn.LinearRegressionで回帰した結果によると下記式が得られるはずだ。
データを行列にしてみる
説明変数が増えた分、説明変数の列と回帰係数の行が1つずつ増えているが、それほど難しくない。
残差平方和が最小になる解を求める
単回帰の際に正規方程式を解くことで残差平方和が最小になる回帰係数を求めたが、そのまま重回帰分析でも使うことが出来る。
このようにして、、が得られた。
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]]