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.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_ii 番目の観測データにおける目的変数の値である.

最小二乗法によりパラメータ \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.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

となる.