![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Вчера обновил на своих компьютерах R. Это такая очень удобная программа для разных статистических вычислений; в последнее время она стала одним из моих основных инструментов, вместе с пакетом knitr для автоматической генерации отчетов. Я использовал этот пакет для написания этой заметки.
Среди прочего в дистрибутив R входит больше ста разных наборов данных для тестирования, от количества авиапассажиров за каждый месяц с 1949 по 1960 год до роста и веса американских женщин в семидесятые. Один из этих наборов — статистика выживаемости на "Титанике". Это четырехмерный массив с четырьмя категориями: класс, пол, возраст, выжил человек или нет. Из него легко узнать, например, были ли больше шансы выжить у взрослых или детей:
apply(Titanic, c("Age","Survived"),sum)
## Survived ## Age No Yes ## Child 52 57 ## Adult 1438 654
Мы видим, что спаслось больше половины детей, но только около трети взрослых:
prop.table(apply(Titanic, c("Age","Survived"),sum),1)
## Survived ## Age No Yes ## Child 0.4770642 0.5229358 ## Adult 0.6873805 0.3126195
Женщин тоже спасали в первую очередь:
apply(Titanic, c("Sex","Survived"),sum)
## Survived ## Sex No Yes ## Male 1364 367 ## Female 126 344
prop.table(apply(Titanic, c("Sex","Survived"),sum),1)
## Survived ## Sex No Yes ## Male 0.7879838 0.2120162 ## Female 0.2680851 0.7319149
Однако самое интересное — это влияние на выживаемость социального статуса. На "Титанике" были пассажиры первого, второго и третьего класса, а также экипаж. Вот статистика по ним:
apply(Titanic, c("Class","Survived"),sum)
## Survived ## Class No Yes ## 1st 122 203 ## 2nd 167 118 ## 3rd 528 178 ## Crew 673 212
prop.table(apply(Titanic, c("Class","Survived"),sum),1)
## Survived ## Class No Yes ## 1st 0.3753846 0.6246154 ## 2nd 0.5859649 0.4140351 ## 3rd 0.7478754 0.2521246 ## Crew 0.7604520 0.2395480
Видно, как по мере уменьшения статуса падают и шансы выжить. Это можно изобразить на графике:
mosaicplot(prop.table(apply(Titanic, c("Class","Survived"),sum),1), color=TRUE, main="Survival and Class")

Интересно также посмотреть на выживание детей:
apply(Titanic[,,"Child",], c("Class","Survived"),sum)
## Survived ## Class No Yes ## 1st 0 6 ## 2nd 0 24 ## 3rd 52 27 ## Crew 0 0
prop.table(apply(Titanic[,,"Child",], c("Class","Survived"),sum),1)
## Survived ## Class No Yes ## 1st 0.0000000 1.0000000 ## 2nd 0.0000000 1.0000000 ## 3rd 0.6582278 0.3417722 ## Crew NaN NaN
Спасли всех детей, плывших в первом и втором классе, но только треть детей из третьего (среди экипажа детей не было). Более того, выживаемость детей в третьем классе меньше общей выживаемости в первом и втором.
Посмотрим еще на выживаемость взрослых мужчин и женщин по классам:
prop.table(Titanic[,"Male","Adult",],1)
## Survived ## Class No Yes ## 1st 0.6742857 0.32571429 ## 2nd 0.9166667 0.08333333 ## 3rd 0.8376623 0.16233766 ## Crew 0.7772622 0.22273782
prop.table(Titanic[,"Female","Adult",],1)
## Survived ## Class No Yes ## 1st 0.02777778 0.9722222 ## 2nd 0.13978495 0.8602151 ## 3rd 0.53939394 0.4606061 ## Crew 0.13043478 0.8695652
Ну и общая картинка (в абсолютных числах):
mosaicplot(Titanic, color=TRUE)

Да, обещанный совет. Он, боюсь, тривиален, но все же.
Если вы плывете на "Титанике", постарайтесь быть вызывающим жалость пассажиром первого класса.