13  重回帰分析

単回帰分析では一つの目的変数 \(Y\) を一つの説明変数 \(X\) で予測した。しかし、複数の説明変数 \(X_1, X_2, \ldots, X_p\) を用いて目的変数 \(Y\) を予測することが多くある。例えば、アイスクリームの売上は気温だけでなく、湿度や曜日などの他の要因にも影響される。

複数の説明変数 \(X_1, X_2, \ldots, X_p\) を用いて目的変数 \(Y\) を予測する手法を重回帰分析(multiple regression analysis)と呼ぶ。単回帰分析と同様に、線形モデルを用いて説明変数と目的変数の関係を表す。説明変数が \(p\) 個ある場合、重回帰分析のモデルは

\[ Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \ldots + \beta_p X_p + \epsilon \]

と表される。

13.0.1 パラメータの推定

\(n\) 組の観測データ

\[ \mathcal{D} = (x_{11}, x_{12}, \ldots, x_{1p}, y_1), (x_{21}, x_{22}, \ldots, x_{2p}, y_2), \ldots, (x_{n1}, x_{n2}, \ldots, x_{np}, y_n) \]

が与えられたとする。\(x_{ij}\)\(i\) 番目の観測データにおける \(j\) 番目の説明変数の値、\(y_i\)\(i\) 番目の観測データにおける目的変数の値である。

最小二乗法によりパラメータ \(\hat{\beta}_0, \hat{\beta}_1, \ldots, \hat{\beta}_p\) を推定する。\(\hat{\beta}_0, \hat{\beta}_1, \ldots, \hat{\beta}_p\) を用いて、予測値 \(\hat{y}_i\)

\[ \hat{y}_i = \hat{\beta}_0 + \hat{\beta}_1 x_{i1} + \hat{\beta}_2 x_{i2} + \ldots + \hat{\beta}_p x_{ip} \]

と表される。

残差平方和(RSS)は以下のように定義される。

\[\begin{align*} \text{RSS} &= \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 \\ &= \sum_{i=1}^{n} (y_i - (\hat{\beta}_0 + \hat{\beta}_1 x_{i1} + \hat{\beta}_2 x_{i2} + \ldots + \hat{\beta}_p x_{ip}))^2 \end{align*}\]

最小二乗法により、RSS を最小化する \(\hat{\beta}_0, \hat{\beta}_1, \ldots, \hat{\beta}_p\) を求める。

13.0.2 Python による実装

Python では、scikit-learn ライブラリを用いて重回帰分析を簡単に実装できる。以下に、重回帰分析の例を示す。

糖尿病データセットを用いて、複数の説明変数を用いて糖尿病の進行度を予測する。ここでは、BMI、血圧、年齢を説明変数、糖尿病の進行度を目的変数とする。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_diabetes

# 糖尿病データセットの読み込み
diabetes = load_diabetes(as_frame=True)

# BMI、血圧、年齢を説明変数、糖尿病の進行度を目的変数とする
X = diabetes.data[["bmi", "bp", "age"]]
y = diabetes.target

# 線形回帰モデルの作成と学習
model = LinearRegression()
model.fit(X, y)

# 回帰係数の表示
print(f"Intercept (β0): {model.intercept_}")
print(f"Coefficients (β1, β2, β3): {model.coef_}")
Intercept (β0): 152.13348416289614
Coefficients (β1, β2, β3): [788.78268919 394.12709223  25.99039429]

BMI、血圧、年齢をそれぞれ \(X_1, X_2, X_3\) とすると、糖尿病の進行度の予測値 \(\hat{y}\)

\[ \hat{y} \approx 152.13 + 788.78 x_1 + 394.13 x_2 + 25.99 x_3 \]

となる。