Topic 30
重回帰分析の発展:標準化係数・VIF・変数選択
Advanced multiple regression in R: standardized beta, VIF, and model selection
基本の <span class="inline-code">lm()</span> が動くようになったあとに、「どの説明変数が相対的に効いているか」「多重共線性は大丈夫か」「モデル選択はどう考えるか」を整理したい人向けの発展ページです。
講義資料では、OLS の出力の読み方、標準化偏回帰係数、多重共線性の VIF、AIC による変数選択、さらに ggstats と parameters を使った係数表の見せ方まで順に紹介されていました。
このページでは、まず基本の重回帰ページを土台にしつつ、<strong>係数の大きさ比較・VIF・step()・係数プロット</strong>をまとめて動かせるようにします。
このページのゴール
- summary(lm()) から係数、p 値、F 検定、調整済み R² を読み取れる
- scale() を使って標準化偏回帰係数の考え方を体験できる
- car::vif() で多重共線性の入口チェックができる
- step() による AIC ベースの変数選択を「補助的な探索」として使える
- 係数プロットや表を書き出してレポートへ載せる準備ができる
まず押さえるポイント
このページで追加する視点
基本の重回帰のあとに、係数比較・VIF・AIC・可視化という4つの実務ポイントをまとめて整理します。
重回帰分析を初めて学ぶ段階では、まず lm() と summary() が読めれば十分です。ただ、レポートや卒論で使い始めると、「どの説明変数がより重要か」「説明変数どうしが似すぎていないか」「変数をどこまで入れるか」という実務的な疑問が出てきます。
このページでは、OLS の基本結果に加えて、標準化偏回帰係数、多重共線性の VIF、AIC によるステップワイズ法、係数表の可視化を一度に体験します。
分析の前提
何を追加で見るのか
標準化偏回帰係数
単位の違う説明変数どうしを比べるときは、元の係数よりも標準化係数の方が比較しやすくなります。説明変数だけでなく目的変数も標準化したモデルを別途作るのが簡単です。
VIF
説明変数どうしが強く相関していると、係数が不安定になりやすくなります。VIF はその入口チェックとして便利です。
ステップワイズ法は「答え」ではなく補助
step() は AIC を基準に変数を出し入れしますが、理論や研究計画を置き換えるものではありません。説明変数が多いときの初期探索として使う、という位置づけが安全です。
前提条件の確認
基本の重回帰と同じく確認すること
線形性
目的変数と各説明変数の関係が極端に曲がっていないかを散布図で見ます。
残差診断
残差 vs 予測値、QQプロット、Cook's distance などを確認します。
多重共線性
相関行列や VIF で、説明変数どうしの重なりすぎを確認します。
変数選択の妥当性
統計指標だけでなく、理論・先行研究・解釈可能性も合わせて見ます。
データ構造
ここで使う練習用データ
練習用データは中古車価格を想定しています。price_man を目的変数、mileage_km・condition_score・age_years を説明変数として使います。
走行距離と使用年数にはある程度の関連があり得るので、VIF を確認する例としても扱いやすい構造です。
R code
Rコードを順番に実行する
library(tidyverse)
dat <- read.csv("sample-data/sample_multiple_regression_advanced_usedcar.csv")
str(dat)
summary(dat)
reg <- lm(price_man ~ mileage_km + condition_score + age_years, data = dat)
summary(reg)# 目的変数も説明変数も標準化したモデルを別に作る
dat_z <- as.data.frame(scale(dat))
summary(lm(price_man ~ mileage_km + condition_score + age_years, data = dat_z))if (!require("car")) install.packages("car")
library(car)
vif(reg)
reg_full <- lm(price_man ~ mileage_km + condition_score + age_years, data = dat)
step(reg_full, direction = "both", trace = FALSE)if (!require("ggstats")) install.packages("ggstats", dependencies = TRUE)
library(ggstats)
ggcoef_table(reg, table_text_size = 4, intercept = TRUE)出力の読み方
まず summary()、次に VIF
summary(reg) では、まず各係数の推定値と p 値、次に F 検定、最後に調整済み R² を確認します。標準化モデルは「どの説明変数の寄与が相対的に大きいか」を見る補助として使います。
VIF は説明変数どうしの重なりすぎの目安です。しきい値は文献によって幅がありますが、値が大きいほど係数が不安定になりやすい、と理解しておくと実務上は十分です。
図の読み方
係数プロットで何を見るか
係数プロットでは、各変数の点推定と信頼区間を一覧で比べられます。信頼区間が 0 をまたいでいるか、効果の向きが正か負か、点の位置がどれくらい離れているかを確認します。
表だけだと見落としやすいので、レポートでは係数表と係数プロットを併用すると読み手に伝わりやすくなります。
レポート文例
結果をどう書くか
日本語の例
中古車価格を目的変数とし、走行距離、状態、使用年数を説明変数とする重回帰分析を行った。その結果、状態得点は他の変数を調整しても価格と正に関連していた一方、使用年数は価格と負に関連していた。説明変数間の多重共線性を確認するために VIF を算出したところ、いずれも極端に大きい値ではなく、致命的な共線性は示唆されなかった。
English example
A multiple regression analysis was conducted with used-car price as the dependent variable and mileage, condition score, and vehicle age as predictors. After adjustment for the other predictors, condition score showed a positive association with price, whereas vehicle age showed a negative association. Variance inflation factors did not suggest severe multicollinearity among the predictors.
よくあるミス
つまずきやすい点
標準化係数だけで本文を書く
本文では非標準化係数の方が解釈しやすいことも多いです。標準化係数は比較用の補助と考えます。
VIF を絶対的なしきい値でだけ判断する
値の大小だけでなく、理論、相関行列、推定の安定性も合わせて見ます。
step() の結果をそのまま正解とみなす
理論や先行研究を無視した機械的選択は避けます。
係数の符号だけで因果を語る
OLS は関連を示すモデルであり、設計や理論なしに因果と断定できません。
FAQ
よくある質問
Q. VIF はいくつから危険ですか?
A. 文献によって 5 や 10 など幅があります。大切なのは「値が大きいほど係数が不安定になりやすい」と理解し、相関行列や理論も合わせて見ることです。
Q. 標準化偏回帰係数は必須ですか?
A. 必須ではありませんが、単位の違う説明変数どうしの相対比較には便利です。
Q. 目的変数が 0/1 のときもこのままですか?
A. いいえ。線形回帰ではなくロジスティック回帰へ進みます。
代替手法
代替手法・次のステップ
目的変数の型や研究設計によって、次に選ぶモデルが変わります。
ロジスティック回帰
目的変数が 0/1 のときはこちらへ進みます。
階層的重回帰・交互作用
説明変数を順番に投入したり、交互作用項を加えたりして理論仮説を検証したいときに使います。
媒介分析
ある変数の効果が別の変数を経由しているかを検討したいときの発展先です。
参考資料
参考資料
OLS の基本、VIF、係数可視化、表の書き出しという順で参照すると流れがつかみやすいです。
運営と利用上の注意
このページの位置づけ
本サイトのトピックページは、Rによるデータ分析の学習支援とレポート作成の補助を目的としたオリジナル解説です。サンプルデータとコードは再現練習用に作成しているため、実データを扱う際には研究計画・前提条件・欠測・外れ値・尺度水準をあらためて確認してください。
編集方針
ページ本文は、標準的な統計手法、Rの公式ドキュメント、一次資料に近い参考文献を優先して整理しています。更新や訂正の方針は編集方針ページで公開しています。