R Discriminant Analysis (判別分析)
#線形判別関数はlda(),2次判別の関数はqda()
###################1次判別の例###################
x1<-data.frame(hikki=c(68,85,50,54,66),mensetsu=c(65,80,95,70,75))
x2<-data.frame(hikki=c(35,56,25,43,70),mensetsu=c(55,65,75,50,40))
xm1 <- c(mean(x1$hikki),mean(x1$mensetsu))
names(xm1) <- c("hikki","mensetsu")
xm2 <- c(mean(x2$hikki),mean(x1$mensetsu))
names(xm2) <- c("hikki","mensetsu")
#2通りで線形判別を行い、結果を比較してみる。
#1つめ
ss <- var(x1)
sss <- var(x2)
sm <- *1
ldaz <- lda(lbl~.,data=zz)
ldaz
#1つ目と2つ目の結果が一致しないのは、 #固有ベクトルが一意でないことに起因する ldaz$means
ldaz$scaling
ldaz$means %*% ldaz$scaling
#判別直線軸についての平均 mean(ldaz$means%*%ldaz$scaling)
#各群の平均の中点
#線形判別の方程式は、ladz$scaling %*% x - mean(ldaz$means%*%ldaz$scaling)=0
#この方程式による正負領域によってサンプルの判別が出来る
#データに当てはめて判別結果を確認する
predict(ldaz)$class predict(ldaz)$x
#残確認
#上記では2群の分布を正規分布と仮定しているが、 #それらが異なる場合、未知の場合の変形型。
#説明変数の選択基準
#誤判別率の補正
*1:ncol(x1)-1)*ss+((ncol(x2)-1)*sss)/((ncol(x1)+ncol(x2)-2)
k <- solve(sm) %*% (xm1-xm2)
#%*%は行列積。"http://www.is.titech.ac.jp/~shimo/class/doc/r-tips.pdf" #などに詳しい。
#solve("行列")で逆行列を求める
#2つ目
lbl <- c(1,1,1,1,1,2,2,2,2,2)
zz <- data.frame(z1=c(68,85,50,54,66,35,56,25,43,70), z2=c(65,80,95,70,75,55,65,75,50,40