論文一覧に戻る 📚 用語解説(ジャストインタイム型データサイエンス教育)
単回帰分析
Simple Linear Regression (y = α + βx)
1つの説明変数で目的変数を予測する直線モデル。相関を「予測のための線」に発展させたもの。
回帰モデルy = α + βx単回帰linear regression
📍 文脈💡 30秒結論📖 詳しく

📍 あなたが今見ているもの

論文中に 「単回帰分析」として登場する用語。

単回帰分析 とは:1つの説明変数で目的変数を予測する直線モデル。相関を「予測のための線」に発展させたもの。

💡 30秒で分かる結論

📖 もっと詳しく

単回帰(simple linear regression)は、 1つの説明変数 x で目的変数 y を予測する最もシンプルな回帰モデル。 「気温が1℃上がると消費電力量は何 kWh 増える?」のような問いに答えます。

モデル式:$y = \alpha + \beta x + \varepsilon$

OLS で推定:「残差の2乗和」が最小になる α と β を選びます。 これが最も「データに合う直線」となります。

R²(決定係数):このモデルで y の分散の何 % が説明できるか。 単回帰の場合、 $R² = r²$(相関係数の2乗)の関係。

相関係数との関係:β = r × ($\sigma_y / \sigma_x$)。 β の符号と相関係数 r の符号は必ず一致します。 ただし強さの解釈は別物(β は単位依存、 r は標準化済み)。

限界:1変数だけでは交絡因子を制御できません。 多くの社会現象は複数の要因が絡むので、 単回帰だけで因果を語るのは危険。 重回帰へ進むのが筋。

👁️ 直感 — 単回帰は「2変数の線形関係」

単回帰は最も基本的な回帰モデル。 1つの説明変数 x で目的変数 y を予測する直線を引きます:y = β₀ + β₁ x + ε

単回帰

食料費(x)から教育費(y)を予測する単回帰。 赤い直線が回帰直線、 オレンジ帯が95%予測区間。

📐 数式と読み方

モデル式

$$ y_i = \beta_0 + \beta_1 x_i + \varepsilon_i $$

β₀(切片)、 β₁(傾き)、 ε(誤差項、 平均0・分散σ²の独立正規)

最小二乗解

$$ \hat{\beta}_1 = \frac{\text{Cov}(x, y)}{\text{Var}(x)} = r \frac{s_y}{s_x} $$

$$ \hat{\beta}_0 = \bar{y} - \hat{\beta}_1 \bar{x} $$

「平均点 (x̄, ȳ) を通る、 傾き β₁ の直線」。

係数の解釈

📊 単回帰の評価

🐍 Python での単回帰

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from scipy import stats
slope, intercept, r, p, se = stats.linregress(x, y)
print(f'傾き: {slope:.3f}, 切片: {intercept:.3f}')
print(f'R²: {r**2:.3f}, p: {p:.4f}')

# statsmodels で詳細
import statsmodels.api as sm
X = sm.add_constant(x)
model = sm.OLS(y, X).fit()
print(model.summary())

予測区間と信頼区間

predictions = model.get_prediction(X) summary = predictions.summary_frame(alpha=0.05) # mean_ci_lower, mean_ci_upper(平均の信頼区間) # obs_ci_lower, obs_ci_upper(個別予測の予測区間)

🚀 重回帰への拡張

説明変数を増やせば重回帰に:y = β₀ + β₁x₁ + β₂x₂ + ... + βₚxₚ + ε

各係数は「他の変数を一定にしたときの x_j 1単位増の影響」と解釈。 これが偏回帰係数の意味。

🚧 落とし穴と注意点

🔬 「単回帰」を深く理解する

単回帰の応用

単回帰の重要な性質

📝 練習問題 — 理解度チェック

  1. この用語の基本定義を、 自分の言葉で説明できますか?
  2. この手法が使われる典型的なシナリオを3つ挙げられますか?
  3. この手法の前提条件・仮定を確認できますか?
  4. 結果を解釈する際の注意点は何ですか?
  5. 類似手法との違いを説明できますか?
  6. Python(または他言語)で実装できますか?
  7. SSDSE データで応用例を作成できますか?

📚 参考文献・さらなる学習

古典的教科書

実践書

オンラインリソース

💼 実務応用ガイド

データサイエンスプロジェクトでの位置づけ

  1. 探索的分析(EDA):基本統計量・可視化でデータを理解
  2. 前処理:標準化・正規化・欠損値処理
  3. モデリング:回帰・分類・クラスタリング
  4. 評価:CV、 指標計算、 統計的検定
  5. 解釈・報告:効果量・信頼区間・可視化

業界別ユースケース

📖 完全ガイド — 統計学習の参照表

分析の流れ — 8ステップ

  1. 問題定義:何を知りたいのか、 目的を明確に
  2. データ収集:信頼できるソースから(SSDSEなど公的データ)
  3. データクリーニング:欠損値、 外れ値、 入力ミスの確認
  4. 探索的分析(EDA):要約統計量、 ヒストグラム、 散布図
  5. 変数変換:標準化、 対数変換、 カテゴリのエンコード
  6. モデリング:適切な手法を選び、 学習
  7. 評価:CV、 指標、 統計的検定
  8. 解釈・報告:効果量、 信頼区間、 可視化

統計手法の選び方マトリクス

目的 1変数 2変数 多変量
記述平均, 中央値, 分散相関, 共分散PCA, 因子分析
可視化ヒストグラム, 箱ひげ散布図, ヒートマップ散布図行列, バイプロット
予測時系列モデル単回帰重回帰, Ridge, LASSO
分類ロジスティック回帰判別分析SVM, RF, NN
グループ化階級分け2次元クラスタリングk-means, 階層クラスタリング
検定1標本t検定2標本t検定, χ²ANOVA, MANOVA

サンプル数別の手法ガイド

n 推奨手法
n < 10記述統計のみ、 ノンパラ検定、 ベイズ統計
10 ≤ n < 30t検定, ブートストラップ, 単回帰
30 ≤ n < 200重回帰, ANOVA, 階層クラスタリング
200 ≤ n < 10000複雑な回帰, RF, GBM, k-means
n ≥ 10000深層学習, 大規模分散学習

Python 主要ライブラリ早見表

ライブラリ 用途
numpy数値計算の基礎、 行列演算
pandasデータフレーム、 表操作
scipy統計関数、 最適化、 線形代数
statsmodels古典統計、 検定、 回帰分析の詳細
scikit-learn機械学習、 前処理、 評価
matplotlib基本可視化
seaborn統計的可視化(高級)
plotlyインタラクティブ可視化
xgboost / lightgbm勾配ブースティング
PyTorch / TensorFlow深層学習

よくある質問(FAQ)

📓 用語のまとめ — 30秒で理解

このページで扱った概念を、 学習効率のためにまとめます。 これを毎日見ることで、 統計の基礎が体に染み込みます。

必ず押さえるべき記号

記号 意味 読み方
μ母平均ミュー
σ母標準偏差シグマ
σ²母分散シグマ二乗
標本平均エックスバー
s標本標準偏差エス
n標本サイズエヌ
pp値、 比率ピー
α有意水準アルファ
β回帰係数、 第二種誤り率ベータ
r相関係数アール
決定係数アール二乗
Σ総和記号、 共分散行列シグマ大文字
N(μ, σ²)正規分布ノーマル ミュー シグマ二乗
t(df)t分布ティー
χ²(df)カイ二乗分布カイ二乗
F(d1, d2)F分布エフ
H₀, H₁帰無仮説、 対立仮説エイチゼロ、 エイチワン
E[X]期待値エクスペクタンス
Var(X)分散バリアンス
Cov(X, Y)共分散カバリアンス

💡 統計学・データサイエンスは「記号の意味を理解する」ことが最初の壁。 各記号が何を表すか、 公式の中での役割を覚えてしまえば、 後はパターンの組合せで様々な手法が理解できます。

🌐 データサイエンス全体像での位置づけ

データサイエンスのワークフロー

  1. ビジネス理解:何を解決したいか
  2. データ理解:どんなデータがあるか
  3. データ準備:前処理、 特徴量エンジニアリング
  4. モデリング:手法選択、 学習
  5. 評価:性能、 解釈性、 ビジネス価値
  6. 展開:実装、 運用、 監視

(CRISP-DM プロセスより)

主要分野のマッピング

分野 主要技術 代表ツール
記述統計要約量、 可視化pandas, matplotlib
推測統計検定、 信頼区間scipy.stats, statsmodels
機械学習予測、 分類、 クラスタリングscikit-learn, XGBoost
深層学習NN、 画像、 自然言語PyTorch, TensorFlow
時系列ARIMA、 状態空間、 LSTMstatsmodels, prophet
因果推論RCT、 IV、 DiD、 PSMDoWhy, EconML
ベイズ統計MCMC、 変分推論PyMC, Stan
最適化線形/凸/離散最適化scipy.optimize, cvxpy

キャリアパス

💎 良いデータ分析のための10のコツ

  1. 必ず可視化から始める:散布図、 ヒストグラム、 箱ひげ図
  2. 外れ値を意識する:除く前にドメイン的に理解
  3. 仮定を確認する:正規性、 独立性、 等分散性
  4. サンプルサイズに見合う複雑性:n=10 で深層学習はしない
  5. 効果量も併記する:p値だけでは不十分
  6. 信頼区間で不確実性を示す:点推定だけでは誤解の元
  7. 多重比較を補正する:探索的解析でも誠実に
  8. ホールドアウト or CV で評価する:訓練データの精度は意味がない
  9. 解釈可能性も重視する:ブラックボックスより white-box
  10. 再現可能なコードを書く:random_seed、 バージョン管理

🔗 用語間の関係 — 統計概念のネットワーク

記述統計の基本セット

これらは互いに深く関連します:

推測統計の基本セット

回帰モデルファミリー

クラスタリング・次元削減ファミリー

検定ファミリー

🗺️ 概念マップ — 3つの視点で体系を理解する

単回帰分析 がデータサイエンスの体系の中でどこに位置するかを、 3つの異なる視点で可視化します。 同じ情報でも見方を変えると気付きが変わります。

📍 体系階層のパス

🌐 統計・データサイエンス関連・回帰回帰単回帰

① 🔗 関係マップ — 「他の手法とどう繋がっているか」

中心の概念から放射状に、 前提・兄弟・発展形・応用先などの関係性を矢印で結びます。 横の繋がりを見るのに最適。 ノードをドラッグ、 ホイールでズーム、 クリックで遷移

凡例:現在の用語上位カテゴリ兄弟(並列)前提発展形応用先2階層先

② ⭕ 包含マップ — 「どのカテゴリに含まれているか」

大きな円が小さな円を包含する Circle Packing 図。 「単回帰分析」は緑色でハイライト

📍現在地:統計・データサイエンス

③ 🌳 ツリーマップ — 「面積で見るボリューム比較」

長方形を入れ子に分割した Treemap 図。 各分野の規模感を面積で比較。 「単回帰分析」は緑色でハイライト

🎯 3つのマップの使い分け

マップ 分かること こんな時に見る
🔗 関係マップ手法間の横の関係(前提→発展→応用)「次に何を学べばよい?」 学習順序の判断
⭕ 包含マップ分類体系の入れ子構造(上位⊃下位)「この手法はどんなジャンルに属する?」
🌳 ツリーマップ分野の規模比較(面積=ボリューム)「データサイエンス全体の俯瞰像」

💡 ジャストインタイム学習のヒント:3つの視点を行き来することで、 概念を多角的に理解できます。 包含マップやツリーマップはズーム/ドリルダウンで大分類から細部まで探索できます。

🔖 キーワード索引 — 拡張版

単回帰分析(simple linear regression)に関する用語を、 仮定・推定・診断・関連手法 別に索引化します。

カテゴリキーワード(日本語)キーワード(英語)
基本要素説明変数、 目的変数、 切片、 傾き、 残差、 予測値predictor, response, intercept, slope, residual, fitted
推定法最小二乗法(OLS)、 最尤推定、 ロバスト回帰、 加重最小二乗OLS, MLE, robust regression, WLS
評価指標決定係数 R²、 自由度調整R²、 RMSE、 MAE、 残差標準誤差R-squared, adjusted R², RMSE, MAE, RSE
仮定線形性、 独立性、 等分散性、 正規性、 外れ値なしlinearity, independence, homoscedasticity, normality
診断残差プロット、 QQプロット、 てこ比、 Cook距離、 標準化残差residual plot, QQ plot, leverage, Cook's distance
関連手法重回帰、 多項式回帰、 ロジスティック回帰、 リッジ、 ラッソmultiple regression, polynomial, logistic, ridge, lasso

🧮 SSDSE-B で単回帰分析 — 実値計算例

SSDSE-B の都道府県データから「教育支出(x)」が「平均所得(y)」をどれだけ説明するか、 単回帰で分析します。

① 主要な統計量(イメージ値)

統計量説明
x̄(教育支出)15.2 万円説明変数の平均
ȳ(平均所得)304 万円目的変数の平均
Sxy(共分散)125x と y の連動
Sx² (xの分散)12x の分散

② 傾きと切片の計算

β₁ = Sxy / Sx² = 125 / 12 ≈ 10.4
β₀ = ȳ − β₁ x̄ = 304 − 10.4 × 15.2 ≈ 146
回帰式:所得 = 146 + 10.4 × 教育支出
解釈:教育支出を1万円増やすと、 平均所得は約10.4万円増えると推定される(相関であり因果ではない)。

③ 決定係数 R²

R² = 1 − SSres/SStot ≈ 0.62
所得の変動の62%が教育支出で説明できる。 残り38%は他の要因。 単回帰で十分な精度。 さらに精度を上げたいなら重回帰や他の変数を追加検討。

⚠️ 単回帰の落とし穴 — 拡張版(実務で本当に困る5+件)

  1. 因果関係と相関関係の混同:「教育支出を増やすと所得が増える」と単純に解釈すると 因果推論の誤り を犯す。 逆因果(所得が高いから教育に投資できる)、 共通の原因(親の学歴)、 同時性などの可能性を考慮する必要がある。 観察データで因果を主張するには操作変数法、 RCT、 自然実験などが必要。 単回帰の係数は相関の方向性を示すに過ぎない。
  2. 外れ値による傾きの劇的な変化:1点の外れ値で傾きが大きく変わる。 特に「てこ比(leverage)」の高い点(x が極端な点)は影響大。 Cook距離が0.5を超える点は要チェック。 ロバスト回帰(Huber、 RANSAC)の使用、 外れ値の除外と感度分析を行う。 「東京都を含めるか除外するか」で結論が変わる典型例。
  3. 線形仮定の盲信:本当の関係が U字や対数関数なのに線形を当てはめると、 体系的に外れる。 残差プロットで「パターンがない」ことを必ず確認する。 パターンが見えるなら多項式項追加、 対数変換、 ノンパラメトリック回帰(LOESS等)を検討。 外挿(データ範囲外の予測)は特に危険。
  4. 残差の不均一分散(heteroscedasticity):残差の分散が x によって変わると、 標準誤差が誤って計算される。 Breusch-Pagan 検定、 White検定で確認。 対策はロバスト標準誤差(HC0〜HC3)、 加重最小二乗、 対数変換。 信頼区間や p値の解釈を誤らないため必須。
  5. 残差の自己相関(系列相関):時系列データでは隣接時点の残差が相関しやすい。 Durbin-Watson 統計量が 1.5未満 または 2.5超 で自己相関の疑い。 対策は時間的ラグ項の追加、 ARIMA、 一般化最小二乗(GLS)、 Newey-West 標準誤差。 経済データや株価では特に問題になる。
  6. R² だけで判断する:R² が高い ≠ モデルが良い。 過学習、 真の関係が複雑、 説明変数の選び方など多くの問題が背景にある。 R² と一緒に残差プロット、 QQプロット、 Cook距離、 予測誤差(交差検証)を見るべき。 また R² は決して「説明変数を増やすと下がらない」ので、 比較には自由度調整R² を使う。
  7. 係数の有意性と実質的意味の混同:n が大きいと小さな係数でも有意になる。 「p<0.05」だけでなく、 係数の大きさ(経済的・実質的に意味があるか)と信頼区間を併せて議論する。

🐍 Python 実装バリエーション — scikit-learn / statsmodels / scipy / numpy

① scikit-learn(機械学習パイプライン向け)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

df = pd.read_csv('data/raw/SSDSE-B-2024.csv', encoding='shift_jis', skiprows=1)
X = df[['教育支出']]  # 単変量でも2次元
y = df['平均所得']
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=0)

model = LinearRegression().fit(X_tr, y_tr)
print(f'切片={model.intercept_:.2f}, 傾き={model.coef_[0]:.3f}')
print(f'訓練R²={model.score(X_tr, y_tr):.3f}, テストR²={model.score(X_te, y_te):.3f}')

② statsmodels(推測統計、 詳細サマリ)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import statsmodels.api as sm
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2024.csv', encoding='shift_jis', skiprows=1)
X = sm.add_constant(df['教育支出'])  # 切片用の定数列
y = df['平均所得']

result = sm.OLS(y, X).fit()
print(result.summary())
# 係数、 標準誤差、 t値、 p値、 95%CI、 R²、 F検定 など一括
print('予測区間:', result.get_prediction(X).summary_frame(alpha=0.05).head())

③ scipy.stats.linregress(最もシンプル)

1
2
3
4
5
6
7
8
9
from scipy.stats import linregress
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2024.csv', encoding='shift_jis', skiprows=1)
res = linregress(df['教育支出'], df['平均所得'])
print(f'傾き={res.slope:.3f} (SE={res.stderr:.3f})')
print(f'切片={res.intercept:.2f}')
print(f'r={res.rvalue:.3f}, R²={res.rvalue**2:.3f}')
print(f'p値={res.pvalue:.4f}')

④ numpy(行列演算で実装)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import numpy as np
import pandas as pd

df = pd.read_csv('data/raw/SSDSE-B-2024.csv', encoding='shift_jis', skiprows=1)
x = df['教育支出'].to_numpy()
y = df['平均所得'].to_numpy()

# 正規方程式
X = np.column_stack([np.ones_like(x), x])
beta = np.linalg.lstsq(X, y, rcond=None)[0]
print('β =', beta)  # [切片, 傾き]

# numpy.polyfit でも同じ
beta2 = np.polyfit(x, y, 1)
print('polyfit:', beta2)

⑤ ロバスト回帰(外れ値耐性)

1
2
3
4
5
6
from sklearn.linear_model import HuberRegressor, RANSACRegressor

huber = HuberRegressor().fit(X_tr, y_tr)
ransac = RANSACRegressor(random_state=0).fit(X_tr, y_tr)
print('Huber slope:', huber.coef_[0])
print('RANSAC slope:', ransac.estimator_.coef_[0])

⑥ 可視化(散布図 + 回帰直線 + 信頼区間)

1
2
3
4
5
6
7
import seaborn as sns
import matplotlib.pyplot as plt

sns.regplot(data=df, x='教育支出', y='平均所得', ci=95,
            scatter_kws={'alpha':0.6}, line_kws={'color':'red'})
plt.title(f'単回帰:所得 = β₀ + β₁ × 教育支出')
plt.show()