R !!!判別分析 {{outline}} ---- library(MASS) *カテゴリー変数が二値 *2つ以上のスコア !全体のデータをランダムに半分ずつに分ける sample() *トレーニングデータ *テストデータ !トレーニングデータを使って判別モデルを作成 モデル <- <>(カテゴリー変数 ~ 変数A + 変数B, トレーニングデータ) *モデルのあてはまり具合を確認 予測結果1 <- predict(モデル, トレーニングデータ) table(予測結果1$class, トレーニングデータ$カテゴリー) *判別率 tbl1 <- table(予測結果1$class, トレーニングデータ$カテゴリー) sum(diag(tbl1)) / sum(tbl1) !テストデータで検証 *モデルを使って、テストデータを予測して(あてはめて)みる 予測結果2 <- predict(モデル, テストデータ) table(予測結果2$class, テストデータ$カテゴリー) *判別率 tbl2 <- table(予測結果2$class, テストデータ$カテゴリー) sum(diag(tbl2)) / sum(tbl2) !判別率の確認 install.packages("caret", dependencies =T) library(caret) <>を使う *このとき、予測結果のオブジェクトの中の class に予測値が入っている {{pre > confusionMatrix(予測結果$class, テストデータ$gender) Confusion Matrix and Statistics Reference Prediction Female Male Female 2306 191 Male 198 2305 Accuracy : 0.9222 95% CI : (0.9144, 0.9295) No Information Rate : 0.5008 P-Value [Acc > NIR] : <2e-16 Kappa : 0.8444 Mcnemar's Test P-Value : 0.761 Sensitivity : 0.9209 Specificity : 0.9235 Pos Pred Value : 0.9235 Neg Pred Value : 0.9209 Prevalence : 0.5008 Detection Rate : 0.4612 Detection Prevalence : 0.4994 Balanced Accuracy : 0.9222 'Positive' Class : Female }} !!群馬大の青木先生の「判別分析」スクリプト http://aoki2.si.gunma-u.ac.jp/R/disc.html *<> で分析 *<> でグラフ描写 ** plot(判別モデル, which="scatter", xpos="topleft") {{pre source("http://aoki2.si.gunma-u.ac.jp/R/src/disc.R", encoding="euc-jp") head(heights.weights.first) gender height weight 884 Male 185.5176 95.01636 5562 Female 165.3821 58.54528 8277 Female 162.2129 58.18927 612 Male 168.6387 74.87199 4768 Male 168.4758 79.68867 6881 Female 174.5236 74.89278 lda.aoki <- disc(heights.weights.first[2:3], heights.weights.first[1]) 判別関数 Female:Male Partial F p-value height 0.19035 221.4431 0 weight -0.43200 2539.8063 0 constant -0.46693 分類関数 Female Male height -17.93674 -17.55605 weight 10.71814 9.85415 constant 1121.23638 1120.30252 判別結果 prediction group Female Male Female 2294 193 Male 198 2315 正判別率 = 92.2 % plot(lda.aoki, which="scatter", xpos="topleft") }} {{ref_image lda.aoki.png}}