重回帰分析 — 交絡を制御して本当の効果を見る
「勉強時間が長いほど成績が悪い」── 変数を1つ加えるだけで、結論がひっくり返る瞬間がある。これが交絡の正体。
重回帰分析 — 複数の変数で予測する
変数が1つなら直線、2つなら3D空間の平面。 でも大事なのは幾何ではなく「なぜ変数を加えるのか」——交絡(隠れた変数の影響)を取り除いて、各変数の純粋な効果を見るためだ。 まず左右の比較パネルで「β₁が変わる瞬間」を体感しよう。
- Step 1: デフォルト(相関 = −0.5)で左右のβ₁を見比べる。単回帰のほうが小さい——勉強の効果が過小評価されている。
- Step 2: 相関スライダーを0にする → 左右のβ₁がほぼ同じに。「交絡がなければ差は出ない」。
- Step 3: 相関を+0.5にする → 今度は単回帰のβ₁が大きすぎる。交絡の方向で過小にも過大にもなる。
- Step 4: R²の変化も確認。重回帰は常に単回帰以上——変数を加えて説明力が上がった。
▶ 単回帰 vs 重回帰 — β₁が変わる瞬間
- Step 1: 3Dグラフをドラッグして回転。半透明の面が回帰平面——データ点がこの面に沿って並んでいる。
- Step 2: 勉強時間のスライダーを動かす → 予測点が平面の「x₁方向」に移動。傾き = β₁。
- Step 3: 睡眠時間も動かす → 「x₂方向」に移動。傾き = β₂。2つの変数それぞれの貢献が見える。
- Step 4: 再サンプリングを数回押す → β₁, β₂, R²が毎回少し変わる。推定値にも「ばらつき」がある。
// 交絡って何が起きている?
上の比較パネルで「単回帰のβ₁」と「重回帰のβ₁」が違う値になったのを見た。
なぜ同じデータなのに、変数を1つ加えただけで傾きが変わるのか?
データの裏ではこういうことが起きている:
勉強時間↑ → 睡眠↓ → 成績↓(間接的なマイナス効果)
単回帰のβ₁は「直接効果+間接効果」のごちゃ混ぜ。
勉強の直接効果は+3点/hなのに、睡眠を削ることで間接的に点数が下がるから、単回帰では+2.2のように過小評価される。
重回帰のβ₁は「睡眠を統計的に固定した上での、勉強だけの効果」。
間接経路を遮断して、直接効果だけを取り出している——これが偏回帰係数の意味。
上のパネルで相関を0にすると、間接経路が消えて単回帰と重回帰のβ₁が一致する——これが「交絡がない状態」。
// ここで使われる公式
各パーツの役割
・β₀(切片):すべての変数が0のときの予測値。ベースライン
・β₁x₁:「x₂ を固定したまま x₁ が1増えたら y がいくつ変わるか」× x₁ の値
・β₂x₂:同様に「x₁ を固定したまま x₂ が1増えたら」の貢献分
単回帰との違い
・単回帰のβ₁ = x₁の直接効果 + x₂を経由した間接効果(ごちゃ混ぜ)
・重回帰のβ₁ = x₁の直接効果だけ(x₂の影響を「統計的に固定」して取り出す)
・上のパネルで相関=0にすると間接経路が消え、両者が一致するのはこのため
幾何的イメージ
・2変数なら予測面は平面(3Dグラフの半透明の面)。データ点と平面の距離(残差)の二乗和が最小になる傾きを選ぶ
// 手を動かしてみよう — 具体例
30人の学生のテスト成績を、勉強時間と睡眠時間で予測する。
① まず平均を確認
勉強時間の平均 = 5.0h、睡眠時間の平均 = 7.0h、点数の平均 = 65点
勉強と睡眠の相関 r = −0.45(たくさん勉強するほど睡眠が短い)
② 単回帰 y ~ x₁(勉強時間だけ)
β₁ = +2.4 点/h、R² = 0.32
→ 勉強1時間あたり2.4点UP...でもこれは過小評価
③ 重回帰 y ~ x₁ + x₂(睡眠時間を追加)
β₁ = +3.1 点/h、β₂ = +2.0 点/h、R² = 0.57
→ 睡眠をコントロールしたら、勉強の効果は3.1点に上がった
④ なぜ変わった?
このデータでは 勉強↑ → 睡眠↓ (r = −0.45)。
単回帰は「勉強が増えると同時に睡眠が減ることのマイナス」まで勉強のせいにしていた。
重回帰が睡眠を分離したことで、勉強の本当の効果が見えた。
⑤ 予測してみる
β₀ は ȳ − β₁x̄₁ − β₂x̄₂ = 65 − 3.1×5 − 2.0×7 = 35.5 と決まる(OLS回帰は必ず平均点を通る)。
勉強6h・睡眠7hの学生 → ŷ = 35.5 + 3.1×6 + 2.0×7 = 35.5 + 18.6 + 14.0 = 68.1点
β₀ は「勉強0h・睡眠0hの仮想スコア」で、ここでは直感的な意味を持たない(外挿に注意)。
// よくある誤解
「勉強時間(0〜10時間)」と「睡眠時間(4〜10時間)」ではスケールが違う。係数の大きさを比べるには標準化偏回帰係数(どちらも標準偏差1に揃えた係数)を使う必要がある。
R² は変数を増やせば必ず上がるが、自由度調整済み R² は下がることがある。不要な変数はノイズを増やして推定を不安定にする。上のシミュレーションで、係数がほぼ0の変数があるなら、それは不要かもしれない。
「勉強時間」と「図書館にいた時間」のように強く相関する2変数を同時に入れると、個々の係数がガタつく(片方の符号が逆転することも)。VIF > 10 が危険信号。
// よく出会う形
重回帰のまわりでは、係数の解釈と検定の対比が同じ形で繰り返し顔を出します。
- 偏回帰係数の絵:β₁ = 3 のとき、「x₂ を固定したまま x₁ を1増やすと y が平均3増える」という形に読める。「他の変数を止める」という条件付きが、いつもこの絵に張り付いている
- 単回帰と重回帰でβ₁がずれる場面:変数間に相関があると、単回帰は直接効果と間接効果を一つの数字に混ぜてしまう。上のパネルで相関をゼロにすると両者が一致する形になる
- R² と自由度調整済み R² の対比:変数を足したときに、R² は必ず上がるが、調整済みは下がることがある。「下がったら、その変数は分の悪い追加だった」という形がここに現れる
- F検定と t検定の役割分担:F検定は「すべての偏回帰係数 = 0」を一括で見る形、t検定は「個別に 0 か」を見る形。モデル全体と個別係数で問いが分かれている
- 多重共線性のシグナル:VIF > 10 が目安として顔を出し、係数がガタつく場面の前触れになる