scholar_vit (scholar_vit) wrote,
scholar_vit
scholar_vit

Category:

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

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

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

Tags: computers, r, titanic
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 35 comments