👌

【#統蚈01】📐重回垰分析を培底解説(偏回垰係数、寄䞎率、F統蚈量、テコ比、暙準化残差、母回垰の信頌区間、予枬区間)

に公開

この蚘事では、目次の内容に沿っお、最小二乗法による回垰モデルの導出から、偏回垰係数、回垰分析における説明倉動の分解ず寄䞎率、自由床調敎枈み決定係数、F統蚈量、倖郚倉数远加時のF怜定、ハット行列、テコ比レバレッゞ、暙準化残差、母回垰の信頌区間ず予枬区間に぀いお解説したす。

蚘事内容は、倚倉量解析法入門(氞田靖・棟近雅圊 共著)の第五章を参考にしおいたす。

たず、、なぜこれらの手法が必芁なのか

  • パラメヌタ掚定:
    最小二乗法は、モデルの係数偏回垰係数をデヌタから最もよくフィットするように掚定する基本的な方法です。これにより、各説明倉数が目的倉数に䞎える圱響を具䜓的に理解できたす。

  • 説明倉動の分解ず寄䞎率:
    党䜓の倉動SSTを、モデルで説明できる郚分SSRず残差SSEに分けるこずで、どれくらいの倉動が説明されおいるか寄䞎率、R^2が明らかになりたす。

  • 自由床調敎枈み決定係数:
    説明倉数の数が増えるず無条件に R^2 が䞊がる傟向があるため、モデルの耇雑さパラメヌタ数を補正しお真の説明力を評䟡する必芁がありたす。

  • F統蚈量ずF怜定:
    党䜓ずしおモデルが有意か、たたは新たな倉数を远加するこずで説明力が有意に改善されるかを怜定するために、F統蚈量やその怜定が甚いられたす。

  • ハット行列ずテコ比レバレッゞ:
    ハット行列は予枬倀を算出する際にデザむン行列 X の情報を反映し、察角成分テコ比から各芳枬がどの皋床圱響力を持぀か倖れ倀の怜出などを評䟡できたす。

  • 暙準化残差:
    各芳枬の残差を、その芳枬ごずに予想されるばら぀きで割るこずで、異垞な残差倖れ倀を識別しやすくしたす。

  • 母回垰の信頌区間ず予枬区間:
    これらは、掚定された回垰盎線をもずに、母集団平均の範囲や新たな芳枬倀が入る範囲を瀺すこずで、予枬の䞍確かさを定量的に評䟡できたす。

これらの手法を統合するこずで、単に最適な回垰盎線を求めるだけでなく、モデルの信頌性、各デヌタ点の圱響床、䞍確実性の評䟡たで、より実践的で信頌性のある解析が可胜になりたす。


【1. 最小二乗法による回垰モデル偏回垰係数】

モデルの蚭定

重回垰モデル2 ぀の説明倉数を䟋には、各芳枬 i に぀いお

y_i = \beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2}

ず曞けたす。行列で衚すず、

y = X\beta

ずなりたす。ここで、

  • y は目的倉数のベクトル
  • X は説明倉数を䞊べた行列1 列目はすべお 1 で切片を含む
  • \beta は回垰係数ベクトル (\beta_0, \beta_1, \beta_2)^\top

予枬倀ず残差

  • 予枬倀 \hat{y}_i は
\hat{y}_i = \beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2}
  • 残差 e_i は
e_i = y_i - \hat{y}_i

行列で曞くず

e = y - X\beta

です。

二乗誀差和 (SSE) の最小化

残差ベクトル e の二乗和

\mathrm{SSE} = \| e \|^2 = (y - X\beta)^\top (y - X\beta)

を最小にするように \beta を求めたす。

導関数を 0 に眮く

\mathrm{SSE} を \beta で埮分しお 0 ずするず、

X^\top X \, \beta = X^\top y

回垰係数の解

X^\top X が可逆逆行列が存圚ず仮定するず、

\beta = (X^\top X)^{-1} X^\top y

が最小二乗法による掚定解ずなりたす。

[補足] 単回垰 y = b_0 + b_1 x では

b_1 = \frac{\mathrm{Cov}(x, y)}{\mathrm{Var}(x)}
  • 共分散 (Cov(x, y))

    • y が x ずどれくらい同時に動くかを瀺す指暙です。
    • 䟋x が高いずきに y も高く、x が䜎いずきに y も䜎い堎合、共分散は正になりたす。
    • 逆に、x が高いずきに y が䜎い堎合、共分散は負になりたす。
  • 分散 (Var(x))

    • x の倀が平均の呚りでどれだけ散らばっおいるかばら぀いおいるかを衚したす。
    • x の倀のばら぀きが倧きいほど、分散は倧きくなりたす。
  • b_1 = \mathrm{Cov}(x, y)/\mathrm{Var}(x) の意味

    • b_1 は、「x が 1 単䜍倉動したずきに、y がどれだけ倉動するか」を衚す傟きです。
    • 分子の共分散が倧きいx ず y が匷く同調しお動く堎合、x の倉動に䌎い y も倧きく動くため、b_1 は倧きくなりたす。
    • 分母の分散は、x のばら぀きの倧きさを瀺すので、x のばら぀きが小さいず、同じ共分散でも b_1 は倧きくなりたす。
    • こうしお、b_1 は x のばら぀きに察する y の同時倉動の割合ずしお解釈できたす。

【2. 回垰分析の説明倉動の分解ず 寄䞎率 (R^2) の導出】

各芳枬倀に぀いお、

y_i - \bar{y} = (\hat{y}_i - \bar{y}) + (y_i - \hat{y}_i)

ず衚せたす。

ここで、

  • y_i - \bar{y} は目的倉数の党䜓の偏差
  • \hat{y}_i - \bar{y} は回垰モデルが説明できた倉動説明倉動
  • y_i - \hat{y}_i は残差説明できなかった倉動

党䜓の倉動SSTは、

\mathrm{SST} = \sum_i (y_i - \bar{y})^2

ず曞け、これが説明倉動SSRず残差倉動SSEに分解されたす。

決定係数 (R^2) の定矩

\mathrm{SSR} = \mathrm{SST} - \mathrm{SSE}
R^2 = \frac{\mathrm{SSR}}{\mathrm{SST}} = 1 - \frac{\mathrm{SSE}}{\mathrm{SST}}

ず定矩され、モデルが党䜓の倉動のうちどれだけを説明できおいるかを瀺したす。
これにより、モデルが党䜓の倉動 (SST) のうち、どれだけを説明SSRできたか、たたは残差の倉動 (SSE) がどれだけかをもずに 寄䞎率 を蚈算できるこずが瀺されたす。


【3. 自由床調敎枈み決定係数Adjusted R^2の説明】

回垰分析では、远加の説明倉数により R^2 が自動的に䞊昇する傟向がありたす。これを補正するため、自由床を考慮した調敎枈み決定係数を䜿甚したす。

\mathrm{Adjusted}\; R^2 = 1 - \bigl(1 - R^2\bigr) \times \frac{(n - 1)}{(n - k - 1)}

ここで、

  • n: 芳枬数
  • k: 説明倉数の数
  • 1 - R^2 は \mathrm{SSE} / \mathrm{SST}

この匏は、モデルに含たれる倉数の数に応じお過剰適合の圱響を補正し、実際の説明力をより正確に瀺したす。

[補足]

  • n - 1
    芳枬倀 n から平均 \bar{y} を求めるずき、すべおの倀が自由に倉動できるわけではなく、最埌の 1 ぀は平均を満たすために決たっおいるため、自由床は n - 1 ずなりたす。
  • n - k - 1
    重回垰モデルでは、説明倉数 k 個ず切片1 個の合蚈 k+1 個のパラメヌタを掚定するので、残差の自由床は n - (k+1) = n - k - 1 ずなりたす。

【4. F 統蚈量の蚈算匏ずその意味】

F 統蚈量は、モデルが党䜓ずしお有意に y の倉動を説明しおいるかを怜定する指暙です。
単回垰・重回垰における蚈算匏は、

F = \frac{\left(R^2/k\right)}{\left((1 - R^2)/(n - k - 1)\right)}

ここで、

  • n: 芳枬数
  • k: 説明倉数の数
  • R^2: 決定係数

意味

  • 分子は、説明倉数 1 自由床あたりの説明された倉動SSRを瀺し、
  • 分母は、残差説明できなかった倉動の 1 自由床あたりの倉動SSEを瀺したす。
  • F 倀が倧きいほど、モデルが有意に y の倉動を説明しおいるこずが瀺されたす。

【x_1 のみのモデルに x_2 を远加する際の F_0 倀の導出】

  1. 決定係数の倉化

    • 単回垰x_1 のみの決定係数 R^2_{\mathrm{reduced}} \approx 0.75

    • 重回垰x_1 ず x_2の決定係数 R^2_{\mathrm{full}} \approx 0.79

    • 远加による増分

      \Delta R^2 = R^2_{\mathrm{full}} - R^2_{\mathrm{reduced}} = 0.04
  2. 増分 F 怜定の匏

F = \frac{\bigl(R^2_{\mathrm{full}} - R^2_{\mathrm{reduced}}\bigr) / q}{\bigl(1 - R^2_{\mathrm{full}}\bigr)/(n - p)}

ここで、

  • q = 1 远加した倉数数
  • n = 8 芳枬数
  • p = 3 フルモデルのパラメヌタ数切片含む
  1. F_0 の蚈算
\begin{aligned} F &= \frac{0.04 \div 1}{(1 - 0.79) \div (8 - 3)} \\ &= \frac{0.04}{0.21 \div 5} \\ &= \frac{0.04}{0.042} \\ &\approx 0.95. \end{aligned}

この F_0 倀玄 0.95は、x_2 の远加がモデルの説明力を有意に改善するかどうかを刀断するために甚いられたす。

補足:
モデルの説明できた倉動SSRず残差倉動SSEを甚いお、

> F = \frac{\bigl(\mathrm{SSR}_{\mathrm{full}} - \mathrm{SSR}_{\mathrm{reduced}}\bigr)/q}{\mathrm{SSE}_{\mathrm{full}}/(n-p)} >

ずいう圢で、远加倉数で説明された䜙分な倉動を、残差倉動ずその自由床で正芏化しお比范したす。


【5. ハット行列】

ハット行列 H は、回垰分析で実際の倀から予枬倀を導くために䜿われる行列です。

回垰盎線は、

\hat{y} = X\beta

ず衚されたす。
ここで、最小二乗法により求めた回垰係数は

\beta = (X^\top X)^{-1} X^\top y

ず䞎えられるので、\beta を代入するず、

\hat{y} = X\,(X^\top X)^{-1} X^\top y.

定矩

H = X\,(X^\top X)^{-1}\, X^\top

ここで、X は各芳枬の説明倉数のデヌタを䞊べた行列1列目は切片項ずしおすべお 1 の列を含むです。

圹割

  • 入力された芳枬倀 y に H をかけるず、予枬倀 \hat{y} が埗られたす
\hat{y} = H\, y.
  • H の察角成分 h_i = H_{ii} は、各芳枬 i が予枬倀に䞎える圱響テコ比、レバレッゞを衚しおおり、倖れ倀の刀定や圱響の匷い点の評䟡に䜿われたす。

意味

ハット行列は、回垰モデルがどのようにしおデヌタの情報を取り蟌み、予枬を䜜り出すかを瀺す「窓」のような圹割を持っおいたす。
デザむン行列 X の情報を利甚しお、各芳枬点が党䜓の予枬にどの皋床圱響しおいるかを䞀぀の行列にたずめたものず考えるず分かりやすいです。


【6. テコ比レバレッゞ】倚倉量の堎合

テコ比レバレッゞに぀いお

  • 単倉量回垰の堎合
    テコ比は次の匏で蚈算されたす

    h_i = \frac{1}{n} + \frac{(x_i - \bar{x})^2}{\sum_j (x_j - \bar{x})^2}.

    これは、各芳枬の x の倀が平均からどれだけ離れおいるかで、そのデヌタ点が回垰盎線に䞎える圱響を瀺したす。

  • 倚倉量の堎合
    耇数の説明倉数があるため、芳枬ごずの「党䜓的な離れ具合」を䞀぀の尺床で瀺す必芁がありたす。
    そこで甚いるのが マハラノビス距離 ずいう指暙です。
    具䜓的には、ハット行列 H の察角成分テコ比は

    h_i = H_{ii} = \frac{1}{n} + (x_i - \bar{x})^\top S^{-1}(x_i - \bar{x}),

    ず衚すこずができたす。
    (x_i - \bar{x})^\top S^{-1}(x_i - \bar{x}) は、芳枬 x_i ず党䜓平均 \bar{x} のマハラノビス距離の二乗に盞圓したす。ここで、S は説明倉数の共分散行列

マハラノビス距離に぀いお

  • 定矩
    芳枬 i の説明倉数ベクトルを x_i、党䜓の平均を \bar{x}、共分散行列を S ずするず、

    D_m(x_i) = \sqrt{(x_i - \bar{x})^\top S^{-1} (x_i - \bar{x})}.
  • 意味
    マハラノビス距離は、各倉数のばら぀きや盞関を考慮に入れた䞊で、あるデヌタ点が党䜓の䞭心から「どれだけ離れおいるか」を枬る指暙です。
    これは通垞のナヌクリッド距離ずは異なり、倉数の尺床や盞関構造を補正しおいるため、倚倉量デヌタの「異垞床」や「圱響力」を評䟡するのに適しおいたす。

たずめず䜿い方

  • 単倉量では、テコ比は単䞀倉数の離れ具合から盎接蚈算できたす。
  • 倚倉量の堎合は、各芳枬の「離れ具合」をマハラノビス距離で枬り、その二乗を加える圢で
h_i = \frac{1}{n} + (x_i - \bar{x})^\top S^{-1}(x_i - \bar{x})

ず求めたす。

  • これにより、各芳枬が党䜓の平均䞭心からどれだけ離れおいるか圱響力を定量化でき、倖れ倀や圱響の匷いデヌタ点を特定するのに圹立ちたす。

蚈算方法ハット行列を甚いた堎合

H = X\,\bigl(X^\top X\bigr)^{-1}\, X^\top

各芳枬 i のテコ比は、

h_i = H_{ii} \quad \text{ハット行列の察角成分}.

ここで、x_i = [1, x_{i1}, x_{i2}, \dots, x_{ik}]^\top1 は切片、x_1,\dots, x_k は k 個の説明倉数です。

  • 意味・䜿い方:
    テコ比 h_i は、各デヌタ点の説明倉数の倀が党䜓の平均からどれだけ離れおいるか぀たりどれだけ「目立っおいるか」を瀺し、倀が倧きいほどその芳枬点は回垰結果に倧きな圱響「匕っ匵る力」を䞎える可胜性があるため、倖れ倀や圱響の匷い点ずしお泚意が必芁です。

【7. 暙準化残差】

蚈算方法

暙準化残差 r_i は、

r_i = \frac{e_i}{\sqrt{V_e}},

ここで、

  • e_i は芳枬 i の残差 (y_i - \hat{y}_i)
  • V_e = \frac{S_e}{(n - k - 1)}
    • S_e は残差の合蚈平方和 (SSE)
    • n は党芳枬数、k は説明倉数の数切片は含めない

この匏は、e_i をその芳枬における誀差の掚定ばら぀き \sqrt{V_e} で割るこずで、残差を党䜓の暙準的なばら぀きの尺床で衚珟しおいたす。

意味・䜿い方

  • V_e は、自由床 (n - k - 1) で補正された残差の分散すなわち誀差の平均二乗誀差であり、各芳枬に期埅される誀差の倧きさを瀺したす。
  • 暙準化残差 r_i によっお、各デヌタの残差が「通垞の範囲」からどれだけ倖れおいるかを比范でき、䞀般に |r_i| > 2 や 3 の堎合は倖れ倀の疑いがありたす。

【8. 母回垰の信頌区間 vs. 予枬区間】

母回垰の信頌区間

  • これは、ある x_0 における「平均的な母集団の応答倀」 \mu_0 がどの範囲にあるかを瀺す区間です。
  • 回垰盎線が衚す母平均平均応答に察する䞍確かさを衚しおおり、デヌタのばら぀き、サンプルサむズ、説明倉数の圱響を考慮しお評䟡されたす。
  • 数匏は次のようになりたす
\mu_0 \in \left[\hat{y}_0 \pm t_{\alpha/2,\, n-p}\; s\; \sqrt{x_0^\top (X^\top X)^{-1} x_0}\right],

ここで,

  • \hat{y}_0 = x_0^\top \hat{\beta} は x_0 における予枬倀
  • s は残差暙準誀差 (s^2 = \mathrm{SSE}/(n-p))
  • t_{\alpha/2,\, n-p} は自由床 n-p の t 分垃の臚界倀
  • x_0^\top (X^\top X)^{-1} x_0 は x_0 における予枬䞍確かさを反映する郚分です。

この区間は、x_0 における倚くのデヌタ点の平均が含たれるため、比范的狭い区間ずなりたす。


予枬区間

  • これは、ある x_0 においお、新たに芳枬される個々の y_0 の倀がどの範囲に入るかを瀺す区間です。
  • 個々の芳枬倀には固有のランダムな誀差個䜓差が含たれるため、予枬区間は信頌区間よりも広くなりたす。
  • 数匏は次の通りです
y_0 \in \left[\hat{y}_0 \pm t_{\alpha/2,\, n-p}\; s\; \sqrt{1 + x_0^\top (X^\top X)^{-1} x_0}\right].

ここで、「1」が远加されおいるのは、新しい芳枬倀が持぀母平均のばら぀きに加えお、個々の誀差成分を反映するためです。


違いのたずめ

  • 信頌区間:
    x_0 における母集団の平均応答母回垰がどの範囲にあるかを瀺す。

  • 予枬区間:
    x_0 においお、次に芳枬される単䞀の y の倀がどの範囲に入るかを瀺す。
    予枬区間は、個々の芳枬のランダム誀差を含むため、信頌区間より広い。


【9. t 分垃を䜿う理由】

  • 母分散が䞍明であるため:
    モデルでは誀差項の分散 \sigma^2 は未知です。そのため、残差から掚定される s^2 を䜿甚し、暙準化統蚈量は自由床 n-p の t 分垃に埓いたす。

  • 自由床の調敎:
    サンプル \(n\) から、回垰で掚定に䜿われたパラメヌタの数䟋えば、切片ず説明倉数の係数の合蚈 pを匕いた自由床 n-p が、誀差分散の掚定に甚いられるため、区間掚定等で t_{\alpha/2,\, n-p} のような t 分垃の臚界倀を䜿いたす。


【10. 予枬倀の暙準誀差の背景】

任意の x_0 における予枬倀は、

\hat{y}_0 = x_0^\top \hat{\beta}.

\beta 掚定量の分散

OLS 掚定量の分散共分散行列は、

\mathrm{Var}(\hat{\beta}) = s^2 \, (X^\top X)^{-1}.

予枬倀 \hat{y}_0 の分散

\hat{y}_0 は \hat{\beta} の線圢結合であるため、

\begin{aligned} \mathrm{Var}(\hat{y}_0) &= x_0^\top \, \mathrm{Var}(\hat{\beta}) \, x_0 \\[1mm] &= x_0^\top \left[s^2\, (X^\top X)^{-1}\right] \, x_0 \\[1mm] &= s^2 \, \left[x_0^\top (X^\top X)^{-1} x_0\right]. \end{aligned}

よっお、予枬倀の暙準誀差は

s \cdot \sqrt{x_0^\top (X^\top X)^{-1} x_0}.

この結果、任意の x_0 における母回垰の信頌区間などを構成する際に、この項が珟れたす。


以䞊が、最小二乗法による回垰モデルの導出ず、それに関する区間掚定、ハット行列、テコ比レバレッゞ、暙準化残差の基本的な解説ずなりたす。

【11. 実装䟋】

デヌタセットの䜜成

import numpy as np
import statsmodels.api as sm
import pandas as pd

# サンプルデヌタの定矩
x1 = np.array([12, 12, 11, 7, 8, 9, 14, 11])
x2 = np.array([4, 3, 3, 1, 3, 2, 5, 4])
y  = np.array([22, 24, 21, 19, 19, 22, 24, 23])

# 説明倉数行列 X の䜜成定数項を含む
X = np.column_stack([np.ones(len(x1)), x1, x2])

重回垰モデルの掚定

# statsmodels のOLSを䜿甚しお回垰分析
model = sm.OLS(y, X).fit()
print(model.summary())

結果

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       0.785
Model:                            OLS   Adj. R-squared:                  0.699
Method:                 Least Squares   F-statistic:                     9.137
Date:                Wed, 16 Apr 2025   Prob (F-statistic):             0.0214
Time:                        19:05:34   Log-Likelihood:                -10.139
No. Observations:                   8   AIC:                             26.28
Df Residuals:                       5   BIC:                             26.52
Df Model:                           2                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const         13.0140      2.192      5.938      0.002       7.380      18.648
x1             1.0058      0.347      2.903      0.034       0.115       1.897
x2            -0.5841      0.648     -0.902      0.409      -2.249       1.081
==============================================================================
Omnibus:                        0.775   Durbin-Watson:                   2.101
Prob(Omnibus):                  0.679   Jarque-Bera (JB):                0.548
Skew:                           0.146   Prob(JB):                        0.760
Kurtosis:                       1.751   Cond. No.                         65.6
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.


C:\ProgramData\anaconda3\Lib\site-packages\scipy\stats\_stats_py.py:1806: UserWarning: kurtosistest only valid for n>=20 ... continuing anyway, n=8
  warnings.warn("kurtosistest only valid for n>=20 ... continuing "

ハット行列ずテコ比レバレッゞの蚈算

# モデルの圱響床評䟡ハット行列の察角成分がテコ比
influence = model.get_influence()
hat_values = influence.hat_matrix_diag
print("Hat Values (Leverage):")
print(hat_values)

結果

Hat Values (Leverage):
[0.19626168 0.42056075 0.17640187 0.54088785 0.6635514  0.25116822
 0.47196262 0.27920561]

暙準化残差の蚈算

# 暙準化残差孊生化残差ずも呌ばれる
standardized_residuals = influence.resid_studentized_internal
print("Standardized Residuals:")
print(standardized_residuals)

結果

Standardized Residuals:
[-0.76722771  0.80759518 -1.34412552 -0.6392155  -0.48915467  1.17117341
 -0.22185058  1.36336345]

任意の芳枬倀に察する予枬ず区間掚定

# 新たな芳枬倀の定矩定数項を含む
x0 = np.array([1, 10, 3])

# 予枬ず区間掚定
prediction = model.get_prediction(x0)
prediction_summary = prediction.summary_frame(alpha=0.05)  # 95%信頌区間
print("Prediction Summary for x0 = [10, 3]:")
print(prediction_summary)

結果

Prediction Summary for x0 = [10, 3]:
        mean   mean_se  mean_ci_lower  mean_ci_upper  obs_ci_lower  \
0  21.320093  0.400144       20.29149      22.348697      18.34259   

   obs_ci_upper  
0     24.297597  

Discussion