> dat2 #3列目がグループ(例えば男性と女性とか)と,このようなデータがあった場合,2群の判別分析と重回帰分析が等価であるならば次のようにした結果が同じになるということではないのですか?lm()を使った場合と青木先生のところにあるdisc()を使った場合とでは全然,違う気がするのですが。。。
[,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
> res_k <- lm(dat2[,3] ~ dat2[,1] + dat2[,2])というか,目的変数が今回のように0か1である2値データである場合は「説明変数が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
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となり,丸めによる誤差の範囲内で比は一定。このため予測値と判別値の相関が1になる
lm 0.64656 -0.02198 0.03251
disc 6.6390829 -0.2256723 0.3338548
lm/disc 0.097386945 0.097397864 0.097377662
ロジスティック回帰と重回帰の違いは大きい(問題も多い)と思いますが(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 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る