線形回帰は、連続値を予測するための最も基本的なモデルです。リハビリテーション研究では、入院時 FIM、年齢、発症からの日数、麻痺の重症度などから、退院時 FIM、歩行速度、在院日数といった連続値アウトカムを予測する場面で使われます[1]。
線形回帰の特徴は、構造がシンプルで、係数を解釈しやすいことです。たとえば、他の変数を一定としたときに、入院時 FIM が 1 点高いと退院時 FIM がどの程度高い傾向にあるかを、係数として表すことができます。
ただし、係数が解釈しやすいことと、因果効果を示していることは同じではありません。本稿では、線形回帰を「予測モデル」として使う場合と、「関連を説明する回帰分析」として使う場合の違いも含めて、医療AI研究で安全に使うための基本を整理します。
本稿は、第3部「医療AI・機械学習アルゴリズム図鑑」の第1記事です。線形回帰は、連続値を予測する最も基本的なモデルであり、より複雑な機械学習モデルを理解するための土台になります。次の記事「ロジスティック回帰」では、2 値アウトカムを予測する分類モデルを扱います。その次の「Lasso / Ridge / Elastic Net」では、線形回帰を正則化によって安定化する方法を学びます。
// 01 · LEARN OUTCOMESこの記事でわかること
読了後、次の4つを説明できるようになります。
- 線形回帰が「説明変数の重み付き和で連続値を予測するモデル」だと説明できる
- 最小二乗法が、予測誤差の二乗和を小さくする方法だと理解できる
- R²、RMSE、MAE、予測区間の違いを説明できる
- 残差プロット、多重共線性、外部検証など、線形回帰を使うときの確認点を理解できる
// 02 · CONCLUSIONまず結論
// 03 · FIGURE直感的な図解
線形回帰では、散布図上のデータ点に対して、全体として誤差が小さくなる直線を引きます。ここでいう誤差とは、実際の値 y と、モデルが予測した値 ŷ の差です。この誤差を残差と呼びます。
線形回帰では、モデルを作ったあとに残差を確認します。予測値に関係なく残差が 0 の周りにばらついていれば、線形モデルとして大きな問題は少ないと考えます。一方で、U 字型や漏斗型のパターンが見える場合は、非線形性や分散不均一が疑われます。
R²、RMSE、MAE は、いずれも予測のずれを評価する指標ですが、見ているものが違います。R² は「ばらつきのどの程度を説明できたか」、RMSE や MAE は「実際に何点くらい外れたか」を表します。FIM 予測のような臨床研究では、R² だけでなく、RMSE や MAE のように臨床的に解釈しやすい指標を併記することが重要です。
// 04 · CLINICAL医療・リハビリでの具体例
線形回帰は、目的変数が連続値のときに使いやすいモデルです。リハビリテーション研究では、退院時 FIM、歩行速度、在院日数、FIM 利得などを予測または説明する場面で使われます。
例1:退院時 FIM を予測する
問い:
「入院時情報から、退院時 FIM 運動項目の点数を予測できるか?」
この場合、目的変数は退院時 FIM 運動項目です。説明変数には、年齢、発症から入院までの日数、入院時 FIM、麻痺の重症度、認知機能など、予測時点で得られる情報を使います。
線形回帰では、たとえば次のような形で予測します。
退院時FIM予測値
= β₀
+ β₁ × 入院時FIM
+ β₂ × 年齢
+ β₃ × 発症からの日数
+ β₄ × 認知機能
ここで、β₁ は「他の変数を一定としたとき、入院時 FIM が 1 点高い症例では、退院時 FIM がどの程度高い傾向にあるか」を表します。ただし、これは観察データに基づく関連であり、入院時 FIM を上げれば退院時 FIM が必ず上がるという因果効果を意味するわけではありません。
例2:歩行速度を予測する
問い:
「下肢筋力、バランス、年齢から、退院時の歩行速度を予測できるか?」
歩行速度は連続値なので、線形回帰の対象になります。RMSE や MAE を使えば、予測値が実際の歩行速度から平均してどの程度ずれているかを評価できます。
ただし、歩行速度には下限・上限があり、重症例では床効果が出ることがあります。残差プロットを確認し、必要に応じて変換、交互作用項、非線形項、別モデルを検討します。
例3:FIM 利得を説明する
問い:
「訓練量は FIM 利得と関連するか?」
この問いでは、予測精度よりも係数の解釈が重要になることがあります。訓練量、入院時 FIM、年齢、疾患重症度などを説明変数として入れ、訓練量と FIM 利得の関連を推定します。
この場合、線形回帰は「予測モデル」というより、「関連を説明する回帰分析」として使われます。ただし、交絡因子の調整が十分か、逆因果がないか、訓練量の測定方法が妥当かを慎重に考える必要があります。
線形回帰から別モデルを検討する場面
線形回帰で十分な場合も多い一方で、以下のような場合には、特徴量の変換、正則化、または別のモデルを検討します。
- 残差プロットに U 字型などの系統的パターンがある
- 予測値が大きいほど残差のばらつきが大きい
- 外れ値の影響が大きい
- 説明変数同士の相関が強く、係数が不安定である
- 変数数に対して症例数が少なく、過学習が疑われる
- 交互作用や非線形関係を考慮する臨床的理由がある
このような場合でも、いきなり複雑なモデルへ進むのではなく、まずは変数変換、二次項、交互作用項、Ridge や Lasso などを検討します。線形回帰は、より複雑なモデルと比較するための基準としても重要です。
// 05 · THEORY数式・理論
線形回帰の数式は、医療者にとって少し難しく見えるかもしれません。しかし、基本は「説明変数に係数をかけて足し合わせる」だけです。ここでは、単回帰、重回帰、最小二乗法、評価指標、仮定を順に整理します。
モデルの定義
説明変数が1つだけの場合を単回帰、2つ以上ある場合を重回帰と呼びます。医療研究では、年齢、性別、入院時 FIM、発症からの日数など、複数の説明変数を同時に扱うことが多いため、実際には重回帰がよく使われます。
# 単回帰
y_i = β₀ + β₁ x_i + ε_i
# 重回帰
y_i = β₀ + β₁ x_i1 + β₂ x_i2 + ... + βp x_ip + ε_i
ここで、y_i は実測値、x は説明変数、β は係数、
ε_i は誤差項。
最小二乗法
最小二乗法は、実測値 y と予測値 ŷ の差、つまり残差の二乗和が最も小さくなるように係数 β を求める方法です。
SSE(β) = Σ (y_i − ŷ_i)²
残差をそのまま足すと、正の誤差と負の誤差が打ち消し合ってしまいます。そのため、二乗してから合計します。二乗することで、大きな誤差ほど強く罰することになります[2]。
β̂ = (XᵀX)⁻¹ Xᵀ y
この式は、XᵀX が逆行列を持つ場合に成り立ちます。説明変数同士がほぼ同じ情報を持っている場合、多重共線性によって係数が不安定になります。その場合は、変数の整理、主成分回帰、Ridge 回帰などを検討します。
評価指標
線形回帰では、1 つの指標だけで性能を判断しないことが重要です。
- R²:アウトカムのばらつきのうち、モデルがどの程度を説明できたかを示します。ただし、説明変数を増やすと訓練データの R² は上がりやすいため、調整済み R² や test データでの性能も確認します。
- RMSE:予測誤差の二乗平均平方根です。大きな誤差に敏感です。FIM を予測している場合、RMSE も FIM 点数の単位で解釈できます。
- MAE:予測誤差の絶対値の平均です。RMSE より外れ値の影響を受けにくく、臨床的に説明しやすい指標です。
- 予測区間:新しい症例の予測値がどの範囲に入りそうかを示します。平均予測の信頼区間とは異なります。個別症例の予測を考える場合には、予測区間が重要です。
R² = 1 − SSE / SST SST = Σ (y_i − ȳ)²
RMSE = √( (1/N) Σ (y_i − ŷ_i)² )
MAE = (1/N) Σ |y_i − ŷ_i|
線形回帰の仮定
線形回帰の仮定は、主に係数の信頼区間や p値を解釈するときに重要です。予測だけを目的とする場合でも、残差に強いパターンがあると未知データでの性能が悪くなる可能性があるため、仮定の確認は無視できません[1][3]。
- 線形性:説明変数とアウトカムの関係が、少なくともモデル内で線形に近いこと。残差プロットで U 字型などのパターンがないか確認します。
- 独立性:誤差同士が独立であること。同一患者の複数測定、同一施設内の患者、縦断データでは独立性が崩れることがあります。その場合は、混合効果モデルやクラスタロバスト標準誤差を検討します。
- 等分散性:予測値や説明変数の値によって、残差のばらつきが大きく変わらないこと。漏斗型の残差プロットがある場合は、変換、重み付き最小二乗、ロバスト標準誤差などを検討します。
- 残差の正規性:主に小標本での信頼区間や p値の解釈に関わります。大標本ではある程度緩和されますが、外れ値や強い歪みがある場合は注意が必要です。
予測目的で線形回帰を使う場合でも、仮定を完全に無視してよいわけではありません。仮定の確認は、係数の解釈だけでなく、モデルの弱点を見つけるためにも役立ちます。
// 06 · IMPLEMENTATION · PYTHON実装
ここでは、退院時 FIM 運動項目を予測する線形回帰モデルを例にします。scikit-learn は予測パイプラインを作りやすく、statsmodels は係数、信頼区間、p値、予測区間を確認しやすいという違いがあります。以下は教育用の仮想データを想定したサンプルです[6]。
# ============================================
# 教育用サンプル
# 実臨床データを使う場合は、個人情報保護、
# 倫理審査、施設ルール、利用規約を必ず確認してください。
# ============================================
import pandas as pd
import numpy as np
# 教育用の仮想データを想定
df = pd.read_csv("example_rehab_dataset.csv")
# ============================================
# 1. 説明変数と目的変数を定義する
# ============================================
features = [
"fim_motor_admission",
"age",
"onset_days",
"sias_motor"
]
target = "fim_motor_discharge"
X = df[features]
y = df[target]
# 注意:
# 説明変数には、予測時点で得られる情報だけを入れる。
# 退院時情報や在院日数など、未来の情報を入れると
# データリーケージになる。
# ============================================
# 2. train / test に分割する
# ============================================
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.2,
random_state=42
)
# ============================================
# 3. scikit-learn: 予測パイプラインとして使う
# ============================================
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error
# 線形回帰そのものには標準化は必須ではない。
# ここでは欠測補完だけをPipelineに入れる。
model = Pipeline([
("imputer", SimpleImputer(strategy="median")),
("regressor", LinearRegression())
])
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
mae = mean_absolute_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"R²: {r2:.3f}")
print(f"RMSE: {rmse:.2f}")
print(f"MAE: {mae:.2f}")
# 係数を確認
reg = model.named_steps["regressor"]
for name, coef in zip(features, reg.coef_):
print(f"{name}: {coef:+.3f}")
print(f"intercept: {reg.intercept_:.3f}")
# ============================================
# 4. 残差プロット
# ============================================
import matplotlib.pyplot as plt
residuals = y_test - y_pred
plt.scatter(y_pred, residuals, alpha=0.6)
plt.axhline(y=0, linestyle="--")
plt.xlabel("Predicted value")
plt.ylabel("Residual")
plt.title("Residual plot")
plt.show()
# 残差が0の周りにランダムに散らばるかを確認する。
# U字型や漏斗型のパターンがある場合は、
# 非線形性や分散不均一を疑う。
# ============================================
# 5. statsmodels: 係数・信頼区間・p値を確認する
# ============================================
import statsmodels.api as sm
# statsmodelsでは欠測補完などを事前に済ませる必要がある。
# ここでは教育用に、trainデータの中央値で補完する。
X_train_imp = X_train.copy()
X_test_imp = X_test.copy()
median_values = X_train_imp.median()
X_train_imp = X_train_imp.fillna(median_values)
X_test_imp = X_test_imp.fillna(median_values)
X_train_const = sm.add_constant(X_train_imp)
X_test_const = sm.add_constant(X_test_imp)
ols = sm.OLS(y_train, X_train_const).fit()
print(ols.summary())
# 95%信頼区間
print(ols.conf_int())
# ============================================
# 6. 予測区間
# ============================================
predictions = ols.get_prediction(X_test_const)
pred_summary = predictions.summary_frame(alpha=0.05)
print(
pred_summary[
["mean", "mean_ci_lower", "mean_ci_upper",
"obs_ci_lower", "obs_ci_upper"]
].head()
)
# mean_ci_* は平均予測の信頼区間
# obs_ci_* は新しい症例に対する予測区間
scikit-learn は、前処理とモデルを Pipeline でまとめやすいため、予測モデルの開発に向いています。一方、statsmodels は、係数、95% 信頼区間、p値、予測区間を確認しやすいため、回帰分析として論文に記載する場合に便利です。
線形回帰を予測モデルとして使う場合は、test データでの R²、RMSE、MAE を確認します。係数の解釈や p値 を報告する場合は、線形性、独立性、等分散性、残差の正規性、多重共線性なども確認します。
// 07 · MYTHSよくある誤解
- 線形回帰は古いので、機械学習研究では使わなくてよい
- 線形回帰は古典的な手法ですが、現在でも非常に重要です。構造がシンプルで、係数を解釈しやすく、複雑なモデルと比較するためのベースラインにもなります。特に症例数が限られる医療データでは、複雑なモデルより線形回帰や正則化回帰の方が安定することがあります。新しい手法かどうかではなく、研究目的とデータに合っているかが重要です。
- R² が高ければ良いモデルである
- R² は、アウトカムのばらつきのどの程度をモデルが説明できたかを示す指標です。しかし、R² だけでは、予測誤差が臨床的に許容できるかはわかりません。たとえば R² が高くても、RMSE が大きければ、FIM 予測としては実用的でない可能性があります。RMSE、MAE、残差プロット、予測区間、外部検証をあわせて確認します。
- 係数が有意なら、その変数が原因である
- 線形回帰の係数は、他の変数を一定としたときの関連を表します。p値 が有意であっても、それだけで因果効果を示すわけではありません。交絡、逆因果、測定バイアス、選択バイアスがある場合、係数の解釈は変わります。因果を主張するには、研究デザインや因果推論の考え方が必要です。
- 線形回帰では非線形な関係を扱えない
- 線形回帰の「線形」とは、係数に対して線形という意味です。説明変数として、
x²、log(x)、交互作用項などを入れれば、ある程度の非線形関係を表現できます。ただし、複雑な特徴量を増やしすぎると過学習や多重共線性の原因になります。必要に応じて、正則化回帰や決定木系モデルと比較します。
// 08 · WRITING論文での書き方
線形回帰を論文で使う場合は、「線形回帰を行った」と書くだけでは不十分です。予測目的なのか、関連を説明する目的なのかを明確にし、変数選択、前処理、仮定の確認、評価指標を Methods に記載する必要があります[7]。
Methods に記述すべき項目
- 目的変数が連続値であり、線形回帰を選んだ理由
- 単回帰か重回帰か
- 説明変数と共変量の選択理由
- 変数変換、交互作用項、非線形項の有無
- 欠測値処理の方法
- 外れ値の扱い
- 標準化の有無
- 多重共線性の確認方法
- 残差プロット、QQ プロット、等分散性の確認方法
- 評価指標:R²、調整済み R²、RMSE、MAE、95% 信頼区間、95% 予測区間
- train / test 分割または外部検証の方法
- 使用したソフトウェアとパッケージバージョン
Results の書き方例
日本語例:
重回帰分析の結果、入院時 FIM 運動項目、年齢、発症から入院までの日数を含むモデルにおいて、
test データでの R² は 0.71、RMSE は 7.2 点、MAE は 5.8 点であった。
入院時 FIM 運動項目は退院時 FIM 運動項目と正の関連を示したが、
これは観察データに基づく関連であり、因果効果を示すものではない。
残差プロットでは明らかな U 字型パターンは認めなかった。
英語例:
Multiple linear regression was used to predict discharge FIM
motor score from admission variables. On the held-out test set,
the model achieved an R² of 0.71, an RMSE of 7.2 FIM points, and
an MAE of 5.8 FIM points. Admission FIM motor score showed a
positive association with discharge FIM motor score after
adjustment for age and days from onset. This association should
not be interpreted as a causal effect. Residual plots did not
show a clear systematic pattern.
査読者に指摘されやすい点
- 目的変数が連続値である理由が説明されていない
- FIM のような順序尺度を連続値として扱う理由が説明されていない
- 変数選択の根拠が不明
- 多重共線性を確認していない
- 残差プロットや外れ値の確認がない
- R² だけで、RMSE や MAE が示されていない
- 信頼区間と予測区間を混同している
- test データまたは外部検証での性能が示されていない
- 係数を因果効果のように解釈している
- 線形回帰と複雑な機械学習モデルを比較する条件が不公平である
線形回帰を予測モデルとして使う場合は、TRIPOD+AI の確認が基本になります[7]。特に、対象集団、予測時点、説明変数、目的変数、欠測処理、モデル開発、評価指標、内部検証・外部検証を明確に記載します。関連を説明する観察研究として使う場合は、STROBE も参考になります[8]。重要なのは、モデル名ではなく、研究目的に合った報告を行うことです。
// 09 · CHECKLISTチェックリスト
線形回帰を使う前後の 10 項目。
- 01目的変数が連続値であり、線形回帰を使う理由を説明できる
- 02説明変数が予測時点で得られる情報だけで構成されている
- 03FIM などの順序尺度を連続値として扱う理由を説明している
- 04欠測値、外れ値、変数変換の扱いを決めている
- 05残差プロットで線形性と等分散性を確認している
- 06多重共線性を VIF や相関行列で確認している
- 07R² だけでなく、RMSE、MAE、予測区間を確認している
- 08test データまたは外部検証で汎化性能を評価している
- 09係数を因果効果として過剰解釈していない
- 10複雑なモデルと比較する場合、同じデータ分割と評価指標で比較している
// 10 · QUIZミニクイズ
-
Q1退院時 FIM 運動項目の点数を予測したい場合、線形回帰を使う理由として最も適切なのはどれか?
- 目的変数が連続値だから
- 目的変数が 2 値だから
- 生成AIより新しいから
- p値 が不要だから
SHOW ANSWER
A. 退院時 FIM 運動項目を連続値として扱う場合、線形回帰は自然な候補になります。ただし、FIM が順序尺度であること、予測誤差が臨床的に許容できるかは別途確認が必要です。 -
Q2線形回帰で R² が高かったとしても、追加で確認すべきものとして最も適切なのはどれか?
- RMSE、MAE、残差プロット、外部検証
- モデル名だけ
- 学習データでの p値 だけ
- 図の見た目だけ
SHOW ANSWER
A. R² だけでは、予測誤差の大きさや臨床的な使いやすさはわかりません。RMSE、MAE、残差プロット、予測区間、外部検証をあわせて確認します。 -
Q3線形回帰の係数について、最も正しい説明はどれか?
- 係数が有意なら必ず因果効果である
- 他の変数を一定としたときの関連を表す
- 係数は解釈してはいけない
- 係数は AUC と同じ意味である
SHOW ANSWER
B. 線形回帰の係数は、他の変数を一定としたときの関連を表します。観察研究では、係数を因果効果として解釈するには注意が必要です。 -
Q4残差プロットで U 字型のパターンが見えた場合、最も疑うべきことはどれか?
- 非線形性
- データ数が多すぎる
- モデルが完全に正しい
- AUC が高い
SHOW ANSWER
A. U 字型の残差パターンは、線形モデルでは捉えきれていない非線形関係を示す可能性があります。二次項、変数変換、交互作用項、別モデルの検討が必要です。
// REF参考文献
- Harrell FE Jr. Regression Modeling Strategies. 2nd ed. Springer, 2015.
- Hastie T, Tibshirani R, Friedman J. The Elements of Statistical Learning. 2nd ed. Springer, 2009.
- Kutner MH, Nachtsheim CJ, Neter J, Li W. Applied Linear Statistical Models. 5th ed. McGraw-Hill, 2005.
- Steyerberg EW. Clinical Prediction Models: A Practical Approach to Development, Validation, and Updating. 2nd ed. Springer, 2019.
- James G, Witten D, Hastie T, Tibshirani R. An Introduction to Statistical Learning. 2nd ed. Springer, 2021.
- Pedregosa F, Varoquaux G, Gramfort A, et al. Scikit-learn: Machine learning in Python. Journal of Machine Learning Research 2011;12:2825-2830.
- Collins GS, Moons KGM, et al. TRIPOD+AI statement: updated guidance for reporting clinical prediction models that use regression or machine learning methods. BMJ 2024;385:e078378.
- von Elm E, Altman DG, Egger M, Pocock SJ, Gøtzsche PC, Vandenbroucke JP. The STROBE Statement: guidelines for reporting observational studies. Lancet 2007;370:1453-1457.