「第4回 - 2変数の回帰分析」の版間の差分

提供: MochiuWiki : SUSE, EC, PCB

編集の要約なし
1行目: 1行目:
== 概要 ==
== 概要 ==
記述統計において、2変数間の相関がある時、<br>
記述統計において、2変数間に相関関係がある場合、一方の変数xから他方の変数yの関係式を求める方法として回帰分析がある。<br>
一方の変数xから他方の変数yの関係式を求める方法である回帰分析を学習する。<br>
回帰分析は、2変数のデータに対して直線モデルを当てはめ、データの分布を最もよく表す直線 (回帰直線) を計算する手法である。<br>
<br>
回帰分析の核心は、観測されたデータ点と回帰直線との距離 (誤差) を最小化することにある。<br>
この誤差の最小化を実現する手法が最小2乗法であり、回帰分析の理論的基盤を形成する。<br>
<br>
回帰直線が求まれば、与えられたxの値に対してyの値を推定することが可能になる。<br>
ただし、推定には内挿と外挿の区別があり、外挿の場合は推定精度が保証されないため注意が必要である。<br>
<br>
推定精度を評価する指標として寄与率 <math>R^2</math> がある。<br>
寄与率は0〜1の範囲を取り、1に近いほど回帰直線の当てはまりが良いことを示す。<br>
<br>
回帰分析は、身長と体重の関係、気温と売上の関係、広告費と売上の関係等、様々な分野で広く利用されている。<br>
関数電卓やExcel等の表計算ソフト、PythonやR等のプログラミング言語でも簡単に実施できる。<br>
<br>
本ページでは、回帰分析の基本原理である最小2乗法と正規方程式から始まり、回帰係数の導出過程、推定精度の評価方法を解説する。<br>
続いて、具体的な数値例を用いて計算手順を示し、Excel、Python、Rを用いた実装方法も紹介する。<br>
<br>
最後に、回帰分析を適用する際の注意点として外れ値の影響と残差分析について記載する。<br>
<br><br>
<br><br>


== 回帰分析とは ==
== 回帰分析とは ==
N個のデータの組 <math>x_1, \, y_1, \, \cdots, \, x_N, \, y_N</math> について、<br>
N個のデータの組 <math>x_1, y_1, \cdots, x_N, y_N</math> について、直線モデル (回帰直線) <math>y = ax + b</math> を当てはめて、データの分布を表す直線を計算することである。<br>
直線モデル (回帰直線) <math>y = ax + b</math> を当てはめて、データの分布を表す直線を計算することである。<br>
<br>
<br>
これは、直線の傾きaと切片bを変化させて決める。<br>
これは、直線の傾きaと切片bを変化させて決める。<br>
12行目: 28行目:
2変数間の相関係数r<sub>xy</sub>の絶対値が大きい場合に有効である。<br>
2変数間の相関係数r<sub>xy</sub>の絶対値が大きい場合に有効である。<br>
<br>
<br>
<math>
<math>
\begin{align}
\begin{align}
a \, &= \dfrac{\mbox{x と y の共分散}}{\mbox{x の母分散}} \\
a &= \frac{\mbox{x と y の共分散}}{\mbox{x の母分散}} \\
    &= \dfrac{\dfrac{1}{n} \sum_{i=1}^N (x_i - \bar{x})(y_i - \bar{y})}{\sigma_x^2}
  &= \frac{\frac{1}{n} \sum_{i=1}^N (x_i - \bar{x})(y_i - \bar{y})}{\sigma_x^2}
\end{align}
\end{align}
</math><br>
</math>
<math>b = \bar{y} - a \bar{x}</math><br>
<br>
<br>
<math>b = \bar{y} - a \bar{x}</math><br>
以上のことから、回帰直線は次式となる。<br>
<math>
\begin{align}
\hat{y} &= ax + b \\
        &= ax + \bar{y} - a \bar{x} \\
        &= a(x - \bar{x}) + \bar{y}
\end{align}
</math>
<br>
<br>
以上のことから、回帰直線は次式となる。<br>
回帰直線は、全データ点の平均値 <math>(\bar{x}, \bar{y})</math> を必ず通る。<br>
<math>
この性質は、回帰係数bの導出過程から明らかである。<br>
\begin{align}
\hat{y} &= ax + b \\
        &= ax + \bar{y} - a \bar{x} \\
        &= a(x - \bar{x}) + \bar{y}
\end{align}
</math><br>
<br><br>
 
== 回帰分析の使い道 ==
* 回帰直線を使用して、yの推定に利用する。
*: <math>\hat{y} = ax + b = a(x - \bar{x}) + \bar{y}</math>
*: <br>
* 代入するxの値には注意が必要である。
** 内挿 (問題なし)
**: <math>\mbox{  元  デ  ー  タ  の  最  小  x } \leqq \mbox{  代  入  す  る  x } \leqq \mbox{  元  デ  ー  タ  の  最  大  x }</math>
** 外挿 (問題あり : 範囲外での推定精度は保証できないため)
**: <math>\mbox{  代  入  す  る  x } \leqq \mbox{  元  デ  ー  タ  の  最  小  x }</math>
**: または
**: <math>\mbox{  元  デ  ー  タ  の  最  大  x } \leqq \mbox{  代  入  す  る  x }</math>
**: <br>
**: ただし、外挿しても問題ない場合もあるため、推定結果が妥当かどうかを常に考えることが重要である。
<br><br>
 
== 回帰分析の推定精度 ==
回帰分析の推定精度を表すには、寄与率R<sup>2</sup>を用いる。<br>
<math>R^2 = 1 - \frac{S_e}{\sum_{i=1}^N {(y_i - \bar{y})^2}}</math><br>
<br>
<br>
* 寄与率R<sup>2</sup>は、0〜1の範囲にあり、回帰直線の精度が高いほど寄与率は1に近づく。
[[ファイル:Statistics 4 1.png|フレームなし|中央|700px]]
* 相関係数r<sub>xy</sub>の2乗が寄与率R<sup>2</sup>に等しい。<br><math>R^2 = (r_{xy})^{2} = \mbox{(  相  関  係  数  )}^{2}</math>
<br><br>
<br><br>


== 回帰分析の原理 ==
== 回帰分析の原理 ==
N個のデータの組(x<sub>1</sub>, y<sub>1</sub>)、...、(x<sub>N</sub>, y<sub>N</sub>)について、直線モデル(回帰直線)<math>\hat{y} = ax + b</math>を当てはめる時、<br>
N個のデータの組( <math>x_1, y_1, \cdots x_N, y_N</math> )について、直線モデル (回帰直線) <math>\hat{y} = ax + b</math> を当てはめる時、<br>
実際には誤差があるため、元の値y<sub>i</sub>と回帰直線の式で推定した値 <math>\hat{y_i} = a x_i + b</math>の差が最小になるようにしなくてはならない。<br>
実際には誤差があるため、元の値 <math>y_i</math> と 回帰直線の式で推定した値 <math>\hat{y_i} = a x_i + b</math> の差が最小になるようにしなくてはならない。<br>
<br>
<br>
[[ファイル:Statistics 4 1.png|フレームなし|中央]]
[[ファイル:Statistics 4 2.png|フレームなし|中央|700px]]
<br>
<br>
真値との誤差の2乗 <math>\epsilon_{i}^{2} = (y_i - \hat{y_i})^{2}</math> の総和が最小になれば、直線モデル(回帰直線)が最良になる。<br>
真値との誤差の2乗 <math>\epsilon_{i}^{2} = (y_i - \hat{y_i})^{2}</math> の総和が最小になれば、直線モデル (回帰直線) が最良になる。<br>
<br>
<br>
元の値y<sub>i</sub>と回帰直線で推定した値 <math>\hat{y_i} = a x_i + b</math> の差(誤差 <math>\epsilon_{i}^{2} = (y_i - \hat{y_i})^2</math> )が最小になるようにするには、<br>
元の値 <math>y_i</math> と 回帰直線で推定した値 <math>\hat{y_i} = a x_i + b</math> の差 (誤差 <math>\epsilon_{i}^{2} = (y_i - \hat{y_i})^2</math> ) が最小になるようにするには、<br>
全データの誤差の2乗(誤差<math>\epsilon_{i}^{2} = (y_i - \hat{y_i})^{2}</math>)の和が最小になるように、直線の傾きaと切片bを決める。<br>
全データの誤差の2乗 (誤差 <math>\epsilon_{i}^{2} = (y_i - \hat{y_i})^{2}</math> ) の和が最小になるように、直線の傾きaと切片bを決める。<br>
<br>
<br>
これを、<u>最小2乗法</u>と呼ぶ。<br>
これを、<u>最小2乗法</u>と呼ぶ。<br>
<math>
<math>
\begin{align}
\begin{align}
S_e &= \sum_{i=1}^N {\epsilon_{i}^{2}} \\
S_e &= \sum_{i=1}^N {\epsilon_{i}^{2}} \\
    &= \sum_{i=1}^N {(y_i - \hat{y_i})^{2}} \\
    &= \sum_{i=1}^N {(y_i - \hat{y_i})^{2}} \\
    &= \sum_{i=1}^N {\{y_i - (a x_i + b)\}}^{2}
    &= \sum_{i=1}^N {\{y_i - (a x_i + b)\}}^{2}
\end{align}
\end{align}
</math><br>
</math>
<br>
<br>
全データ組の誤差の2乗和S<sub>e</sub>を最小にする回帰係数a、bを求める。<br>
全データ組の誤差の2乗和 <math>S_e</math> を最小にする回帰係数a、bを求める。<br>
<math>
<math>
\begin{align}
\begin{align}
S_e &= \sum_{i=1}^N {(y_i - \hat{y_i})^{2}} \\
S_e &= \sum_{i=1}^N {(y_i - \hat{y_i})^{2}} \\
    &= \sum_{i=1}^N {\{y_i - (a x_i + b)\}^{2}}
    &= \sum_{i=1}^N {\{y_i - (a x_i + b)\}^{2}}
\end{align}
\end{align}
</math><br>
</math>
<br>
<br>
上記の回帰係数を求めるには、S<sub>e</sub>の偏微分の結果が0となる鞍点を求める。<br>
上記の回帰係数を求めるには、S<sub>e</sub>の偏微分の結果が0となる鞍点を求める。<br>
<math>
<math>
\begin{align}
\begin{align}
\frac{\partial S_e}{\partial a} &= 2 \cdot \sum_{i=1}^N \{y_i - (a x_i + b)\} \cdot (- x_i) \\
\frac{\partial S_e}{\partial a} &= 2 \cdot \sum_{i = 1}^N \{y_i - (a x_i + b)\} \cdot (- x_i) \\
                                &= 0
                                &= 0
\end{align}
\end{align}
</math><br>
</math>
<br>
<math>
<math>
\begin{align}
\begin{align}
\frac{\partial S_e}{\partial b} &= 2 \cdot \sum_{i=1}^N \{y_i - (a x_i + b)\} \cdot (-1) \\
\frac{\partial S_e}{\partial b} &= 2 \cdot \sum_{i = 1}^N \{y_i - (a x_i + b)\} \cdot (-1) \\
                                &= 0
                                &= 0
\end{align}
\end{align}
</math><br>
</math>
<br>
<br>
上記の2式を整理して次式とする。<br>
上記の2式を整理して次式とする。<br>
これらを、<u>正規方程式</u>と呼ぶ。<br>
これらを、<u>正規方程式</u>と呼ぶ。<br>
<math>\sum_{i=1}^N {y_i - a } \cdot \sum_{i=1}^N {x_i - b} \cdot N = 0</math> … (1)<br>
<math>\sum_{i = 1}^N {y_i - a } \cdot \sum_{i = 1}^N {x_i - b} \cdot N = 0 \quad \cdots \mbox{(1)}</math>
<math>\sum_{i=1}^N {x_i y_i} - a \sum_{i=1}^N {x_{i}^{2}} - b \sum_{i=1}^N {x_i} = 0</math> … (2)<br>
<math>\sum_{i = 1}^N {x_i y_i} - a \sum_{i = 1}^N {x_{i}^{2}} - b \sum_{i = 1}^N {x_i} = 0 \quad \cdots \mbox{(2)}</math>
<br>
<br>
上式を全データ組Nで除算する。<br>
上式を全データ組Nで除算する。<br>
<math>
<math>
\begin{align}
\begin{align}
b &= \frac{1}{N} \sum_{i=1}^N {y_i} - a \frac{1}{N} \sum_{i=1}^N {x_i} \\
b &= \frac{1}{N} \sum_{i=1}^N {y_i} - a \frac{1}{N} \sum_{i=1}^N {x_i} \\
  &= \bar{y} - a \bar{x}
  &= \bar{y} - a \bar{x}
\end{align}
\end{align}
</math><br>
</math>
<br>
<br>
したがって、回帰直線の切片bは、傾きa、xの平均、yの平均で求めることができる。<br>
したがって、回帰直線の切片bは、傾きa、xの平均、yの平均で求めることができる。<br>
<br>
<br>
<math>b = \bar{y} - a \bar{x}</math> を下式に代入する。<br>
<math>b = \bar{y} - a \bar{x}</math> を下式に代入する。<br>
<math>\sum_{i=1}^N {x_i y_i} - a \sum_{i=1}^N {x_{i}^{2}} - (\bar{y} - a \bar{x}) \sum_{i=1}^N {x_i} = 0</math><br>
<math>\sum_{i = 1}^N {x_i y_i} - a \sum_{i = 1}^N {x_{i}^{2}} - (\bar{y} - a \bar{x}) \sum_{i = 1}^N {x_i} = 0</math>
<math>
\begin{align}
<math>
a \left ( \sum_{i=1}^N {x_{i}^{2}} - N \bar{x}^{2} \right ) &= \left ( \sum_{i=1}^N {x_i - y_i} - N \bar{x} \bar{y} \right ) \\
\begin{align}
a \sum_{i=1}^N {(x_i - \bar{x})^{2}} &= \sum_{i=1}^N {(x_i - \bar{x})(y_i - \bar{y})} \\
a \left (\sum_{i=1}^N {x_{i}^{2}} - N \bar{x}^{2} \right) &= \left (\sum_{i=1}^N {x_i - y_i} - N \bar{x} \bar{y} \right) \\
a &= \frac{\sum_{i=1}^N {(x_i - \bar{x})(y_i - \bar{y})}}{\sum_{i=1}^N {(x_i - \bar{x})^{2}}} \\
a \sum_{i=1}^N {(x_i - \bar{x})^{2}} &= \sum_{i=1}^N {(x_i - \bar{x})(y_i - \bar{y})} \\
  &= \frac{C_{xy}}{\sigma_{x}^{2}} \\
a &= \frac{\sum_{i=1}^N {(x_i - \bar{x})(y_i - \bar{y})}}{\sum_{i=1}^N {(x_i - \bar{x})^{2}}} \\
  &= \frac{\mbox{ x y の  共  分  散  }}{\mbox{ x の  母  分  散  }}
  &= \frac{C_{xy}}{\sigma_{x}^{2}} \\
\end{align}
  &= \frac{\mbox{x と y の共分散}}{\mbox{x の母分散}}
</math><br>
\end{align}
</math>
<br>
<br>
全データ組の誤差の2乗和Seが最小になる回帰係数は、<br>
全データ組の誤差の2乗和Seが最小になる回帰係数は、<br>
<math>a = \frac{\mbox{ x y の  共  分  散  }}{\mbox{ x の  母  分  散  }}</math><br>
<math>a = \frac{\mbox{x と y の共分散}}{\mbox{x の母分散}}</math>
<math>b = \bar{y} - a \bar{x}</math><br>
<math>b = \bar{y} - a \bar{x}</math>
<br>
<br>
したがって、回帰直線は全データ組の平均値xとyを通る。<br>
したがって、回帰直線は全データ組の平均値xとyを通る。<br>
<math>
<math>
\begin{align}
\begin{align}
\hat{y} &= ax + b \\
\hat{y} &= ax + b \\
        &= ax + \bar{y} - a \bar{x} \\
        &= ax + \bar{y} - a \bar{x} \\
        &= a(x - \bar{x}) + \bar{y}
        &= a(x - \bar{x}) + \bar{y}
\end{align}
\end{align}
</math><br>
</math>
<br>
<br>
最小となったSeの値は、次式となる。<br>
最小となったSeの値は、次式となる。<br>
<math>
<math>
\begin{align}
\begin{align}
S_e &= \sum_{i=1}^N {y_i - (a x_i + b)}^{2} \\
S_e &= \sum_{i=1}^N {y_i - (a x_i + b)}^{2} \\
    &= \sum_{i=1}^N {(y_i - \bar{y})^{2}} - a \sum_{i=1}^N {(x_i - \bar{x})(y_i - \bar{y})}
    &= \sum_{i=1}^N {(y_i - \bar{y})^{2}} - a \sum_{i=1}^N {(x_i - \bar{x})(y_i - \bar{y})}
\end{align}
\end{align}
</math><br>
</math>
<br>
==== 最小2乗法 ====
最小2乗法は、観測値とモデルによる予測値との差 (残差) の2乗和を最小化することで、最適なパラメータを求める手法である。<br>
<br>
回帰分析における最小2乗法の特徴は以下の通りである。<br>
<br>
* 残差の2乗和を最小化する
*: 正の残差と負の残差を区別せず、大きな誤差をより強く大きな影響を受ける。
* 解析的な解が存在する
*: 偏微分を用いて正規方程式を導出でき、数値的な反復計算が不要である。
* 誤差が正規分布に従う場合、最尤推定と等価になる
*: 統計的な性質が良好であり、推定値が不偏かつ一致する。
* 外れ値に弱い
*: 誤差を2乗するため、外れ値の影響が大きくなる。
<br>
最小2乗法は、単回帰分析だけでなく、重回帰分析、多項式回帰、非線形回帰の基礎としても広く利用されている。<br>
<br>
==== 正規方程式 ====
正規方程式は、最小2乗法において、残差の2乗和を最小化する条件から導かれる連立方程式である。<br>
<br>
正規方程式の2式は以下の通りである。<br>
<br>
<math>\sum_{i = 1}^N y_i = a \sum_{i = 1}^N x_i + bN</math>
<math>\sum_{i = 1}^N x_i y_i = a \sum_{i = 1}^N x_i^2 + b \sum_{i = 1}^N x_i</math>
<br>
この連立方程式を行列形式で表すと、以下のようになる。<br>
<math>
\begin{pmatrix}
\sum x_i^2 & \sum x_i \\
\sum x_i & N
\end{pmatrix}
\begin{pmatrix}
a \\
b
\end{pmatrix}
=
\begin{pmatrix}
\sum x_i y_i \\
\sum y_i
\end{pmatrix}
</math>
<br>
行列形式のメリットは、コンピュータによる数値計算に適している点にある。<br>
特に変数が増える重回帰分析では、行列演算を用いることが標準的である。<br>
<br>
==== 回帰係数の導出 ====
回帰係数aとbの導出過程を整理すると、以下の手順となる。<br>
<br>
# ステップ1: 各変数の平均を計算する
#: <math>\bar{x} = \frac{1}{N} \sum_{i=1}^N x_i</math>
#: <math>\bar{y} = \frac{1}{N} \sum_{i=1}^N y_i</math>
#: <br>
# ステップ2: xの母分散を計算する
#: <math>\sigma_x^2 = \frac{1}{N} \sum_{i=1}^N (x_i - \bar{x})^2</math>
#: <br>
# ステップ3: xとyの共分散を計算する
#: <math>C_{xy} = \frac{1}{N} \sum_{i=1}^N (x_i - \bar{x})(y_i - \bar{y})</math>
#: <br>
# ステップ4: 傾きaを計算する
#: <math>a = \frac{C_{xy}}{\sigma_x^2}</math>
#: <br>
# ステップ5: 切片bを計算する
#: <math>b = \bar{y} - a\bar{x}</math>
<br>
この手順に従えば、任意の2変数データに対して回帰直線を求めることができる。<br>
<br><br>
 
== 回帰分析の推定精度 ==
回帰分析の推定精度を表すには、寄与率 <math>R^2</math> を用いる。<br>
<math>R^2 = 1 - \frac{S_e}{\sum_{i = 1}^N {(y_i - \bar{y})^2}}</math>
<br>
* 寄与率 <math>R^2</math> は、0〜1の範囲にあり、回帰直線の精度が高いほど寄与率は1に近づく。
* 相関係数 <math>r_{xy}</math> の2乗が寄与率 <math>R^2</math> に等しい。<br><math>R^2 = (r_{xy})^{2} = \mbox{(相関係数)}^{2}</math>
<br>
寄与率 <math>R^2</math> は、回帰モデルがデータの変動をどれだけ説明できるかを示す指標である。<br>
例えば <math>R^2 = 0.8</math> であれば、データの変動の80[%]が回帰モデルによって説明できることを意味する。<br>
<br>
残差の2乗和 <math>S_e</math> は、回帰モデルで説明できない変動の大きさを表す。<br>
全変動 <math>\sum_{i = 1}^N (y_i - \bar{y})^2</math> は、回帰モデルで説明できる変動と説明できない変動に分解できる。<br>
<math>\sum_{i = 1}^N (y_i - \bar{y})^2 = \sum_{i = 1}^N (\hat{y_i} - \bar{y})^2 + \sum_{i = 1}^N (y_i - \hat{y_i})^2</math>
<br>
左辺を全変動、第1項を回帰変動、第2項を残差変動と呼ぶ。<br>
<br>
寄与率は、回帰変動が全変動に占める割合として定義される。<br>
<br>
==== 寄与率の解釈 ====
寄与率の値に応じた解釈の目安は以下の通りである。<br>
<br>
<center>
{| class="wikitable"
|+ 寄与率の解釈目安
! 寄与率 <math>R^2</math> !! 解釈
|-
| 0.9以上 || 非常に高い説明力
|-
| 0.7〜0.9 || 高い説明力
|-
| 0.5〜0.7 || 中程度の説明力
|-
| 0.3〜0.5 || 弱い説明力
|-
| 0.3未満 || 説明力が低い
|}
</center>
<br>
ただし、分野やデータの性質によって解釈は異なる。<br>
社会科学では、<math>R^2 = 0.3</math> 程度でも有用とされることがあるが、物理学等では0.95以上が求められる場合がある。<br>
<br><br>
 
== 回帰分析の使い道 ==
* 回帰直線を使用して、yの推定に利用する。
*: <math>\hat{y} = ax + b = a(x - \bar{x}) + \bar{y}</math>
*: <br>
* 代入するxの値には注意が必要である。
<br>
回帰分析の主な応用分野は以下の通りである。<br>
<br>
* 予測・予報
*: 過去のデータに基づいて将来の値を推定する。気象予報、株価予測、需要予測等
* 要因分析
*: ある変数に影響を与える要因の強さを定量化する。マーケティングでの効果測定等
* トレンド分析
*: 時系列データにおける長期的な傾向を把握する。売上推移、人口動態等
* 品質管理
*: 製造プロセスにおける管理図の作成や不良率の予測
<br>
==== 内挿と外挿 ====
回帰直線を用いてyを推定する際、代入するxの値の範囲によって注意が必要である。<br>
<br>
[[ファイル:Statistics 4 6.png|フレームなし|中央|700px]]
<br>
* 内挿 (問題なし)
*: <math>\mbox{元データの最小 x} \leqq \mbox{代入する x} \leqq \mbox{元データの最大 x}</math>
*: 観測データの範囲内での推定は、回帰モデルの精度が保証される。
* 外挿 (問題あり)
*: <math>\mbox{代入する x} \leqq \mbox{元データの最小 x}</math>
*: または
*: <math>\mbox{元データの最大 x} \leqq \mbox{代入する x}</math>
*: 観測データの範囲外での推定は、モデルの妥当性が保証されない。
*: 回帰直線がデータの範囲外でも同じ傾向を保つ保証はない。
*: <br>
*: ただし、外挿しても問題ない場合もあるため、推定結果が妥当かどうかを常に考えることが重要である。
*: 理論的に直線関係が保証される場合や、過去の経験から外挿が有効と判断できる場合がある。
<br><br>
 
== 回帰分析の手順 ==
回帰分析を実施する場合の標準的な手順は、以下の通りである。<br>
<br>
[[ファイル:Statistics 4 3.png|フレームなし|中央|700px]]
<br>
# ステップ1: 散布図の作成
#: データの分布傾向を視覚的に確認する。
#: 直線関係があるか、外れ値がないかを確認する。
#: <br>
# ステップ2: 基本統計量の計算
#: xとyの平均、母分散、母標準偏差を計算する。
#: <br>
# ステップ3: 共分散の計算
#: xとyの共分散 <math>C_{xy}</math> を計算する。
#: <br>
# ステップ4: 相関係数の計算
#: <math>r_{xy} = \frac{C_{xy}}{\sigma_x \sigma_y}</math>
#: 相関の強さを確認する。
#: <br>
# ステップ5: 回帰係数の計算
#: 傾きaと切片bを計算する。
#: <math>a = \frac{C_{xy}}{\sigma_x^2}</math>
#: <math>b = \bar{y} - a\bar{x}</math>
#: <br>
# ステップ6: 回帰直線の構築
#: <math>\hat{y} = ax + b</math>
#: <br>
# ステップ7: 寄与率の計算
#: <math>R^2 = r_{xy}^2</math>
#: モデルの当てはまりを評価する。
#: <br>
# ステップ8: 残差分析
#: 残差の分布を確認し、モデルの妥当性を検証する。
<br>
この手順を順番に実行することで、確実に回帰分析を完了できる。<br>
<br><br>
 
== 具体例: 身長と体重の回帰分析 ==
ある5人の身長と体重のデータについて、回帰分析を行なう。<br>
<br>
<center>
{| class="wikitable"
|+ 身長と体重のデータ
! 身長(cm) !! 体重(kg)
|-
| 150.2 || 56.4
|-
| 155.0 || 52.9
|-
| 163.5 || 72.2
|-
| 172.1 || 68.1
|-
| 178.6 || 79.7
|}
</center>
<br>
==== 計算手順 ====
* x: 身長、y: 体重として計算を進める。
*: <br>
* 身長の平均
*: <math>\bar{x} = \frac{150.2 + 155.0 + 163.5 + 172.1 + 178.6}{5} = 163.9 \, \, [cm]</math>
* 体重の平均
*: <math>\bar{y} = \frac{56.4 + 52.9 + 72.2 + 68.1 + 79.7}{5} = 65.9 \, \, [kg]</math>
* 身長の母分散
*: <math>\sigma_x^2 = \frac{1}{5}\sum_{i = 1}^5 (x_i - 163.9)^2 = 110.1 \, \, [cm^2]</math>
* 体重の母分散
*: <math>\sigma_y^2 = \frac{1}{5}\sum_{i = 1}^5 (y_i - 65.9)^2 = 99.3 \, \, [kg^2]</math>
* 身長と体重の共分散
*: <math>C_{xy} = \frac{1}{5}\sum_{i = 1}^5 (x_i - 163.9)(y_i - 65.9) = 93.1 \, \, [cm*kg]</math>
* 傾きa
*: <math>a = \frac{C_{xy}}{\sigma_x^2} = \frac{93.1}{110.1} = 0.846</math>
* 切片b
*: <math>b = \bar{y} - a \bar{x} = 65.9 - 0.846 \times 163.9 = -72.738</math>
<br>
==== 結果の解釈 ====
以上の計算結果から、回帰直線は以下のようになる。<br>
<br>
<math>\hat{y} = 0.846x - 72.738</math><br>
<br>
* 寄与率
*: <math>R^2 = r_{xy}^2 = 0.890^2 = 0.793</math>
*: 寄与率は0.793であり、身長による体重の変動の約79.3[%]を説明できることを示している。
*: <br>
* 回帰直線の解釈
*: 傾きa = 0.846は、身長が1[cm]増加すると体重が平均して約0.85[kg]増加することを意味する。
*: 切片b = -72.738は、身長が0[cm]の時の体重を表すが、実際的な意味は持たない。
*: この理由は、身長0[cm]は観測データの範囲外であり、外挿の一例である。
<br>
[[ファイル:Statistics 4 4.png|フレームなし|中央]]
<br>
[[ファイル:Statistics 4 5.png|フレームなし|中央]]
<br><br>
 
== Excelによる回帰分析 ==
Excelは、回帰分析を簡単に実行できる強力なツールである。<br>
Microsoft 365 / Excel 2021では、以下に示す方法で回帰分析を実施できる。<br>
<br>
==== 散布図による方法 ====
Excelの散布図に近似曲線を追加する方法は最も簡便である。<br>
<br>
# データをワークシートに入力する。
# データ範囲を選択して、[挿入]タブから[散布図]を選択する。
# 作成されたグラフ上でデータ点を右クリックし、[近似曲線の追加]を選択する。
# [書式設定]ウィンドウで[線形]を選択する。
# [グラフに式を表示する]、[グラフにR-2乗値を表示する]にチェックを入力する。
<br>
この方法では、回帰式と寄与率がグラフ上に自動表示される。<br>
<br>
視覚的に確認できるため、探索的な分析に適している。<br>
<br>
==== 分析ツールによる方法 ====
より詳細な統計量が必要な場合は、[分析ツール]を使用する。<br>
<br>
# [データ]タブの[データ分析]を選択する。
#: 表示されない場合は、アドインで[分析ツール]を有効にする必要がある。
# [回帰分析]を選択して、[OK]ボタンを押下する。
# 入力Y範囲に目的変数のセル範囲を入力する。
# 入力X範囲に説明変数のセル範囲を入力する。
# [ラベル]にチェックを入力する。(変数名を含む場合)
# 出力先を指定して、[OK]ボタンを押下する。
<br>
分析ツールの出力には、回帰統計 ( <math>R, \, R^2</math> )、分散分析表、回帰係数の推定値、t値、P値等が含まれる。<br>
<br>
統計的な検定を伴う本格的な分析に適している。<br>
<br>
==== 関数による方法 ====
Excelのワークシート関数を用いて個別に計算することも可能である。<br>
<br>
<center>
{| class="wikitable"
|+ Excelの回帰分析関数
! 関数 !! 用途 !! 書式
|-
| SLOPE || 回帰直線の傾き || <code>=SLOPE(既知のy, 既知のx)</code>
|-
| INTERCEPT || 回帰直線の切片 || <code>=INTERCEPT(既知のy, 既知のx)</code>
|-
| RSQ || 寄与率( <math>R^2</math> ) || <code>=RSQ(既知のy, 既知のx)</code>
|-
| LINEST || 回帰統計の配列 || <code>=LINEST(既知のy, 既知のx)</code>
|-
| FORECAST || 回帰直線による予測 || <code>=FORECAST(x, 既知のy, 既知のx)</code>
|}
</center>
<br>
関数を用いる利点は、データが更新された時に自動的に再計算される点にある。<br>
<br>
定期的に更新されるデータの分析に適している。<br>
<br>
==== ソルバーによる方法 ====
Excelのソルバーを用いると、最小2乗法の原理を直接体験できる。<br>
<br>
# ワークシート上に回帰係数a、bのセルを準備する。
# 予測値を計算するセルを作成する。(<code>=a* x + b</code>)
# 残差の2乗 (<code>=(観測値 - 予測値)^2</code>) を計算するセルを作成する。
# 残差の2乗の和を計算するセルを作成する。(<code>=SUM(残差の2乗の範囲)</code>)
# [データ]タブの[ソルバー]を選択する。
# 目的セルに残差の2乗和のセルを指定する。
# 目標値を[最小値]に設定する。
# 変更するセルに回帰係数a、bのセルを指定する。
# [解決]ボタンを押下する。
<br>
ソルバーは最適化手法を用いて残差の2乗和を最小化する。<br>
<br>
最小2乗法の概念を直感的に理解するのに有用である。<br>
<br><br>
 
== Pythonによる回帰分析 ==
Pythonは、統計分析や機械学習に広く利用されるプログラミング言語である。<br>
<br>
NumPy、SciPy、Matplotlib等のライブラリを用いて回帰分析を記述することができる。<br>
<br>
==== NumPyを用いた実装 ====
NumPyのpolyfit関数を用いると、1行で回帰係数を求められる。<br>
<br>
<syntaxhighlight lang="python">
import numpy as np
# データの定義
height = np.array([150.2, 155.0, 163.5, 172.1, 178.6])
weight = np.array([56.4, 52.9, 72.2, 68.1, 79.7])
# 回帰係数の計算 (1次: 直線)
a, b = np.polyfit(height, weight, 1)
# 寄与率の計算
y_pred = a * height + b
ss_res = np.sum((weight - y_pred) ** 2)
ss_tot = np.sum((weight - np.mean(weight)) ** 2)
r_squared = 1 - ss_res / ss_tot
print(f"傾き a = {a:.3f}")
print(f"切片 b = {b:.3f}")
print(f"寄与率 R² = {r_squared:.3f}")
</syntaxhighlight>
<br>
==== SciPyを用いた実装 ====
SciPyのlinregress関数を用いると、回帰統計量も一括で取得できる。<br>
<br>
<syntaxhighlight lang="python">
from scipy import stats
# データの定義
height = [150.2, 155.0, 163.5, 172.1, 178.6]
weight = [56.4, 52.9, 72.2, 68.1, 79.7]
# 線形回帰
slope, intercept, r_value, p_value, std_err = stats.linregress(height, weight)
print(f"傾き: {slope:.3f}")
print(f"切片: {intercept:.3f}")
print(f"相関係数: {r_value:.3f}")
print(f"寄与率 R²: {r_value**2:.3f}")
print(f"P値: {p_value:.6f}")
print(f"標準誤差: {std_err:.3f}")
</syntaxhighlight>
<br>
==== Matplotlibを用いたプロット ====
回帰直線を含む散布図を作成する例である。<br>
<br>
<syntaxhighlight lang="python">
import numpy as np
import matplotlib.pyplot as plt
height = np.array([150.2, 155.0, 163.5, 172.1, 178.6])
weight = np.array([56.4, 52.9, 72.2, 68.1, 79.7])
a, b = np.polyfit(height, weight, 1)
x_line = np.linspace(145, 185, 100)
y_line = a * x_line + b
plt.scatter(height, weight, label='観測値')
plt.plot(x_line, y_line, 'r-', label=f'y = {a:.3f}x + {b:.3f}')
plt.xlabel('身長 (cm)')
plt.ylabel('体重 (kg)')
plt.legend()
plt.grid(True)
plt.show()
</syntaxhighlight>
<br>
Pythonを用いるメリットは、処理の自動化、大規模データの分析、複雑な統計モデルの構築が容易な点にある。<br>
<br><br>
<br><br>
== Rによる回帰分析 ==
Rは統計計算とグラフィックに特化したプログラミング言語である。<br>
<br>
回帰分析は、lm関数を用いて簡潔に記述することができる。<br>
<br>
==== 基本的な回帰分析 ====
以下の例は、lm関数を用いて回帰モデルを構築する例である。<br>
<br>
<syntaxhighlight lang="r">
# データの定義
height <- c(150.2, 155.0, 163.5, 172.1, 178.6)
weight <- c(56.4, 52.9, 72.2, 68.1, 79.7)
# 線形回帰モデルの構築
model <- lm(weight ~ height)
# 結果の表示
summary(model)
</syntaxhighlight>
<br>
==== 結果の解釈 ====
summary関数の出力には以下の情報が含まれる。<br>
<br>
* Coefficients
*: Estimate: 回帰係数の推定値 (傾きと切片)
*: Std. Error: 標準誤差
*: t value: t統計量
*: Pr(>|t|): P値
*: <br>
* Residual standard error
*: 残差の標準誤差
*: <br>
* Multiple R-squared
*: 寄与率 (R<sup>2</sup>)
*: <br>
* Adjusted R-squared
*: 自由度調整済み寄与率
*: <br>
* F-statistic
*: F検定統計量
<br>
==== プロット ====
以下の例は、回帰直線を含む散布図を作成する例である。<br>
<br>
<syntaxhighlight lang="r">
# 散布図の作成
plot(height, weight, pch=19, col="blue", xlab="身長 (cm)", ylab="体重 (kg)")
# 回帰直線の追加
abline(model, col="red", lwd=2)
# 予測値の追加
new_height <- data.frame(height = seq(145, 185, by=1))
pred <- predict(model, newdata=new_height, interval="confidence")
lines(new_height$height, pred[, "fit"], col="red", lwd=2)
lines(new_height$height, pred[, "lwr"], col="red", lty=2)
lines(new_height$height, pred[, "upr"], col="red", lty=2)
</syntaxhighlight>
<br>
Rは統計学の教科書や論文の分析に最も近い記述ができ、統計的な解釈に優れている。<br>
<br><br>
== 回帰分析の注意点 ==
回帰分析を適用する際には、いくつかの注意点がある。<br>
<br>
これらを無視すると誤った結論を導く可能性がある。<br>
<br>
==== 外れ値の影響 ====
外れ値は回帰直線に大きな影響を与える。<br>
<br>
* 外れ値の影響
*: 最小2乗法は誤差の2乗和を最小化するため、外れ値の影響が強調される。
*: 1つの外れ値で回帰直線の傾きが大きく変わることがある。
*: <br>
* 対処法
*: 散布図を作成して外れ値を視覚的に確認する。
*: 外れ値が測定誤差であれば削除または修正する。
*: 外れ値が正当なデータであれば、ロバスト回帰等の手法を検討する。
*: 外れ値を含む場合と除いた場合の両方で分析を行い、結果の頑健性を確認する。
<br>
==== 残差分析 ====
残差分析は、回帰モデルの妥当性を評価する重要な手段である。<br>
<br>
* 残差の定義
*: <math>e_i = y_i - \hat{y_i}</math>
*: 観測値と予測値の差である。
*: <br>
* 残差プロット
*: 横軸に予測値またはx、縦軸に残差をプロットする。
*: 理想的には、残差は0を中心にランダムに分布する。
*: <br>
* 確認すべきパターン
*: 残差に系統的なパターンがある場合、直線モデルが不適切である可能性がある。
*: 残差の分散がxの値によって変化する場合 (異方性) 、モデルの仮定が崩れている。
*: 残差の分布が正規分布から大きくずれている場合、推定値の信頼性が低下する。
*: <br>
* 対処法
*: 非線形関係が疑われる場合は、多項式回帰や対数変換を検討する。
*: 異方性の場合は、重み付き最小2乗法を用いる。
<br>
[[ファイル:Statistics 4 5.png|フレームなし|中央]]<br>
<br>
==== その他の注意点 ====
* 相関と因果
*: 回帰分析で相関が見つかっても、必ずしも因果関係があるとは限らない。
*: 交絡変数 (第3の変数) の影響を考慮する必要がある。
*: <br>
* 回帰モデルの仮定
*: 誤差項は平均0、等分散、互いに独立であることが仮定されている。
*: これらの仮定が満たされない場合、推定値の性質が損なわれる。
*: <br>
* 外挿の危険性
*: 観測範囲外での予測は、モデルの外挿になり信頼性が低下する。
*: 特に生物学的・物理的な限界がある変数では注意が必要である。
<br><br>
== 関連情報 ==
* [[第1回 - イントロダクション]]
* [[第2回 - 1変数の記述統計]]
* [[第3回 - 2変数間の相関]]
* [[第5回 - 集合と場合の数]]
* [[第6回 - 確率の基礎]]
* [[第7回 - ベイズの定理]]
* [[第8回 - 離散型確率分布]]
* [[第9回 - 連続型確率分布]]
* [[第10回 - 2変数の確率分布]]
* [[第11回 - 正規分布]]
* [[第12回 - 様々な確率分布]]
* [[第13回 - 推定]]
* [[第14回 - 検定]]
* [[第15回 - 適合度検定]]
* [[第16回 - モーメント母関数]]
* [[統計学 - 二項分布]]
<br><br>
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:統計学]]
[[カテゴリ:統計学]]

2026年6月11日 (木) 12:52時点における版

概要

記述統計において、2変数間に相関関係がある場合、一方の変数xから他方の変数yの関係式を求める方法として回帰分析がある。
回帰分析は、2変数のデータに対して直線モデルを当てはめ、データの分布を最もよく表す直線 (回帰直線) を計算する手法である。

回帰分析の核心は、観測されたデータ点と回帰直線との距離 (誤差) を最小化することにある。
この誤差の最小化を実現する手法が最小2乗法であり、回帰分析の理論的基盤を形成する。

回帰直線が求まれば、与えられたxの値に対してyの値を推定することが可能になる。
ただし、推定には内挿と外挿の区別があり、外挿の場合は推定精度が保証されないため注意が必要である。

推定精度を評価する指標として寄与率 R2 がある。
寄与率は0〜1の範囲を取り、1に近いほど回帰直線の当てはまりが良いことを示す。

回帰分析は、身長と体重の関係、気温と売上の関係、広告費と売上の関係等、様々な分野で広く利用されている。
関数電卓やExcel等の表計算ソフト、PythonやR等のプログラミング言語でも簡単に実施できる。

本ページでは、回帰分析の基本原理である最小2乗法と正規方程式から始まり、回帰係数の導出過程、推定精度の評価方法を解説する。
続いて、具体的な数値例を用いて計算手順を示し、Excel、Python、Rを用いた実装方法も紹介する。

最後に、回帰分析を適用する際の注意点として外れ値の影響と残差分析について記載する。


回帰分析とは

N個のデータの組 x1,y1,,xN,yN について、直線モデル (回帰直線) y=ax+b を当てはめて、データの分布を表す直線を計算することである。

これは、直線の傾きaと切片bを変化させて決める。

2変数間の相関係数rxyの絶対値が大きい場合に有効である。

a=x と y の共分散x の母分散=1ni=1N(xix¯)(yiy¯)σx2

b=y¯ax¯


以上のことから、回帰直線は次式となる。

y^=ax+b=ax+y¯ax¯=a(xx¯)+y¯


回帰直線は、全データ点の平均値 (x¯,y¯) を必ず通る。
この性質は、回帰係数bの導出過程から明らかである。



回帰分析の原理

N個のデータの組( x1,y1,xN,yN )について、直線モデル (回帰直線) y^=ax+b を当てはめる時、
実際には誤差があるため、元の値 yi と 回帰直線の式で推定した値 yi^=axi+b の差が最小になるようにしなくてはならない。


真値との誤差の2乗 ϵi2=(yiyi^)2 の総和が最小になれば、直線モデル (回帰直線) が最良になる。

元の値 yi と 回帰直線で推定した値 yi^=axi+b の差 (誤差 ϵi2=(yiyi^)2 ) が最小になるようにするには、
全データの誤差の2乗 (誤差 ϵi2=(yiyi^)2 ) の和が最小になるように、直線の傾きaと切片bを決める。

これを、最小2乗法と呼ぶ。

Se=i=1Nϵi2=i=1N(yiyi^)2=i=1N{yi(axi+b)}2


全データ組の誤差の2乗和 Se を最小にする回帰係数a、bを求める。

Se=i=1N(yiyi^)2=i=1N{yi(axi+b)}2


上記の回帰係数を求めるには、Seの偏微分の結果が0となる鞍点を求める。

Sea=2i=1N{yi(axi+b)}(xi)=0

Seb=2i=1N{yi(axi+b)}(1)=0


上記の2式を整理して次式とする。
これらを、正規方程式と呼ぶ。

i=1Nyiai=1NxibN=0(1)
i=1Nxiyiai=1Nxi2bi=1Nxi=0(2)


上式を全データ組Nで除算する。

b=1Ni=1Nyia1Ni=1Nxi=y¯ax¯


したがって、回帰直線の切片bは、傾きa、xの平均、yの平均で求めることができる。

b=y¯ax¯ を下式に代入する。

i=1Nxiyiai=1Nxi2(y¯ax¯)i=1Nxi=0

a(i=1Nxi2Nx¯2)=(i=1NxiyiNx¯y¯)ai=1N(xix¯)2=i=1N(xix¯)(yiy¯)a=i=1N(xix¯)(yiy¯)i=1N(xix¯)2=Cxyσx2=x と y の共分散x の母分散


全データ組の誤差の2乗和Seが最小になる回帰係数は、

a=x と y の共分散x の母分散
b=y¯ax¯


したがって、回帰直線は全データ組の平均値xとyを通る。

y^=ax+b=ax+y¯ax¯=a(xx¯)+y¯


最小となったSeの値は、次式となる。

Se=i=1Nyi(axi+b)2=i=1N(yiy¯)2ai=1N(xix¯)(yiy¯)


最小2乗法

最小2乗法は、観測値とモデルによる予測値との差 (残差) の2乗和を最小化することで、最適なパラメータを求める手法である。

回帰分析における最小2乗法の特徴は以下の通りである。

  • 残差の2乗和を最小化する
    正の残差と負の残差を区別せず、大きな誤差をより強く大きな影響を受ける。
  • 解析的な解が存在する
    偏微分を用いて正規方程式を導出でき、数値的な反復計算が不要である。
  • 誤差が正規分布に従う場合、最尤推定と等価になる
    統計的な性質が良好であり、推定値が不偏かつ一致する。
  • 外れ値に弱い
    誤差を2乗するため、外れ値の影響が大きくなる。


最小2乗法は、単回帰分析だけでなく、重回帰分析、多項式回帰、非線形回帰の基礎としても広く利用されている。

正規方程式

正規方程式は、最小2乗法において、残差の2乗和を最小化する条件から導かれる連立方程式である。

正規方程式の2式は以下の通りである。

i=1Nyi=ai=1Nxi+bN
i=1Nxiyi=ai=1Nxi2+bi=1Nxi


この連立方程式を行列形式で表すと、以下のようになる。

(xi2xixiN)(ab)=(xiyiyi)


行列形式のメリットは、コンピュータによる数値計算に適している点にある。
特に変数が増える重回帰分析では、行列演算を用いることが標準的である。

回帰係数の導出

回帰係数aとbの導出過程を整理すると、以下の手順となる。

  1. ステップ1: 各変数の平均を計算する
    x¯=1Ni=1Nxi
    y¯=1Ni=1Nyi

  2. ステップ2: xの母分散を計算する
    σx2=1Ni=1N(xix¯)2

  3. ステップ3: xとyの共分散を計算する
    Cxy=1Ni=1N(xix¯)(yiy¯)

  4. ステップ4: 傾きaを計算する
    a=Cxyσx2

  5. ステップ5: 切片bを計算する
    b=y¯ax¯


この手順に従えば、任意の2変数データに対して回帰直線を求めることができる。


回帰分析の推定精度

回帰分析の推定精度を表すには、寄与率 R2 を用いる。

R2=1Sei=1N(yiy¯)2


  • 寄与率 R2 は、0〜1の範囲にあり、回帰直線の精度が高いほど寄与率は1に近づく。
  • 相関係数 rxy の2乗が寄与率 R2 に等しい。
    R2=(rxy)2=(相関係数)2


寄与率 R2 は、回帰モデルがデータの変動をどれだけ説明できるかを示す指標である。
例えば R2=0.8 であれば、データの変動の80[%]が回帰モデルによって説明できることを意味する。

残差の2乗和 Se は、回帰モデルで説明できない変動の大きさを表す。
全変動 i=1N(yiy¯)2 は、回帰モデルで説明できる変動と説明できない変動に分解できる。

i=1N(yiy¯)2=i=1N(yi^y¯)2+i=1N(yiyi^)2


左辺を全変動、第1項を回帰変動、第2項を残差変動と呼ぶ。

寄与率は、回帰変動が全変動に占める割合として定義される。

寄与率の解釈

寄与率の値に応じた解釈の目安は以下の通りである。

寄与率の解釈目安
寄与率 R2 解釈
0.9以上 非常に高い説明力
0.7〜0.9 高い説明力
0.5〜0.7 中程度の説明力
0.3〜0.5 弱い説明力
0.3未満 説明力が低い


ただし、分野やデータの性質によって解釈は異なる。
社会科学では、R2=0.3 程度でも有用とされることがあるが、物理学等では0.95以上が求められる場合がある。


回帰分析の使い道

  • 回帰直線を使用して、yの推定に利用する。
    y^=ax+b=a(xx¯)+y¯

  • 代入するxの値には注意が必要である。


回帰分析の主な応用分野は以下の通りである。

  • 予測・予報
    過去のデータに基づいて将来の値を推定する。気象予報、株価予測、需要予測等
  • 要因分析
    ある変数に影響を与える要因の強さを定量化する。マーケティングでの効果測定等
  • トレンド分析
    時系列データにおける長期的な傾向を把握する。売上推移、人口動態等
  • 品質管理
    製造プロセスにおける管理図の作成や不良率の予測


内挿と外挿

回帰直線を用いてyを推定する際、代入するxの値の範囲によって注意が必要である。


  • 内挿 (問題なし)
    元データの最小 x代入する x元データの最大 x
    観測データの範囲内での推定は、回帰モデルの精度が保証される。
  • 外挿 (問題あり)
    代入する x元データの最小 x
    または
    元データの最大 x代入する x
    観測データの範囲外での推定は、モデルの妥当性が保証されない。
    回帰直線がデータの範囲外でも同じ傾向を保つ保証はない。

    ただし、外挿しても問題ない場合もあるため、推定結果が妥当かどうかを常に考えることが重要である。
    理論的に直線関係が保証される場合や、過去の経験から外挿が有効と判断できる場合がある。



回帰分析の手順

回帰分析を実施する場合の標準的な手順は、以下の通りである。


  1. ステップ1: 散布図の作成
    データの分布傾向を視覚的に確認する。
    直線関係があるか、外れ値がないかを確認する。

  2. ステップ2: 基本統計量の計算
    xとyの平均、母分散、母標準偏差を計算する。

  3. ステップ3: 共分散の計算
    xとyの共分散 Cxy を計算する。

  4. ステップ4: 相関係数の計算
    rxy=Cxyσxσy
    相関の強さを確認する。

  5. ステップ5: 回帰係数の計算
    傾きaと切片bを計算する。
    a=Cxyσx2
    b=y¯ax¯

  6. ステップ6: 回帰直線の構築
    y^=ax+b

  7. ステップ7: 寄与率の計算
    R2=rxy2
    モデルの当てはまりを評価する。

  8. ステップ8: 残差分析
    残差の分布を確認し、モデルの妥当性を検証する。


この手順を順番に実行することで、確実に回帰分析を完了できる。


具体例: 身長と体重の回帰分析

ある5人の身長と体重のデータについて、回帰分析を行なう。

身長と体重のデータ
身長(cm) 体重(kg)
150.2 56.4
155.0 52.9
163.5 72.2
172.1 68.1
178.6 79.7


計算手順

  • x: 身長、y: 体重として計算を進める。

  • 身長の平均
    x¯=150.2+155.0+163.5+172.1+178.65=163.9[cm]
  • 体重の平均
    y¯=56.4+52.9+72.2+68.1+79.75=65.9[kg]
  • 身長の母分散
    σx2=15i=15(xi163.9)2=110.1[cm2]
  • 体重の母分散
    σy2=15i=15(yi65.9)2=99.3[kg2]
  • 身長と体重の共分散
    Cxy=15i=15(xi163.9)(yi65.9)=93.1[cm*kg]
  • 傾きa
    a=Cxyσx2=93.1110.1=0.846
  • 切片b
    b=y¯ax¯=65.90.846×163.9=72.738


結果の解釈

以上の計算結果から、回帰直線は以下のようになる。

y^=0.846x72.738

  • 寄与率
    R2=rxy2=0.8902=0.793
    寄与率は0.793であり、身長による体重の変動の約79.3[%]を説明できることを示している。

  • 回帰直線の解釈
    傾きa = 0.846は、身長が1[cm]増加すると体重が平均して約0.85[kg]増加することを意味する。
    切片b = -72.738は、身長が0[cm]の時の体重を表すが、実際的な意味は持たない。
    この理由は、身長0[cm]は観測データの範囲外であり、外挿の一例である。





Excelによる回帰分析

Excelは、回帰分析を簡単に実行できる強力なツールである。
Microsoft 365 / Excel 2021では、以下に示す方法で回帰分析を実施できる。

散布図による方法

Excelの散布図に近似曲線を追加する方法は最も簡便である。

  1. データをワークシートに入力する。
  2. データ範囲を選択して、[挿入]タブから[散布図]を選択する。
  3. 作成されたグラフ上でデータ点を右クリックし、[近似曲線の追加]を選択する。
  4. [書式設定]ウィンドウで[線形]を選択する。
  5. [グラフに式を表示する]、[グラフにR-2乗値を表示する]にチェックを入力する。


この方法では、回帰式と寄与率がグラフ上に自動表示される。

視覚的に確認できるため、探索的な分析に適している。

分析ツールによる方法

より詳細な統計量が必要な場合は、[分析ツール]を使用する。

  1. [データ]タブの[データ分析]を選択する。
    表示されない場合は、アドインで[分析ツール]を有効にする必要がある。
  2. [回帰分析]を選択して、[OK]ボタンを押下する。
  3. 入力Y範囲に目的変数のセル範囲を入力する。
  4. 入力X範囲に説明変数のセル範囲を入力する。
  5. [ラベル]にチェックを入力する。(変数名を含む場合)
  6. 出力先を指定して、[OK]ボタンを押下する。


分析ツールの出力には、回帰統計 ( R,R2 )、分散分析表、回帰係数の推定値、t値、P値等が含まれる。

統計的な検定を伴う本格的な分析に適している。

関数による方法

Excelのワークシート関数を用いて個別に計算することも可能である。

Excelの回帰分析関数
関数 用途 書式
SLOPE 回帰直線の傾き =SLOPE(既知のy, 既知のx)
INTERCEPT 回帰直線の切片 =INTERCEPT(既知のy, 既知のx)
RSQ 寄与率( R2 ) =RSQ(既知のy, 既知のx)
LINEST 回帰統計の配列 =LINEST(既知のy, 既知のx)
FORECAST 回帰直線による予測 =FORECAST(x, 既知のy, 既知のx)


関数を用いる利点は、データが更新された時に自動的に再計算される点にある。

定期的に更新されるデータの分析に適している。

ソルバーによる方法

Excelのソルバーを用いると、最小2乗法の原理を直接体験できる。

  1. ワークシート上に回帰係数a、bのセルを準備する。
  2. 予測値を計算するセルを作成する。(=a* x + b)
  3. 残差の2乗 (=(観測値 - 予測値)^2) を計算するセルを作成する。
  4. 残差の2乗の和を計算するセルを作成する。(=SUM(残差の2乗の範囲))
  5. [データ]タブの[ソルバー]を選択する。
  6. 目的セルに残差の2乗和のセルを指定する。
  7. 目標値を[最小値]に設定する。
  8. 変更するセルに回帰係数a、bのセルを指定する。
  9. [解決]ボタンを押下する。


ソルバーは最適化手法を用いて残差の2乗和を最小化する。

最小2乗法の概念を直感的に理解するのに有用である。


Pythonによる回帰分析

Pythonは、統計分析や機械学習に広く利用されるプログラミング言語である。

NumPy、SciPy、Matplotlib等のライブラリを用いて回帰分析を記述することができる。

NumPyを用いた実装

NumPyのpolyfit関数を用いると、1行で回帰係数を求められる。

 import numpy as np
 
 # データの定義
 height = np.array([150.2, 155.0, 163.5, 172.1, 178.6])
 weight = np.array([56.4, 52.9, 72.2, 68.1, 79.7])
 
 # 回帰係数の計算 (1次: 直線)
 a, b = np.polyfit(height, weight, 1)
 
 # 寄与率の計算
 y_pred = a * height + b
 ss_res = np.sum((weight - y_pred) ** 2)
 ss_tot = np.sum((weight - np.mean(weight)) ** 2)
 r_squared = 1 - ss_res / ss_tot
 
 print(f"傾き a = {a:.3f}")
 print(f"切片 b = {b:.3f}")
 print(f"寄与率 R² = {r_squared:.3f}")


SciPyを用いた実装

SciPyのlinregress関数を用いると、回帰統計量も一括で取得できる。

 from scipy import stats
 
 # データの定義
 height = [150.2, 155.0, 163.5, 172.1, 178.6]
 weight = [56.4, 52.9, 72.2, 68.1, 79.7]
 
 # 線形回帰
 slope, intercept, r_value, p_value, std_err = stats.linregress(height, weight)
 
 print(f"傾き: {slope:.3f}")
 print(f"切片: {intercept:.3f}")
 print(f"相関係数: {r_value:.3f}")
 print(f"寄与率 R²: {r_value**2:.3f}")
 print(f"P値: {p_value:.6f}")
 print(f"標準誤差: {std_err:.3f}")


Matplotlibを用いたプロット

回帰直線を含む散布図を作成する例である。

 import numpy as np
 import matplotlib.pyplot as plt
 
 height = np.array([150.2, 155.0, 163.5, 172.1, 178.6])
 weight = np.array([56.4, 52.9, 72.2, 68.1, 79.7])
 
 a, b = np.polyfit(height, weight, 1)
 x_line = np.linspace(145, 185, 100)
 y_line = a * x_line + b
 
 plt.scatter(height, weight, label='観測値')
 plt.plot(x_line, y_line, 'r-', label=f'y = {a:.3f}x + {b:.3f}')
 plt.xlabel('身長 (cm)')
 plt.ylabel('体重 (kg)')
 plt.legend()
 plt.grid(True)
 plt.show()


Pythonを用いるメリットは、処理の自動化、大規模データの分析、複雑な統計モデルの構築が容易な点にある。


Rによる回帰分析

Rは統計計算とグラフィックに特化したプログラミング言語である。

回帰分析は、lm関数を用いて簡潔に記述することができる。

基本的な回帰分析

以下の例は、lm関数を用いて回帰モデルを構築する例である。

 # データの定義
 height <- c(150.2, 155.0, 163.5, 172.1, 178.6)
 weight <- c(56.4, 52.9, 72.2, 68.1, 79.7)
 
 # 線形回帰モデルの構築
 model <- lm(weight ~ height)
 
 # 結果の表示
 summary(model)


結果の解釈

summary関数の出力には以下の情報が含まれる。

  • Coefficients
    Estimate: 回帰係数の推定値 (傾きと切片)
    Std. Error: 標準誤差
    t value: t統計量
    Pr(>|t|): P値

  • Residual standard error
    残差の標準誤差

  • Multiple R-squared
    寄与率 (R2)

  • Adjusted R-squared
    自由度調整済み寄与率

  • F-statistic
    F検定統計量


プロット

以下の例は、回帰直線を含む散布図を作成する例である。

 # 散布図の作成
 plot(height, weight, pch=19, col="blue", xlab="身長 (cm)", ylab="体重 (kg)")
 
 # 回帰直線の追加
 abline(model, col="red", lwd=2)
 
 # 予測値の追加
 new_height <- data.frame(height = seq(145, 185, by=1))
 pred <- predict(model, newdata=new_height, interval="confidence")
 lines(new_height$height, pred[, "fit"], col="red", lwd=2)
 lines(new_height$height, pred[, "lwr"], col="red", lty=2)
 lines(new_height$height, pred[, "upr"], col="red", lty=2)


Rは統計学の教科書や論文の分析に最も近い記述ができ、統計的な解釈に優れている。


回帰分析の注意点

回帰分析を適用する際には、いくつかの注意点がある。

これらを無視すると誤った結論を導く可能性がある。

外れ値の影響

外れ値は回帰直線に大きな影響を与える。

  • 外れ値の影響
    最小2乗法は誤差の2乗和を最小化するため、外れ値の影響が強調される。
    1つの外れ値で回帰直線の傾きが大きく変わることがある。

  • 対処法
    散布図を作成して外れ値を視覚的に確認する。
    外れ値が測定誤差であれば削除または修正する。
    外れ値が正当なデータであれば、ロバスト回帰等の手法を検討する。
    外れ値を含む場合と除いた場合の両方で分析を行い、結果の頑健性を確認する。


残差分析

残差分析は、回帰モデルの妥当性を評価する重要な手段である。

  • 残差の定義
    ei=yiyi^
    観測値と予測値の差である。

  • 残差プロット
    横軸に予測値またはx、縦軸に残差をプロットする。
    理想的には、残差は0を中心にランダムに分布する。

  • 確認すべきパターン
    残差に系統的なパターンがある場合、直線モデルが不適切である可能性がある。
    残差の分散がxの値によって変化する場合 (異方性) 、モデルの仮定が崩れている。
    残差の分布が正規分布から大きくずれている場合、推定値の信頼性が低下する。

  • 対処法
    非線形関係が疑われる場合は、多項式回帰や対数変換を検討する。
    異方性の場合は、重み付き最小2乗法を用いる。




その他の注意点

  • 相関と因果
    回帰分析で相関が見つかっても、必ずしも因果関係があるとは限らない。
    交絡変数 (第3の変数) の影響を考慮する必要がある。

  • 回帰モデルの仮定
    誤差項は平均0、等分散、互いに独立であることが仮定されている。
    これらの仮定が満たされない場合、推定値の性質が損なわれる。

  • 外挿の危険性
    観測範囲外での予測は、モデルの外挿になり信頼性が低下する。
    特に生物学的・物理的な限界がある変数では注意が必要である。



関連情報