No.03179 判別分析と回帰分析  【波音】 2007/04/11(Wed) 17:20

http://aoki2.si.gunma-u.ac.jp/lecture/mb-arc/arc010/290.htmlの記事を見ると,「2群の判別分析と重回帰分析は等価である」とありますが,これの意味がよく理解できません。
> dat2 #3列目がグループ(例えば男性と女性とか)
[,1] [,2] [,3]
[1,] 50 15.5 1
[2,] 69 18.4 1
[3,] 93 26.4 1
[4,] 76 22.9 1
[5,] 88 18.6 1
[6,] 43 16.9 0
[7,] 56 21.6 0
[8,] 38 12.2 0
[9,] 21 16.0 0
[10,] 25 10.5 0
と,このようなデータがあった場合,2群の判別分析と重回帰分析が等価であるならば次のようにした結果が同じになるということではないのですか?lm()を使った場合と青木先生のところにあるdisc()を使った場合とでは全然,違う気がするのですが。。。
> res_k <- lm(dat2[,3] ~ dat2[,1] + dat2[,2])
> res_k

Call:
lm(formula = dat2[, 3] ~ dat2[, 1] + dat2[, 2])

Coefficients:
(Intercept) dat2[, 1] dat2[, 2]
-0.14656 0.02198 -0.03251

> res_h <- disc(dat2[,1:2], dat2[,3])
> res_h
$d.function
g1:g2
Var1 -0.2256723
Var2 0.3338548
constant 6.6390829
というか,目的変数が今回のように0か1である2値データである場合は「説明変数が2個以上ある場合のロジスティック回帰分析」をするのが適切だと思うのですが,ちょっと,これらの使い分けに混乱してきてしまいました。

No.03180 Re: 判別分析と回帰分析  【青木繁伸】 2007/04/11(Wed) 17:53

重回帰分析における偏回帰係数は従属変数の取る値に依存し,判別分析における判別係数のスケーリングと定数項の決め方は一通りではないので,係数の数値は両者が全く同じ数値にはならないのが普通かも知れません。
しかし,重回帰分析の予測値と,判別分析の判別値の相関係数が1になるのです。
係数どうしも比例関係にあるのですが,それを示すには重回帰分析の従属変数の値を n1/(n1+n2) と -n2/(n1_n2) にしてやれば比例します。
今の場合だと,重回帰分析の従属変数を 0.5 と -0.5 にすればよいことになりますが,そのとき
> df <- structure(list(X = c(50, 69, 93, 76, 88, 43, 56, 38, 21, 25), 
Y = c(15.5, 18.4, 26.4, 22.9, 18.6, 16.9, 21.6, 12.2, 16, 10.5),
G = c(1, 1, 1, 1, 1, 0, 0, 0, 0, 0)), .Names = c("X", "Y", "G"),
class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10"))
> z <- rep(c(-0.5, 0.5), each=5)
> lm(z~df$X+df$Y)

Call:
lm(formula = z ~ df$X + df$Y)

Coefficients:
(Intercept) df$X df$Y
0.64656 -0.02198 0.03251
となり,両者の比を取ると,
         定数項        X            Y
lm 0.64656 -0.02198 0.03251
disc 6.6390829 -0.2256723 0.3338548
lm/disc 0.097386945 0.097397864 0.097377662
となり,丸めによる誤差の範囲内で比は一定。このため予測値と判別値の相関が1になる

ロジスティック回帰と重回帰の違いは大きい(問題も多い)と思いますが(0/1データの予測で0未満や1以上の予測値が出ることなど),ロジスティック判別と判別分析の違いはそう問題にならないかも知れない。

No.03181 Re: 判別分析と回帰分析  【青木繁伸】 2007/04/11(Wed) 18:22

判別値(ユークリッド平方距離の差)と予測値の相関が1になることについて
> df <- structure(list(X = c(50, 69, 93, 76, 88, 43, 56, 38, 21, 25), 
+ Y = c(15.5, 18.4, 26.4, 22.9, 18.6, 16.9, 21.6, 12.2, 16, 10.5),
+ G = c(1, 1, 1, 1, 1, 0, 0, 0, 0, 0)), .Names = c("X", "Y", "G"),
+ class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10"))
> z <- rep(c(-0.5, 0.5), each=5)
> ans <- lm(z~df$X+df$Y)
> library(MASS)

次のパッケージを付け加えます: 'MASS'

> ans2 <- disc(df[,1:2], df[,3])
> cor(ans2$distance[,2]-ans2$distance[,1], ans$fitted.values)
[1] 1 # ←ここ!

No.03184 Re: 判別分析と回帰分析  【波音】 2007/04/11(Wed) 18:42

早速の回答ありがとうございます。

(実行例も提示してもらったのですが)実際に自分でやってみたら本当に0.5と-0.5にした場合に判別分析の係数と同じになり,相関係数も1になりました。正直,ちょっと驚きました。。。

これで判別分析と重回帰分析が等価であるという意味が分かりました。

● 「統計学関連なんでもあり」の過去ログ--- 040 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る