scholar_vit: (knot)
scholar_vit ([personal profile] scholar_vit) wrote2015-03-27 01:28 pm
Entry tags:

R и тривиальный совет пассажирам "Титаника"

Вчера обновил на своих компьютерах 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")
plot of chunksurvival.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)
plot of chunk titanic

Да, обещанный совет. Он, боюсь, тривиален, но все же.

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


Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting