タイタニックをネタにRの使い方を学ぶ(その3)
判別分析をしてみます。
数値型に変える必要があるようですので型変換をします。
titanic$Sex <- ifelse(titanic$Sex=="male", "0",titanic$Sex)
おっと、この指定だとcharacter型のようでした
> mode(data3$Sex)
charactor
型変換はこうやってするようです。
titanic$Sex = as.numeric(titanic$Sex)
ほかにも、Sex="female", Embarked列も変換しています。
もともと数値でデータが入っていたら変換する必要はなさそう。
あと、NA列があるとダメなようですので排除します。
data_rm_na <- na.omit(data)
判別分析のコマンドはこれ
rlt1_1 <- lda(data, grouping)
data ・・・・・もとのデータから、判別元としたいデータを抜き出す
grouping ・・・もとのデータから、判別結果を抜き出す
加工したデータから、dataとgroupingを作ります。
grouping <- as.matrix(subset(titanic_rm_na, Survived == 0 | Survived == 1, select=1))
data <- subset(titanic, Survived == 0 | Survived ==1, select=c(3,5:8,10,12))
転置が必要のようです。
t(grouping)
やっとデータができたので判別分析
>rlt1-1 <- lda(data, grouping)
>rlt1_2 <-predict(rlt1_1)
> head(rlt1_2$x, 3)
LD1
1 -1.2909017
2 2.1018931
3 0.8351778> head(rlt1_2$posterior, 3)
0 1
1 0.94216346 0.05783654
2 0.05411463 0.94588537
3 0.32060872 0.67939128> head(rlt1_2$class, 3)
[1] 0 1 1
Levels: 0 1
どのくらい正確に判別できるんだろうか、、、、
> table(grouping2, rlt1_2$class)
grouping2 0 1
0 363 61
1 84 206
> (61+84)*100/(363+206+61+84)
[1] 20.30812
20%くらい間違ってる
テスト用のデータではやっていないけど、訓練用データでこの正確さだと、
決定木の76%とどっちが勝つんだろう、、、、
テスト用のデータにもNA値はあるし、、、、
判別に使う変数を変えてみるとまた違うかもしれませんね。