タイタニックをネタに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値はあるし、、、、

判別に使う変数を変えてみるとまた違うかもしれませんね。