No.12442 判別式と判別得点について  【のりぶ】 2010/04/12(Mon) 23:49

ldaを用いて二群に対する判別分析を行おうとしています。
判別得点の正負によって判別されると考えていましたが,そうでない場合があるようで混乱しています。
例えばirisのデータでiris[c(51:100,101:120),]を用いて判別分析を行った場合,判別式の係数と定数項は下記のようになり,
Sepal.Length -0.8348248
Sepal.Width -1.9492103
Petal.Length 1.5201382
Petal.Width 4.1007255
定数項: -2.774433
これから得られた判別式は確かにresult <- predict()のresult$xと一致します。
ところが,例えばiris[71,]の判別得点は0.7406となりますが,versicolorではなくversicolorに判別されています。
このような事前の二群の分布が非対称の場合は,判別得点や判別式は判別には使えないのでしょうか。

No.12443 Re: 判別式と判別得点について  【青木繁伸】 2010/04/13(Tue) 07:44

そのやり方で判別するなら,分割点は,0.9119362 でしょう。
result$x の群別平均値は
INDICES: versicolor
[1] -1.215915
---------------------------------------------------------
INDICES: virginica
[1] 3.039787

分割点は,両者の中点 0.9119362。前もって,この値を引いておけば,正負で判別することになります。あなたの求めた「定数項:-2.774433」がその役割を果たしていないのです。

なお,prior 引数とか,predict の返す posterior も確認しておくと良いでしょう。

No.12449 Re: 判別式と判別得点について  【のりぶ】 2010/04/13(Tue) 21:49

青木先生
ご回答頂きましてありがとうございます。
てっきりresult$xの正負で判別できるものと勘違いしていました。
正負で判別する場合はresult$x から
apply(判別分析結果$means%*%判別分析結果$scaling,2,mean) を引いた値の正負で
判別すると理解致しました。
先に弊方が提示した例で確かにそうなることを確認しました。

ところが,現在対象としているデータでは正負の値とresult$classが一致しません。
この場合,(計算間違いは兎も角として)他にどのような要因が考えられますでしょうか。
ldaの判別結果と一致する判別式が知りたいだけなのですが・・。

No.12450 Re: 判別式と判別得点について  【青木繁伸】 2010/04/13(Tue) 21:57

繰り返しになりますが,

prior 引数とか,predict の返す posterior も確認しておくと良いでしょう。

MASS:::predict.lda で,predict が何をやっているか見ることができますよ。

posterior は,要するに各ケースがどの群に属するかを表すベイズ確率です
x <- iris[51:120,]
x$Species <- factor(x$Species)
library(MASS)
result <- predict(lda(x$Species~., x))
centroids <- as.matrix(by(result$x, x$Species, mean), 2) # 各群の重心
k <- 2
n.i <- c(50, 20)
d <- sapply(1:k, function(i) colSums((t(result$x)-centroids[i,])^2)) # 重心までの二乗距離
p.Bayes <- t(t(exp(-d/2))*n.i)
p.Bayes <- p.Bayes/rowSums(p.Bayes) # ベイズ確率
head(p.Bayes)

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