#Derek Yuniwoh
# 1 & 2
library(readr)
## Warning: package 'readr' was built under R version 4.3.2
titanic3 <- read_csv("https://goo.gl/At238b")
## Rows: 1309 Columns: 14
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (8): pclass, name, sex, ticket, cabin, embarked, boat, home.dest
## dbl (6): survived, age, sibsp, parch, fare, body
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
View(titanic3)
#3 build a new dataset, titanic, by selecting these features:
titanicnewset <- titanic3[, c("survived", "embarked", "sex","age", "sibsp", "parch", "fare")]
#4 perform a statistic analysis of the titanic dataset
summary(titanicnewset)
##     survived       embarked             sex                 age       
##  Min.   :0.000   Length:1309        Length:1309        Min.   : 0.17  
##  1st Qu.:0.000   Class :character   Class :character   1st Qu.:21.00  
##  Median :0.000   Mode  :character   Mode  :character   Median :28.00  
##  Mean   :0.382                                         Mean   :29.88  
##  3rd Qu.:1.000                                         3rd Qu.:39.00  
##  Max.   :1.000                                         Max.   :80.00  
##                                                        NA's   :263    
##      sibsp            parch            fare        
##  Min.   :0.0000   Min.   :0.000   Min.   :  0.000  
##  1st Qu.:0.0000   1st Qu.:0.000   1st Qu.:  7.896  
##  Median :0.0000   Median :0.000   Median : 14.454  
##  Mean   :0.4989   Mean   :0.385   Mean   : 33.295  
##  3rd Qu.:1.0000   3rd Qu.:0.000   3rd Qu.: 31.275  
##  Max.   :8.0000   Max.   :9.000   Max.   :512.329  
##                                   NA's   :1
#5 survived is the dependent variable, find its proportion in the dataset
prop.table(table(titanicnewset$survived))
## 
##        0        1 
## 0.618029 0.381971
#6 remove NAs if any
titanicnewset <- na.omit(titanicnewset)
titanicnewset_cor<- titanicnewset[,c("survived","age","sibsp","parch","fare")]
cor(titanicnewset_cor)
##             survived         age       sibsp      parch      fare
## survived  1.00000000 -0.05741486 -0.01140343  0.1154360 0.2478576
## age      -0.05741486  1.00000000 -0.24234489 -0.1493106 0.1772057
## sibsp    -0.01140343 -0.24234489  1.00000000  0.3739597 0.1421305
## parch     0.11543601 -0.14931063  0.37395967  1.0000000 0.2176495
## fare      0.24785762  0.17720569  0.14213054  0.2176495 1.0000000
#7
titanicnewset$survived <- factor(titanicnewset$survived)
titanicnewset$embarked <- factor(titanicnewset$embarked)
titanicnewset$sex <- factor(titanicnewset$sex)
#8 find the correlation matrix between survival and the other
cor(titanicnewset_cor)
##             survived         age       sibsp      parch      fare
## survived  1.00000000 -0.05741486 -0.01140343  0.1154360 0.2478576
## age      -0.05741486  1.00000000 -0.24234489 -0.1493106 0.1772057
## sibsp    -0.01140343 -0.24234489  1.00000000  0.3739597 0.1421305
## parch     0.11543601 -0.14931063  0.37395967  1.0000000 0.2176495
## fare      0.24785762  0.17720569  0.14213054  0.2176495 1.0000000
#9 plot survival with other features to see if any correlation exists
pairs(titanicnewset_cor)

#10 set a seed to 1000 and use it to split the dataset into 80%
#training 20% testing

set.seed(1000)
train_index <- sample(1:nrow(titanicnewset), 0.8 * nrow(titanicnewset))
#11 build your training (till index 1046) and test (till index 1308) datasets
train <- titanicnewset[train_index, ]
test <- titanicnewset[-train_index, ]
#12 rpart already installed
library(rpart)
#13 ***age NOT FOUND
fit<- rpart(survived ~ sex + age + sibsp + parch +fare + embarked , data = train,
            method = "class")
#14 plot your regression tree and save plot into an image file
fit 
## n= 834 
## 
## node), split, n, loss, yval, (yprob)
##       * denotes terminal node
## 
##  1) root 834 337 0 (0.5959233 0.4040767)  
##    2) sex=male 529 110 0 (0.7920605 0.2079395)  
##      4) age>=15 481  85 0 (0.8232848 0.1767152) *
##      5) age< 15 48  23 1 (0.4791667 0.5208333)  
##       10) sibsp>=2.5 16   0 0 (1.0000000 0.0000000) *
##       11) sibsp< 2.5 32   7 1 (0.2187500 0.7812500) *
##    3) sex=female 305  78 1 (0.2557377 0.7442623) *
#15 rattle, rpart.plot, rcolorbrewer are already DOWNLOADED

#16 type the R command fancyRpartPlot(fit) to obtain a more readable plot
library(rpart.plot)
## Warning: package 'rpart.plot' was built under R version 4.3.3
library(rattle)
## Warning: package 'rattle' was built under R version 4.3.3
## Loading required package: tibble
## Warning: package 'tibble' was built under R version 4.3.2
## Loading required package: bitops
## Rattle: A free graphical interface for data science with R.
## Version 5.5.1 Copyright (c) 2006-2021 Togaware Pty Ltd.
## Type 'rattle()' to shake, rattle, and roll your data.
fancyRpartPlot(fit)

#17 examine the tree obtained. what's the most "important" feature over 
#which the tree first split?
#sex
#18 use the predict function with your model fit to make predictions on the test
#dataset and save it in a variable
predicting <- predict(fit,test,type = "class")
#19 save your data frame in a data result that will have two columns

Result <- data.frame(passengersex = test$sex, survivals = predicting)
Result
##     passengersex survivals
## 1           male         0
## 2         female         1
## 3         female         1
## 4         female         1
## 5         female         1
## 6           male         0
## 7           male         0
## 8           male         0
## 9           male         0
## 10        female         1
## 11          male         0
## 12          male         0
## 13        female         1
## 14        female         1
## 15        female         1
## 16          male         0
## 17        female         1
## 18          male         0
## 19        female         1
## 20          male         1
## 21          male         0
## 22          male         0
## 23        female         1
## 24        female         1
## 25          male         0
## 26        female         1
## 27          male         0
## 28        female         1
## 29          male         0
## 30          male         0
## 31          male         0
## 32          male         0
## 33          male         0
## 34        female         1
## 35          male         0
## 36          male         0
## 37          male         0
## 38          male         0
## 39        female         1
## 40        female         1
## 41          male         0
## 42        female         1
## 43          male         0
## 44        female         1
## 45          male         0
## 46          male         0
## 47        female         1
## 48        female         1
## 49          male         0
## 50          male         0
## 51          male         0
## 52          male         0
## 53          male         0
## 54        female         1
## 55        female         1
## 56        female         1
## 57        female         1
## 58          male         1
## 59          male         0
## 60          male         0
## 61        female         1
## 62        female         1
## 63        female         1
## 64        female         1
## 65          male         0
## 66          male         0
## 67        female         1
## 68        female         1
## 69        female         1
## 70        female         1
## 71          male         0
## 72          male         0
## 73          male         0
## 74          male         0
## 75          male         0
## 76          male         0
## 77        female         1
## 78          male         0
## 79          male         0
## 80        female         1
## 81        female         1
## 82        female         1
## 83          male         0
## 84        female         1
## 85        female         1
## 86          male         0
## 87        female         1
## 88          male         0
## 89        female         1
## 90        female         1
## 91        female         1
## 92          male         0
## 93        female         1
## 94          male         0
## 95        female         1
## 96          male         0
## 97          male         0
## 98          male         0
## 99          male         0
## 100       female         1
## 101       female         1
## 102         male         0
## 103         male         0
## 104         male         0
## 105       female         1
## 106       female         1
## 107       female         1
## 108       female         1
## 109       female         1
## 110       female         1
## 111         male         0
## 112         male         0
## 113       female         1
## 114       female         1
## 115         male         0
## 116         male         0
## 117         male         0
## 118         male         0
## 119         male         0
## 120         male         0
## 121       female         1
## 122       female         1
## 123         male         0
## 124       female         1
## 125       female         1
## 126         male         0
## 127       female         1
## 128         male         0
## 129         male         0
## 130       female         1
## 131         male         0
## 132         male         0
## 133         male         0
## 134         male         0
## 135       female         1
## 136         male         0
## 137       female         1
## 138         male         0
## 139         male         0
## 140         male         0
## 141         male         1
## 142         male         0
## 143         male         0
## 144         male         0
## 145         male         0
## 146       female         1
## 147         male         0
## 148         male         0
## 149         male         0
## 150         male         0
## 151       female         1
## 152         male         0
## 153         male         0
## 154         male         0
## 155         male         0
## 156       female         1
## 157         male         0
## 158         male         0
## 159         male         0
## 160         male         0
## 161       female         1
## 162         male         0
## 163       female         1
## 164         male         0
## 165         male         0
## 166         male         0
## 167         male         0
## 168         male         0
## 169       female         1
## 170         male         0
## 171         male         0
## 172       female         1
## 173         male         0
## 174         male         0
## 175       female         1
## 176         male         0
## 177         male         0
## 178         male         0
## 179         male         0
## 180         male         0
## 181         male         0
## 182         male         0
## 183       female         1
## 184         male         0
## 185         male         0
## 186       female         1
## 187         male         0
## 188       female         1
## 189       female         1
## 190         male         0
## 191       female         1
## 192         male         0
## 193         male         0
## 194         male         0
## 195       female         1
## 196         male         0
## 197         male         0
## 198       female         1
## 199         male         0
## 200         male         0
## 201       female         1
## 202         male         0
## 203         male         0
## 204         male         0
## 205       female         1
## 206         male         0
## 207         male         0
## 208         male         0
## 209       female         1
#20 save your data frame in a .csv file by using 
write.csv(Result, file = "TitanicTree.csv", row.names = FALSE)


#21 submit your R code as link to Rpubs and Titanictree.csv file on 
#blackboard by tuesday, april 13th 2024