「adjusted r squared」は統計データ分析の文脈で扱う重要概念のひとつ。 本ページでは「adjusted r squared」を取り巻く中核キーワードを以下にチップで一覧化する。 各キーワードは関連する概念・手法・道具立てを含み、 文献検索や学習計画の起点になる。
これらのキーワードは「adjusted r squared の理解 → 適用 → 検証」のプロセスを構成する。 以降の各セクションで詳しく解説する。
🍰 まずはやさしく
データの当てはまりを測る、厳しめの物差しです。
変数を増やしすぎたときのミスを防ぐために使います。
テスト勉強で、関係ない暗記を増やしても点数が上がらない例に似ています。
この章では、計算式や使いどころについて読みます。
調整済み決定係数 $\bar{R}^2$(Adjusted R²)=説明変数を闇雲に増やしても上がりにくくなるように、 R² を 変数の数 k で罰則調整した指標。 重回帰のモデル比較で第一に見るべき値。
statsmodels.OLS(...).fit().rsquared_adj で取得。 sklearn には無いので自作 (1 - (1-r2)*(n-1)/(n-k-1)) する。この用語は、 統計データ解析・データサイエンスの世界で重要な概念の1つです。 ジャストインタイム型学習では、 必要なときに参照し、 関連概念と合わせて学ぶことで定着を図ります。
この用語の基本的な意味、 数学的定義、 直感的理解について、 ページ後半「🗺️ 概念マップ」節の3つの概念マップを通じて、 関連する用語と一緒に把握しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | # ── この抜粋で使うデータを用意します(SSDSE-B の 47 都道府県・最新年度)── import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1) df = df[df['地域コード'].astype(str).str.match(r'^R\d{5}$', na=False)].copy() df['年度'] = pd.to_numeric(df['年度'], errors='coerce') df = df[df['年度'] == df['年度'].max()] for _c in df.columns[3:]: df[_c] = pd.to_numeric(df[_c], errors='coerce') df['高齢化率'] = df['65歳以上人口'] / df['総人口'] * 100 # 見本でよく使われる仮の列名を、実データから作っておく df['income'] = df['消費支出(二人以上の世帯)'] df['population'] = df['総人口'] _region = {'北海道': '北海道', '青森県': '東北', '岩手県': '東北', '宮城県': '東北', '秋田県': '東北', '山形県': '東北', '福島県': '東北', '茨城県': '関東', '栃木県': '関東', '群馬県': '関東', '埼玉県': '関東', '千葉県': '関東', '東京都': '関東', '神奈川県': '関東'} df['region'] = df['都道府県'].map(_region).fillna('その他') df['地域'] = df['region'] import pandas as pd import numpy as np from scipy import stats import matplotlib.pyplot as plt # SSDSE データの読み込み # 基本統計 df.describe() df.info() # 可視化 df.hist(bins=30, figsize=(15, 10)) plt.show() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 基本パターン import pandas as pd import numpy as np from scipy import stats import matplotlib.pyplot as plt import seaborn as sns # データ読み込み df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1) # 基本統計量 df.describe() # 可視化 sns.pairplot(df[['食料費(二人以上の世帯)', '教育費(二人以上の世帯)', '住居費(二人以上の世帯)']]) plt.show() |
ページ後半「🗺️ 概念マップ」節の3つの概念マップ(関係マップ、 包含マップ、 ツリーマップ)でこの概念の位置づけが視覚的に分かります。 関連手法を辿って学習を進めましょう。
統計データ活用コンペティションのSSDSE-B-2026データは、 47都道府県の社会経済データ。 この概念を使って以下のような分析ができます:
| 機能 | Python (pandas) | Python (scipy) |
|---|---|---|
| 要約統計 | df.describe() | stats.describe() |
| 平均 | df.mean() | np.mean() |
| 標準偏差 | df.std() | np.std() |
| 相関 | df.corr() | stats.pearsonr() |
| t検定 | — | stats.ttest_ind() |
| 回帰 | — | stats.linregress() |
| 分布フィッティング | — | stats.norm.fit() |
この概念は、 他の多くの統計概念と密接に関連しています。 ジャストインタイム型学習では、 必要に応じて関連用語へジャンプしながら全体像を構築します。
| グループ | 主要概念 |
|---|---|
| 記述統計 | 平均、 中央値、 最頻値、 分散、 標準偏差、 共分散、 相関係数 |
| 可視化 | ヒストグラム、 散布図、 箱ひげ図、 ヒートマップ |
| 推測統計 | 標本平均、 標準誤差、 信頼区間、 p値、 有意水準 |
| 確率分布 | 正規分布、 t分布、 χ²分布、 F分布、 二項分布 |
| 仮説検定 | t検定、 F検定、 χ²検定、 ノンパラ検定 |
| 回帰 | 単回帰、 重回帰、 OLS、 Ridge、 LASSO |
| 分類 | ロジスティック回帰、 決定木、 SVM、 k-NN |
| 教師なし学習 | クラスタリング、 PCA、 因子分析 |
| 時系列 | ARIMA、 VAR、 指数平滑法、 自己相関 |
| 因果推論 | DiD、 IV、 傾向スコア、 交絡変数 |
| 前処理 | 標準化、 正規化、 欠損値処理、 多重共線性対策 |
| 評価 | R²、 残差、 CV、 RMSE、 効果量 |
🍰 まずはやさしく
分析モデルの良さを正しく判断するための指標です。
変数の数による偏りをなくすために使います。
スマホのアプリで、不要な機能が増えて使いにくくなる状況に似ています。
このページでは、定義や実装方法など6つの視点で解説します。
論文中に 「調整済み決定係数」として登場する用語。
調整済み決定係数 とは:R²はモデルに変数を増やすほど大きくなるバイアスを持つ。それを変数の数で調整した指標。
本ページでは「adjusted r squared」を扱う。 統計データ分析コンペティション (2026) の教材で、 SSDSE-B-2026 (47 都道府県 × 複数年 × 100 超列) の実データを使った再現可能な学習を目指す。
「adjusted r squared」は統計・データサイエンスの体系における重要概念のひとつ。 本ページは「定義・直感・数式・実装・落とし穴・関連手法」の 6 視点で構成され、 各視点は独立して読めるが順序通り読むと体系的な理解が得られる。
🍰 まずはやさしく
変数を増やした分だけ、点数を引くルールのようなものです。
本当に必要な変数だけを選んでいるか確かめるために使います。
部活の練習メニューを増やしても、効率が落ちる場合があります。
ここでは、図を使って直感的に仕組みを理解します。
Adjusted R² は「説明変数を増やすと自動で上がる R² を、 自由度で罰則を入れて補正したもの」。 モデル比較に使う。 SSDSE-B-2026 で説明変数を A1101 → +A1303 → +B4101 と増やすと、 R² は単調増加するが Adjusted R² は途中で下がりうる。
自由度調整済み決定係数 は「回帰」カテゴリの中核概念。 初めて触れる読者は、 まずこの「🎨 直感」セクションだけ通読し、 必要になった時点で「📐 数式」「🐍 Python」「⚠️ 落とし穴」へ戻る読み方が定着しやすいです。
調整済み決定係数($\bar{R}^2$)は「変数を増やしても自動的に上がる $R^2$ の弱点」を補正した指標。 回帰直線・残差プロット・多重共線性の 3 枚で、 $\bar{R}^2$ が捉える適合度のニュアンスを把握する。



→ 単回帰(基準)、 残差(適合度の質)、 多重共線性(ペナルティ効果)の 3 段階で、 $\bar{R}^2$ が「変数の質」を測る理由が理解できる。
→ すべて即答できれば、 重回帰モデル選択で $\bar{R}^2$ を適切に使い分けられる基礎力は十分。
自由度調整済み決定係数は、 説明変数を増やすほど単純に上がる通常の決定係数を補正する指標です。 ただし高い値は因果関係や外部データでの予測性能を保証しないため、 残差診断や交差検証と併用します。
🍰 まずはやさしく
数式で決めた、厳密なルールのことです。
計算によって客観的にモデルを比較するために使います。
買い物で、予算に合わせて最適な品物を組み合わせる感覚に似ています。
ここでは、数式の意味を一つずつ丁寧に読み解きます。
やさしい説明で掴んだ感覚を、ここで 自由度調整済み決定係数 の定義式に対応づけます。下の式は左辺 $\bar{R}^2$ が何で決まるかを右辺で書き下したもので、R̄²(自由度で調整した決定係数)、分数(割り算) が現れます。それぞれの記号が何の量を指すのかは、次の「🔬 数式を言葉で読み解く」で 1 つずつ確かめてください。
最小二乗法(OLS)は残差平方和 SSE を最小化する。 新しく追加した変数の係数を 0 と置けば元のモデルをそのまま再現できるため、 変数追加後に最適化した SSE は必ず元以下になる。 したがって 決定係数 $R^2 = 1 - \mathrm{SSE}/\mathrm{SST}$ は変数追加で決して下がらず、 全く無関係な変数でも標本内の偶然の相関を拾ってわずかに上がる。 この「必ず上がる」バイアスを打ち消すのが自由度比 $(n-1)/(n-k-1)$ のペナルティで、 変数を 1 つ増やしたときの R² の増分が自由度 1 個分の偶然の説明力に見合わなければ $\bar{R}^2$ はむしろ低下する。 だからこそ $\bar{R}^2$ は説明変数の数が異なるモデル同士の比較(モデル選択)に使える。 なお常に $\bar{R}^2 \le R^2$ であり、 モデルが「全体平均で予測する」より悪ければ $\bar{R}^2$ は負にもなる。
上の数式を眺めるだけでは身につかないので、 各記号がどんな役割を担っているかを言葉で押さえます。 「数式を音読する習慣」がつくと、 論文や教科書を読むスピードが体感で 2 倍ほど上がります。
スライダーを動かすと、 説明変数の数 p・サンプルサイズ n・本当に効く変数の割合 に応じて、 通常の決定係数 $R^2$ と調整済み決定係数 $\bar{R}^2 = 1-(1-R^2)\dfrac{n-1}{n-p-1}$ が下の図でリアルタイムに変化します。 役に立つ変数を先に、 無意味な変数を後から投入したときに、 「R² は必ず上がるのに、 調整済み R² はどこかで頭打ち・下降に転じる」様子を体感してください。 図はタップ/ドラッグで任意の変数個数 k を選べます。
SSDSE-B-2026 の都道府県クロスセクションは n=47。 大きくするとペナルティが弱まる。
モデルに入れる説明変数の総数(切片は数えない)。 p を増やすほど R² は上がりやすい。
先頭の 3 本が真に有効、 残りは無意味(ノイズ)変数として投入される。
※ この図は調整済み R² の性質を体感するための模擬モデルです(有効変数は残差の一定割合を説明、 無意味変数はブレークイーブン未満のノイズを与える設定)。 実データの具体値は「🧮 SSDSE-B-2026 実値計算例」の節を参照してください。
調整済み R² は、 通常の R² から説明変数を増やした代償を差し引いた指標です。 式の $(1-R^2)$ は「まだ説明できていない割合」で、 これに自由度比 $\dfrac{n-1}{n-p-1}\ (\ge 1)$ を掛けて水増ししてから 1 から引きます。 変数 p を 1 本足すと分母 $n-p-1$ が小さくなり罰則が強まるので、 その変数が罰則を上回る説明力を持たない限り、 調整済み R² は下がります。 上のスライダーで「本当に効く変数の割合」を下げると、 R² と R̄² の差(水増し分)が広がるのが見えるはずです。
調整済み R² は「自由度で罰則を与える」という発想の入口です。 同じ発想を尤度ベースで一般化したのが情報量規準で、 AIC は罰則項 $2p$、 BIC は罰則項 $p\log n$ を用います($n$ が大きいほど BIC の罰則が強い=一致性重視)。 線形回帰・正規誤差なら調整済み R² と AIC は概ね同じ変数を選びますが、 GLM や非線形モデルでは R² 自体が定義しづらいため AIC/BIC が標準になります。 「変数を足す価値があるか」をより厳密に測りたい場面では、 調整済み R² から情報量規準へステップアップしましょう。 通常の R² の定義自体は 決定係数 R² を参照。
「消費支出(L3221、 1世帯あたり)」を目的変数として、 説明変数の数を段階的に増やしながら R² と調整 R² を比較します。 R² は単調に増えるが、 調整 R² は変数追加が無意味なら逆に下がるのがポイントです。
| モデル | k | R² | 調整 R² | 差分 ΔR̄² |
|---|---|---|---|---|
| M1: 総人口 A1101 のみ | 1 | 0.111 | 0.091 | — |
| M2: + 気温 B4101 | 2 | 0.185 | 0.148 | +0.057 |
| M3: + 65歳以上人口 A1303 | 3 | 0.208 | 0.153 | +0.005 |
| M4: + 標準地価 C5401 | 4 | 0.209 | 0.133 | −0.020 |
| M5: + ランダムノイズ列 | 5 | 0.209 | 0.112 | −0.021 |
※ n=47(2023 年の 47 都道府県)、 目的変数は L3221(1 世帯あたり消費支出)。 M1〜M5 はいずれも実データで実測した値(M4 は標準地価 C5401、 M5 は np.random.RandomState(2) で生成した無相関のランダム列を追加)。 いずれも定義式 $\bar{R}^2 = 1-(1-R^2)(n-1)/(n-k-1)$ で検算できる(例: M4 は $1-(1-0.209)\times46/42=0.133$、 M5 は $1-(1-0.209)\times46/41=0.112$)。 気温 B4101 の追加(M2)は R² も調整 R² も押し上げるが、 標準地価 C5401(M4)やランダム列(M5)は R² をほぼ動かさない一方、 調整 R² は罰則で 0.153→0.133→0.112 と低下する。 調整 R² は M3(k=3)で最大となり、 変数選択の観点でこれが最良のモデルである。
1 2 3 4 5 6 7 8 9 10 | import pandas as pd, statsmodels.api as sm df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) d = df[df['SSDSE-B-2026'] == 2023] # 2023年・47都道府県 y = d['L3221'] # 消費支出(世帯あたり) for cols in [['A1101'], ['A1101','B4101'], ['A1101','B4101','A1303']]: X = sm.add_constant(d[cols]) r = sm.OLS(y, X).fit() print(f'k={len(cols)}: R²={r.rsquared:.3f}, ' f'adj R²={r.rsquared_adj:.3f}') |
合成設定 ($R^2 = 0.84$、 $n = 10$、 $k = 2$) を調整済み R² の数式に代入し、 Step 1〜3 で手計算する。 同じ計算を Python で再現し、 結果が完全一致することを確認する。
$$ \bar{R}^2 = 1 - \frac{(1-R^2)(n-1)}{n-k-1} $$
| 項目 | 値 |
|---|---|
| $R^2$ (決定係数) | 0.84 |
| $n$ (サンプル数) | 10 |
| $k$ (説明変数の数、 切片を除く) | 2 |
| 項目 | 計算 | 結果 |
|---|---|---|
| $1 - R^2$ | $1 - 0.84$ | 0.16 |
| $n - 1$ | $10 - 1$ | 9 |
| $n - k - 1$ | $10 - 2 - 1$ | 7 |
| $(1-R^2)(n-1)$ | $0.16 \times 9$ | 1.44 |
| $\dfrac{(1-R^2)(n-1)}{n-k-1}$ | $1.44 / 7$ | 0.205714 |
| 項目 | 計算 | 結果 |
|---|---|---|
| $\bar{R}^2$ | $1 - 0.205714$ | 0.794286 |
| $R^2 - \bar{R}^2$ (罰則の大きさ) | $0.840000 - 0.794286$ | 0.045714 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | R2 = 0.84 n = 10 k = 2 # Step 2 の各部品 num = (1 - R2) * (n - 1) # 分子 den = n - k - 1 # 分母 ratio = num / den # 引き算する項 # Step 3 の調整済み R² adj_R2 = 1 - ratio print(f"1 - R^2 = {1 - R2}") print(f"(1 - R^2)(n - 1) = {num}") print(f"n - k - 1 = {den}") print(f"ratio = {ratio:.6f}") print(f"adjusted R^2 = {adj_R2:.6f}") |
💬 手計算 (Step 2〜3) と Python 出力が完全一致 (調整済み R² = 0.794286)。 R² = 0.84 から 0.045714 だけ下方修正されており、 これが「説明変数の数 $k=2$ に対する罰則」の実体である。
数式だけでは「実感」が湧きにくいので、 実データ data/raw/SSDSE-B-2026.csv(47 都道府県 × 16 年)で 1 度手計算してみると理解が定着します。
SSDSE-B-2026 (2023, n=47) で y=L3221 に対して、 X1=A1101 単独では R²=0.111(Adjusted R²=0.091)、 X={A1101, A1303} では R²=0.115(Adjusted R²=0.075)と、 65 歳以上人口 A1303 を足しても R² はほとんど動かず Adjusted R² はむしろ低下する。 つまり A1303 追加に意味がない可能性が高い。 一方 X={A1101, B4101}(気温を追加)では R²=0.185・Adjusted R²=0.148 へ実質的に上昇する。
| 都道府県 | A1101 総人口 | A1303 65 歳以上 | L3221 消費支出 |
|---|---|---|---|
| 東京都 | 14,086,000 | 3,205,000 | 341,320 |
| 神奈川県 | 9,229,000 | 2,390,000 | 306,565 |
| 大阪府 | 8,763,000 | 2,424,000 | 271,246 |
| 愛知県 | 7,477,000 | 1,923,000 | 300,221 |
| 埼玉県 | 7,331,000 | 2,012,000 | 344,092 |
| 千葉県 | 6,257,000 | 1,756,000 | 306,943 |
上記は SSDSE-B-2026 (2023) からの抜粋。 手計算で確認した値が、 後述の Python 実装で得る値と一致することを確認すると、 「数式とコードの対応関係」がクリアに見えるようになります。
1 2 3 4 5 6 7 | import pandas as pd, statsmodels.api as sm df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) d = df[df['SSDSE-B-2026'] == 2023] X = sm.add_constant(d[['A1101','B4101','A1303']]) r = sm.OLS(d['L3221'], X).fit() print(f'R² = {r.rsquared:.3f}') print(f'adj R² = {r.rsquared_adj:.3f}') |
1 2 3 4 5 6 7 8 | from sklearn.linear_model import LinearRegression from sklearn.preprocessing import StandardScaler X = StandardScaler().fit_transform(d[['A1101','B4101','A1303']]) y = d['L3221'] r2 = LinearRegression().fit(X, y).score(X, y) n, k = len(y), 3 adj_r2 = 1 - (1 - r2) * (n - 1) / (n - k - 1) print(f'R² = {r2:.3f}, adj R² = {adj_r2:.3f}') |
1 2 3 | from scipy import stats slope, intercept, r, p, se = stats.linregress(d['A1101'], d['L3221']) print(f'R² = {r**2:.3f}') # 単回帰なので調整版は意味が薄い |
1 2 3 | from sklearn.model_selection import cross_val_score cv_r2 = cross_val_score(LinearRegression(), X, y, cv=5, scoring='r2').mean() print(f'CV-R² = {cv_r2:.3f}') # 調整 R² より厳しい |
| 指標 | 特徴 | 使用場面 |
|---|---|---|
| R² | 説明分散割合 | 単一モデルの記述 |
| 調整 R² | 変数数で罰則 | 変数数が異なるモデル比較 |
| CV-R² | 未知データ性能 | 予測モデル評価 |
| 予測 R²(PRESS ベース) | leave-one-out ベース | 小標本での汎化性能 |
| McFadden's pseudo R² | 対数尤度比 | ロジスティック回帰・GLM |
| Nagelkerke R² | 0-1 に標準化 | GLM の解釈 |
公的統計(SSDSE-B-2026)を題材に、 最小限の Python コードで 自由度調整済み決定係数 を動作させます。 まずはこのまま実行してみてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # 自由度調整済み決定係数 を SSDSE-B-2026 で実行する最小コード import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df = df[df['SSDSE-B-2026'] == 2023] # 2023 年のみ抽出 print(df.shape) # (47, 112) print(df[['Prefecture','A1101','A1303','L3221']].head()) from sklearn.linear_model import LinearRegression import numpy as np y = df['L3221'].astype(float).values for cols in [['A1101'], ['A1101','A1303'], ['A1101','A1303','B4101']]: X = df[cols].astype(float).values lr = LinearRegression().fit(X, y) n = len(y); k = X.shape[1] r2 = lr.score(X, y) adj = 1 - (1-r2)*(n-1)/(n-k-1) print(f'{cols}: R^2={r2:.3f} Adj R^2={adj:.3f}') |
▶ 実行 を押せばこのページの中でそのまま動きます(ライブラリもデータも同梱済みで、 準備は要りません)。 手元の Python に移して動かすときは pip install matplotlib numpy pandas scikit-learn scipy seaborn が必要です。 読んでいるデータは data/raw/SSDSE-B-2026.csv。 日本語を含むので encoding='cp932' の指定を落とさないでください。
fit() のuncentered オプションに応じて挙動が変わり、 rsquared の意味が違ってきます。 切片なしの R² と切片ありの R² を直接比較しないこと。 必要なら「分散の何割を説明したか」ではなく F 検定や対数尤度で比較すべきです。LogisticRegression.score は精度(accuracy)であって R² ではありません。 GLM の説明力を語るときは pseudo-R² の種類を明示し、 R² と混同しないように記述しましょう。 「ロジスティック回帰の R² は 0.5 でした」は誤った表現です。自由度調整済み決定係数 を使うときに初学者が踏みやすい失敗パターン。 1 度経験してしまえば次から避けられますが、 先に知っておくに越したことはありません。
調整済み R² は「モデルの当てはまり指標」のうち、 説明変数の数で R² を罰則修正したもの。 中心ノードを「調整済み R²」とし、 上位 (回帰モデル評価)、 並列 (R²、 AIC、 BIC、 Mallows Cp)、 下位 (重回帰、 多項式回帰、 ステップワイズ選択) を放射状に配置する。
調整済み R² は R²・AIC・BIC・Mallows Cp と並列の「モデル選択基準」群を成し、 重回帰・多項式回帰・ステップワイズ選択など複数の説明変数を含む回帰モデルの比較で用いる。
p値だけでなく効果量も併記するのが現代統計の標準。 主要な指標と Cohen の解釈基準:
| 統計量 | 効果量 | 小 | 中 | 大 |
|---|---|---|---|---|
| 2群平均差 | Cohen's d | 0.2 | 0.5 | 0.8 |
| 相関 | r | 0.1 | 0.3 | 0.5 |
| 線形回帰 | R² | 0.02 | 0.13 | 0.26 |
| ANOVA | η² (eta²) | 0.01 | 0.06 | 0.14 |
| χ² | Cramér's V | 0.1 | 0.3 | 0.5 |
| ロジスティック | Odds Ratio | 1.5 | 2.5 | 4.0 |
調整済み決定係数 がデータサイエンスの体系の中でどこに位置するかを、 3つの異なる視点で可視化します。 同じ情報でも見方を変えると気付きが変わります。
🌐 統計・データサイエンス › 関連・回帰 › 回帰 › 調整済み決定係数
中心に 調整済み決定係数 を置き、 そこから R²・重回帰・残差・分散・最小二乗法・単回帰 など 計 7 個の用語へ、 前提・兄弟・発展形といった関係を矢印で結んでいます。 線がどちら向きかを見れば、 先に読むべき用語とあとから読む用語が分かります。 ノードはドラッグで動かせ、 ホイールでズーム、 クリックでその用語のページへ遷移します。
大きな円が小さな円を包含する Circle Packing 図。 「調整済み決定係数」は緑色でハイライト。
長方形を入れ子に分割した Treemap 図。 各分野の規模感を面積で比較。 「調整済み決定係数」は緑色でハイライト。
| マップ | 分かること | こんな時に見る |
|---|---|---|
| 🔗 関係マップ | 手法間の横の関係(前提→発展→応用) | 「次に何を学べばよい?」 学習順序の判断 |
| ⭕ 包含マップ | 分類体系の入れ子構造(上位⊃下位) | 「この手法はどんなジャンルに属する?」 |
| 🌳 ツリーマップ | 分野の規模比較(面積=ボリューム) | 「データサイエンス全体の俯瞰像」 |
💡 3 つの図は同じことを違う角度から見ています。 関係マップでは 調整済み決定係数 の隣に何が並ぶかが、 包含マップとツリーマップでは 統計・データサイエンス から 回帰 へ絞り込んだ先に 調整済み決定係数 がある、 という入れ子の位置が見えます。 「回帰に何が含まれるか思い出せない」ときは包含マップを、 「次に何を読むか決めたい」ときは関係マップを開いてください。
「自由度調整済み決定係数」は単独で読む数字ではなく、 周辺指標との接続・統合・比較の中で意味を持つ。 「🌐 関連手法・派生」の節が「派生指標カタログ」、 「🌳 手法選択フロー」の節が「最初に何を見るか」のフローなら、 本節は「隣接指標とどう切り替え・組み合わせるか」の意思決定マップ。
| 候補 | 切り替えると良い場面 | 利点 | 注意点 |
|---|---|---|---|
| R²_adj | 線形回帰でネスト型の変数比較 | 解釈が直感的 (説明率)、 単位なし | 非線形・GLM で意味薄い、 罰則が弱い |
| AIC | 非線形・GLM・時系列含む幅広いモデル比較 | 尤度ベースで一般性高い、 K-L 情報量に基づく | 絶対値に意味なし、 差で評価、 標本小だと AICc 必要 |
| BIC | 真のモデル発見、 n が大きい時の節約モデル選択 | 大標本で一致性 (真モデル選択確率→1) | 真モデル存在仮定、 予測には AIC が優位の場合多い |
| CV MSE / R²_cv | 予測精度を重視する実務 (将来データ予測) | out-of-sample 性能を直接評価、 仮定に依存しない | 計算コスト、 fold 分割の偶然依存、 小標本で不安定 |
| Mallows' Cp | フル変数モデルがあり、 部分集合選択をする場面 | σ² 既知前提で MSE と直結、 AIC と漸近等価 | σ² 推定誤差に敏感、 GLM では未定義 |
役割分離: 「🌐 関連手法・派生」の節が「派生指標のカタログ」、 本節(🔗 隣接手法への橋渡し)が「指標間の接続・統合・比較」、 「🌳 手法選択フロー」の節が「最初に何を見るかの分岐」。 まず本節で隣接指標との関係を把握 → 「🌳 手法選択フロー」で初期選択 → 結果が直感に反したら本節に戻って AIC/BIC/CV の三角検証、 のループで運用する。
調整済み R² を使うか、 別のモデル選択規準に切り替えるかは モデル種類・目的・サンプル規模・多重共線性・運用評価 の 5 段で判定する。 状況を見ずに「R² が高いほうがいい」と言うのは禁物。
分岐 1-5 は順に進めるが、 単独で固定するのではなく 分岐 5 で検証 → 分岐 1-4 のどこかへ戻る ループ運用が必須。 「🗺️ 概念マップ」で全体像、 「🔗 隣接手法への橋渡し」で関連指標、 本節(🌳 手法選択フロー)で初期選択、 と階段状に使い分けると迷いが減る。
| 判定軸 | 条件 | 推奨指標 |
|---|---|---|
| モデルの種類 | 線形回帰(OLS) | 調整済み R² + 残差プロット |
| ロジスティック・ポアソン等の GLM、 非線形回帰 | AIC / BIC / Pseudo R² | |
| 目的 | 複数モデル間の説明力比較(同データセット内) | 調整済み R² |
| 予測性能の汎化評価 | CV による予測 R² / PRESS 統計量 | |
| 真モデルの存在を仮定し一致性のある選択 | BIC(罰則項 = k log n) | |
| サンプルサイズ | n ≥ 30 程度(小さくない) | 調整済み R² で可 |
| n < 30 で過学習懸念 | 調整済み R² + leave-one-out CV を併用 | |
| 多重共線性 | VIF ≤ 5(無視できる) | 調整済み R² をそのまま信頼 |
| VIF > 10(強い共線性) | 調整済み R² だけでは不足 → Ridge/Lasso 系の正則化指標へ |
通常の決定係数 $R^2$ には、 説明変数を 1 本増やすたびに必ず(少なくとも同じか)大きくなるという構造的なクセがある。 これは新しい変数が完全な乱数であっても、 最小二乗法が「その乱数を使えば残差をほんの少しでも減らせる」係数を必ず見つけてしまうため。 つまり $R^2$ の上昇には「本物の説明力」と「偶然の当てはめ(過大評価)」の 2 つが混ざっている。
そこで、 変数を 1 本足すごとに「その 1 本ぶんの当てはめは、 偶然でもこれくらいは上がるはず」という下駄を差し引くのが調整済み決定係数 $\bar{R}^2$ の発想。 数式 $\bar{R}^2 = 1 - (1 - R^2)\cdot\dfrac{n-1}{n-k-1}$ の $\dfrac{n-1}{n-k-1}$ が、 まさに「変数の数 $k$ が増えるほど大きくなる拡大鏡(=罰則)」として残差ぶんを膨らませている。 無意味な変数を足したときの $R^2$ の微増よりも、 この罰則の効きが勝てば $\bar{R}^2$ は下がる。 これが「無駄な変数を混ぜると値が悪化する」フィルター機能の正体。
出生数(A4101)を総人口(A1101)で予測する強いモデルに、 出生数とは本質的に無関係な家計支出変数(住居費 L322102 → 食料費 L322101)を順に足していく。 総人口だけでほぼ説明が尽きているため、 追加変数は $R^2$ をほとんど動かさない(あるいは 6 桁目でしか動かさない)。 一方で罰則が効くため $\bar{R}^2$ は毎回はっきり下がり、 AIC・BIC も悪化(増加)する。
| モデル(目的変数=出生数 A4101, n=47) | k | R² | 調整済み R² | AIC | BIC |
|---|---|---|---|---|---|
| M1: 総人口 A1101 | 1 | 0.990871 | 0.990668 | 832.2 | 835.9 |
| M2: +住居費 L322102 | 2 | 0.990871 | 0.990456 ↓ | 834.1 ↑ | 839.7 ↑ |
| M3: +食料費 L322101 | 3 | 0.990908 ↑ | 0.990274 ↓ | 836.0 ↑ | 843.4 ↑ |
出典: SSDSE-B-2026.csv(cp932, skiprows=[1])から 2023 年の 47 都道府県を抽出し、 statsmodels.OLS(...).fit() の rsquared / rsquared_adj / aic / bic を実測。 M1→M3 で $R^2$ は 0.990871→0.990908 と(非減少で)微増するのに対し、 $\bar{R}^2$ は 0.990668→0.990274 と単調減少。 「$R^2$ の増加=改善」ではないことが実データで確認できる。
$\bar{R}^2$ は $R^2$ の過大評価を和らげるが、 それでもモデルの良し悪しを 1 つの数字で決められるわけではない。 ここでは特に誤解の多い点を、 既出の 7 罠を補う形で整理する。
$\bar{R}^2$ は「当てはまりに変数数の罰則を入れる」という発想の最も素朴な実装。 同じ発想をより厳密・汎用にした一群がモデル選択規準と検証手法である。 それぞれの位置づけを表で俯瞰する。
| 指標 | 罰則・考え方 | $\bar{R}^2$ との違い・使いどころ |
|---|---|---|
| AIC | $-2\log L + 2k$。 対数尤度に $2k$ の罰則。 | OLS 以外にも使える汎用性。 予測志向。 罰則が $\bar{R}^2$ より強く、 変数を絞りやすい。 小標本は AICc を使う。 |
| BIC | $-2\log L + k\log n$。 罰則が標本数 $n$ で増大。 | $n$ が大きいほど強罰則=シンプル志向。 真モデルを選ぶ一致性。 説明変数を最も厳しく削る。 |
| Mallows' $C_p$ | $C_p = \dfrac{\text{SSE}_p}{\hat\sigma^2} - n + 2p$。 残差平方和+変数数の罰則。 | OLS の部分集合選択用。 $C_p \approx p$ が目安。 AIC とほぼ等価な選択を与える。 モデル選択で扱う(本サイトに単独ページなし)。 |
| 交差検証 R²(CV-R²) | データを分割し、 学習に使っていない分割で $R^2$ を測る。 | 標本内罰則ではなく実際の標本外予測を直接評価。 過学習検出に最も直接的。 交差検証参照。 |
| 予測 R²(PRESS ベース) | $1 - \text{PRESS}/\text{SST}$。 PRESS は leave-one-out 残差の平方和。 | 1 点ずつ抜いた予測誤差から算出。 $\bar{R}^2$ より過学習に敏感で、 追加変数で悪化しやすい(本サイトに単独ページなし・テキストで補足)。 |
調整済み R² と他の予測誤差規準を比較できる用語を集めました。