Python、Rで重回帰分析Multiple linear regression analysis on Python, R

重回帰分析

p 次元の説明変数からなる n 個の観測値が与えられた時、重回帰モデルは以下のような式で表されます。

    \[Y_i=\beta_0+\beta_1x_{i1}+\cdots+\beta_px_{ip}+\epsilon_i,\hspace{2em}i=1,\ldots,n\]

ただし、 x_{ij}i 番目の観測値の j 番目の説明変数、 Y_ii 番目の観測値の目的変数です。

この時の \beta_0,\beta_1,\ldots,\beta_p偏回帰係数と言いますが、 この偏回帰係数の良い推定値を、観測データから算出することが重回帰分析の目的になります。

さて、モデル式において、

    \[\boldsymbol{Y}=\left( \begin{array}{c} Y_1 \\ Y_2 \\ \vdots \\ Y_n \\ \end{array} \right),\hspace{1em} \boldsymbol{\beta}=\left( \begin{array}{c} \beta_0 \\ \beta_1 \\ \vdots \\ \beta_p \\ \end{array} \right),\hspace{1em} \boldsymbol{X}=\left( \begin{array}{cccc} 1 & x_{11} & \cdots & x_{1p} \\ 1 & x_{21} & \cdots & x_{2p} \\ \vdots & \vdots & & \vdots \\ 1 & x_{n1} & \cdots & x_{np} \\ \end{array} \right),\hspace{1em} \boldsymbol{\epsilon}=\left( \begin{array}{c} \epsilon_1 \\ \epsilon_2 \\ \vdots \\ \epsilon_n \\ \end{array} \right)\]

とおくと、ベクトルと行列を使って、重回帰モデルは

    \[\boldsymbol{Y} = \boldsymbol{X\beta}+\boldsymbol{\epsilon}\]

と書くことができます。

\boldsymbol{Y}_i の観測値を \boldsymbol{y}=(y_i,\ldots,y_n)^{T} とすると、 \boldsymbol{\beta}最小二乗推定量 \boldsymbol{\hat{\beta}}=\left(\hat{\beta_0}, \hat{\beta_1},\ldots,\hat{\beta_p}\right)^{T} は以下で与えられます。

    \[\boldsymbol{\hat{\beta}}=\left(\boldsymbol{X}^T\boldsymbol{X}\right)^{-1}\boldsymbol{X}^T\boldsymbol{y}\]

この最小二乗推定量が、偏回帰係数の最良線形不偏推定量(best linear unbiased estimator; BLUE)であること、つまり、良い推定量であることが一般的に知られています。

これは、誤差項 \boldsymbol{\epsilon} の平均が 0 で独立同分布であると仮定した時に、ガウス-マルコフの定理により導かれます。

詳細は省略しますが、上記の理由から、最小二乗推定量を用いることで、偏回帰係数の推定値を計算することができます。

Python(scikit-learn)

GitHub: https://github.com/Gin04gh/samples_py/blob/master/MultipleLinearRegressionAnalysis.ipynb

R

GitHub: https://github.com/Gin04gh/samples_r/blob/master/MultipleLinearRegressionAnalysis.ipynb