No.08423 lda()による判別分析 定数項について  【波音】 2008/11/27(Thu) 19:07

RのMASSライブラリにあるlda()で判別関数の定数項を求める方法についてですが,
Height <- c(177, 180, 175, 182, 170, 166, 159, 160, 155, 163)
Weight <- c(75, 73, 70, 85, 69, 65, 60, 61, 58, 68)
Sex <- rep(c("male", "female"), c(5, 5))
Sex <- factor(Sex, levels=c("male", "female"))
disc.model <- lda(Sex ~ Height + Weight)

# 定数項を求める
> apply(disc.model$means %*% disc.model$scaling, 2, mean)
LD1
-45.78917

# 係数の取り出し
> disc.model$scaling
LD1
Height -0.3114300
Weight 0.0986707
という結果より,
   Sex = -45.789 - 0.311*Height + 0.099*Weight
という判別関数が得られます。・・・が,これは間違いで正しくは
   Sex = -(-45.789) - 0.311*Height + 0.099*Weight
なのではないかと思うのです。なぜなら,
plot(Weight, Height, col=c("blue", "red")[Sex])
として描かれる散布図に,上の判別式を変形した,
   Height = (-45.789/0.311) + (0.099/0.311) * Weight
という方程式が描く直線は判別するような直線ではないからです。
> f <- function(x) (-45.789/0.311) + (0.099/0.311) * x
> f2 <- function(x) (45.789/0.311) + (0.099/0.311) * x
> x <- seq(50, 85, 1)
> points(x, f(x), type="l")
> points(x, f2(x), type="l")
定数項にマイナスをかけた場合はキチンと判別するような直線が描かれるのですが,これはどういうことなのでしょうか?

No.08426 Re: lda()による判別分析 定数項について  【青木繁伸】 2008/11/27(Thu) 19:26

えーと。この定数項を求める
# 定数項を求める
> apply(disc.model$means %*% disc.model$scaling, 2, mean)
というのは何処にあるんでしょうか(私のページのどっかでどじふんでいた?)

定数項を求めるということの意味として,「判別値が正であるか負であるかで判別できるようにしたい」ということなんでしょう?
だとすると,
> disc.model$means %*% disc.model$scaling
LD1
male -47.71973
female -43.85861
ですから,maleとfemaleの平均値の真ん中が0になるように平行移動するわけでしょう?
判別値の平均値の中点は (-47.71973 + -43.85861)/2=-45.78917ですから,-45.78917が0になるように,加える数値(定数)は -(-45.78917)=45.78917ですよね。
つまり波音さんが書いたSex = -(-45.789) - 0.311*Height + 0.099*Weightで良いわけですよ。

No.08429 Re: lda()による判別分析 定数項について  【波音】 2008/11/27(Thu) 20:57

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

> というのは何処にあるんでしょうか(私のページのどっかでどじふんでいた?)

いえ,青木先生のwebサイトのページではなく,http://www1.doshisha.ac.jp/~mjin/R/17.pdfの6ページの下方(というか一番下の部分)を参考にしました。

> -45.78917が0になるように,加える数値(定数)は -(-45.78917)=45.78917ですよね。

私は apply(disc.model$means %*% disc.model$scaling, 2, mean) として得られた値がそのまま定数項になるのかと思い込んでしまっていました。

後になって考えてみれば,同資料の fLD1 = ・・・ - c という判別関数の定数cの符号がマイナスになっているのは,"平均値の中点が0になるように"ということを明示していたわけなのですね。

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