← Back

データ分析法・第8回「重回帰分析(2)・判別分析」

データ分析法学習

授業情報

項目内容
科目データ分析法
回数第8回
テーマ重回帰分析(2):説明変数の選択・AIC、判別分析(線形判別分析)
日付(未記入)

1. 重回帰分析(2):数量化Ⅰ類との関係

数量化Ⅰ類は「ダミー変数を使った重回帰分析」と言える。つまり、説明変数が質的でもダミー変数化すれば重回帰分析に組み込める(lm()factor()定義も可)。そのため、量的説明変数(重回帰)と質的説明変数(数量化Ⅰ類)は同時に分析できる

例題①:量的・質的変数を同時に使って家賃を予測(mreg3.csv / mreg4.csv)

量的変数(面積・徒歩・築年数)と質的変数(バストイレ別・鉄筋か否か)を同時に説明変数として使用。

x <- read.csv("mreg3.csv")   # 列名: rent, area, foot, age, bath2, rebar2
lm(x$rent ~ x$area + x$foot + x$age + x$bath2 + x$rebar2)
  • 重決定係数(R²) = 0.907
  • 回帰式: Y = 2.496 + 0.182×面積 − 0.046×徒歩 − 0.001×築年数 + 1.467×バストイレ2 + 1.112×鉄筋2

2. 説明変数の選択

重回帰分析は説明変数を増やすほど全体の説明度(重決定係数)は上昇するが、やめばに増やすと全体像が捉えにくくなる。適切な説明変数の選択方法:

  1. 背景となる理論・モデルから変数を決定する
  2. 全ての組み合わせについて検討する
  3. 一定の規則に従って選択していく方法(逐次選択法

💡 多変量解析は探索的な性質が強いため、1・2の方法は現実的でないケースが多い。そのため逐次選択法が最も現実的。重決定係数や情報量基準などの指標で基準を設定し、変数を逐次追加・除外して基準の変化を確認する。重決定係数は説明変数数の影響を除ける自由度調整済み決定係数を使うことが多い。

逐次選択法の代表的な3手法

手法説明
ステップワイズ法変数選択・除去を組み合わせた方法
変数除去法最初に全ての変数を投入し、1つずつ除去していく
変数増加法変数を1つずつ投入していく

3. モデル間の比較:情報量基準(AIC)

多変量解析において、各モデルの良し悪しを評価する指標を情報量基準(Information Criterion)といい、代表的なものがAIC(赤池情報量基準;Akaike Information Criterion)

AIC=2×(最大対数尤度)+2×(パラメータの数)AIC = -2\times(\text{最大対数尤度}) + 2\times(\text{パラメータの数})

  • 値に単位はなく、「この値なら良い/悪い」という絶対的な基準はない
  • モデル間の相対的な比較に使う指標であり、値が小さいほどあてはまりが良いと判断される

RでのAIC算出

result <- lm(x$rent ~ x$area + x$foot + x$age + x$bath2 + x$rebar2)
AIC(result)   # AIC関数の()内で分析結果を指定

例題②:説明変数の取捨選択(例題①のデータ)

自由度調整済み重決定係数の変化を基に、説明変数を取捨選択する。

使用する説明変数重決定係数自由度調整済みR²AIC
面積・徒歩・築年数・バストイレ・鉄筋0.9070.88391.933
面積・徒歩・バストイレ・鉄筋0.9070.88889.934
面積・バストイレ・鉄筋0.9000.88689.691

築年数を除外した2番目のモデルが自由度調整済みR²最大・AIC最小で最もあてはまりが良いと判断できる。


4. 判別分析(discriminant analysis)とは

複数の**量的変数(説明変数)**から、質的変数(目的変数)を予測・説明する手法。目的変数はA・B・C…といったカテゴリーで構成され、複数の量的データからAか、Bかを判別する。今回は直線により2つのカテゴリーを判別する線形判別分析を扱う。

用語説明
判別関数(discriminant function)2つに群分けする場合は1本の直線、〇3つに群分けする場合は2本の直線を求める
標準化判別係数(standardized discriminant coefficient)目的変数の群分けに各説明変数が貢献する程度。値が大きいほど貢献度高い
判別的中率(percentage of correct classifications)分析による判別結果が実際のカテゴリーと一致する割合

例題:検査結果から病気の有無を予測

2種類の検査結果(testA・testB)からある病気の有無(1=有、0=無)を予測する判別関数を求める(仮想データ)。


5. Rによる判別分析(lda()関数)

5-1. 基本コマンド

x <- read.csv("da1.csv")            # データの読み込み
library(MASS)                       # MASSパッケージを読み込む(Rの基本パッケージなのでダウンロード不要)
result <- lda(x$disease ~ x$testA + x$testB)   # 目的変数 ~ 説明変数(+で複数指定)

5-2. 結果の解釈:判別関数

判別関数:定数項 + (Aの係数×Aの得点) + (Bの係数×Bの得点)

0.619+0.065A0.099B=0-0.619 + 0.065A - 0.099B = 0

  • lda()summary() では定数項は出力されない(判別結果の確認には不要なため)。必要な場合の算出方法は下記で5‑⁴参照。

5-3. 判別的中率の算出

result <- lda(x$disease ~ x$testA + x$testB)
result2 <- predict(result)
table(x$disease, result2$class)     # 実際(行) × 予測(列) のクロス集計表
  • 例:病気なし(0)は18名中15名、病気あり(1)は10名中7名を正しく判別。判別的中率 = 22/28

5-4. 判別関数の図示

plot(x$testA, x$testB, pch=ifelse(x$disease==1, 1, 16), cex=2)   # 病気有無でマーカーを変えて散布図表示
abline(6.235, 0.652)                                              # abline(a, b)で y=a+bx の直線を描画
  • 判別関数式(1)を B = 6.235 + 0.652A の形に変形して描画する

5-5. 新規データの予測

検査A・Bの値を判別関数式(1)に代入し、計算結果がプラスなら病気なし、マイナスなら病気ありと判断。この例題では約23/28の確率で正しい予測と言える。


6. 標準化判別係数

判別係数は重回帰の偿回帰係数に相当し、元の変数の単位によって値が変わる。単位を揃えて貢献度を比較するには標準化判別係数を算出する。

z <- scale(x)          # 全変数をZ得点に変換
z <- data.frame(z)
lda(x$disease ~ z$testA + z$testB)   # 目的変数は元のまま、説明変数は標準化データ
  • LD1の係数を確認:検査A = 0.573、検査B = −1.119
  • 絶対値で判断すると、この例題では検査Bの方が強く関係している

7. 補足:判別関数の定数項の算出

lda() では定数項が出力されないが、判別結果を使って逆算すれば求められる。

result <- lda(x$disease ~ x$testA + x$testB)
predict(result)
  • $class:各データの判別結果(例:0=病気なし、1=病気あり)
  • $x:各データを判別関数に代入した値(LD1)。この値が正なら一方のカテゴリー、負ならもう一方と判別

例:先頭データ(検査A=40、検査B=18、$x=1.842)から定数項Cを逆算:

C+0.065×400.099×18=1.842C + 0.065\times40 - 0.099\times18 = 1.842

C=1.040\Rightarrow C = 1.040


8. 復習用例題:進路選択の判別(dar.csv)

高校生25名の1年次英語・国語・数学の成績(偵差値)から、その後の進路(理系コース=1、文系コース=2)を判別。

x <- read.csv("dar.csv")   # 列名: eigo, kokugo, suugaku, course
library(MASS)
lda(x$course ~ x$eigo + x$kokugo + x$suugaku)
項目
英語の判別係数0.078
国語の判別係数-0.072
数学の判別係数-0.095
英語の標準判別係数0.783
国語の標準判別係数-0.722
数学の標準判別係数-0.950
判別的中率0.92

※絶対値で見ると数学の標準判別係数(-0.950)が最も大きく、進路判別への貢献が最も大きい。


まとめ

  • 重回帰分析(2):量的・質的説明変数を同時に使用可能(数量化Ⅰ類 = ダミー変数付き重回帰)
  • 逐次選択法:ステップワイズ法・変数除去法・変数増加法で説明変数を取捨選択
  • AIC:値が小さいほどあてはまりが良い。AIC(result) で算出
  • 判別分析:量的説明変数から質的目的変数を予測。Rでは library(MASS) + lda(y ~ x1 + x2)
  • 判別的中率predict() + table() でクロス集計
  • 標準化判別係数scale() で標準化してから lda() を実施すれば比較可能