library(tidyverse)
## Warning: package 'tidyverse' was built under R version 3.6.3
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.3 v purrr 0.3.4
## v tibble 3.1.1 v dplyr 1.0.6
## v tidyr 1.1.3 v stringr 1.4.0
## v readr 1.4.0 v forcats 0.5.1
## Warning: package 'ggplot2' was built under R version 3.6.3
## Warning: package 'tibble' was built under R version 3.6.3
## Warning: package 'tidyr' was built under R version 3.6.3
## Warning: package 'readr' was built under R version 3.6.3
## Warning: package 'purrr' was built under R version 3.6.3
## Warning: package 'dplyr' was built under R version 3.6.3
## Warning: package 'stringr' was built under R version 3.6.3
## Warning: package 'forcats' was built under R version 3.6.3
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(tidyselect)
## Warning: package 'tidyselect' was built under R version 3.6.3
library(epitools)
## Warning: package 'epitools' was built under R version 3.6.3
library(DescTools)
## Warning: package 'DescTools' was built under R version 3.6.3
library(dplyr)
library(ggplot2)
library(caTools)
## Warning: package 'caTools' was built under R version 3.6.3
library(caret)
## Warning: package 'caret' was built under R version 3.6.3
## Loading required package: lattice
##
## Attaching package: 'caret'
## The following objects are masked from 'package:DescTools':
##
## MAE, RMSE
## The following object is masked from 'package:purrr':
##
## lift
library(fBasics)
## Warning: package 'fBasics' was built under R version 3.6.3
## Loading required package: timeDate
## Loading required package: timeSeries
library(lmtest)
## Warning: package 'lmtest' was built under R version 3.6.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 3.6.3
##
## Attaching package: 'zoo'
## The following object is masked from 'package:timeSeries':
##
## time<-
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
File dữ liệu: <>
da<-file.choose()
da1<-file.choose()
train<-read.csv(da, header = T)
test<-read.csv(da1, header = T)
mac<-train %>%
mutate(Pclass = factor(Pclass), Sex = factor(Sex), Survived = factor(Survived)) %>%
select(-c("Ticket", "Cabin", "Name", "PassengerId"))
Chạy mô hình hồi quy cho biến định lượng trong câu 2, thức hiện các bài toán liên quan
PHÂN TÍCH CÁC YẾU TỐ ẢNH HƯỞNG ĐẾN GIá VÉ KHÁCH HÀNG TRẢ
mac1<-mac%>% select(-c("Survived"))
lm.fit<-lm(formula = Fare ~., data = mac1)
summary(lm.fit)
##
## Call:
## lm(formula = Fare ~ ., data = mac1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -72.06 -11.16 -0.08 5.53 427.81
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 95.5862 5.2674 18.147 < 2e-16 ***
## Pclass2 -60.4349 3.9995 -15.111 < 2e-16 ***
## Pclass3 -69.5676 3.4991 -19.881 < 2e-16 ***
## Sexmale -5.3558 2.7981 -1.914 0.0559 .
## Age -0.1632 0.1068 -1.528 0.1268
## SibSp 5.4925 1.2814 4.286 2.02e-05 ***
## Parch 9.7900 1.7740 5.519 4.49e-08 ***
## EmbarkedQ -11.4845 5.4534 -2.106 0.0355 *
## EmbarkedS -13.7248 3.4176 -4.016 6.42e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 37.57 on 882 degrees of freedom
## Multiple R-squared: 0.4336, Adjusted R-squared: 0.4285
## F-statistic: 84.42 on 8 and 882 DF, p-value: < 2.2e-16
Hệ số R-squared = 0,4336 cho biết các biến độc lập trong mô hình giải thích được 43,36% sự biến thiên của biến giá vé khách hàng trả.
Các biến có ý nghĩa thống kê bao gồm: Pclass, Pclass3, Sexmale, Sibsp, EmbarkedQ, EmbarkedS. Độ tuổi không có tác động đáng kể đến giá vé khách hàng trả.
VIF(lm.fit)
## GVIF Df GVIF^(1/(2*Df))
## Pclass 1.374361 2 1.082743
## Sex 1.128114 1 1.062127
## Age 1.219717 1 1.104408
## SibSp 1.259139 1 1.122114
## Parch 1.289534 1 1.135576
## Embarked 1.214149 2 1.049707
Kết quả tính toán cho thấy hệ số VIF của các biến đểu nhỏ hơn 10. Do đó, mh không bị đa cộng tuyến cao
bptest(lm.fit)
##
## studentized Breusch-Pagan test
##
## data: lm.fit
## BP = 49.653, df = 8, p-value = 4.765e-08
Giả thuyết H0: "MH không có PSSS thay đổi"
P-value < 5%, bác bỏ giả tuyết H0 do đó MH có phương sai sai số thay đổi.
Box.test(lm.fit$residuals, lag = 2, type = "Ljung-Box")
##
## Box-Ljung test
##
## data: lm.fit$residuals
## X-squared = 0.89769, df = 2, p-value = 0.6384
Giả thuyết H0: "MH không có tự tương quan bậc 2"
P-value > 5%, chưa đủ cơ sở bác bỏ giả tuyết H0 do đó MH không có tự tương quan bậc 2
normalTest(lm.fit$residuals)
##
## Title:
## Shapiro - Wilk Normality Test
##
## Test Results:
## STATISTIC:
## W: 0.563
## P VALUE:
## < 2.2e-16
##
## Description:
## Wed Aug 23 07:06:27 2023 by user: Administrator
Giả thuyết H0: Phần dư của mô hình có phân phối chuẩn
Với pvalue < 1% , bác bỏ H0 nên phần dư của mô hình không có phân phối chuẩn.
Chạy mô hình hồi quy cho biến định tính trong câu 2, thức hiện các bài toán liên quan
# Chọn các biến số liên tục trong mô hình
continuous_vars <- mac[, sapply(mac, is.numeric)]
# Tính ma trận tương quan
cor_matrix <- cor(continuous_vars)
cor_matrix
## Age SibSp Parch Fare
## Age 1.00000000 -0.2332963 -0.1724820 0.09668842
## SibSp -0.23329633 1.0000000 0.4148377 0.15965104
## Parch -0.17248195 0.4148377 1.0000000 0.21622494
## Fare 0.09668842 0.1596510 0.2162249 1.00000000
Mô hình có biến phụ thuộc: survived và các biến độc lập bao gồm 3 biến định tính: Pclass, Sex, Embarked và 4 biến định lượng bao gồm: Age, Sibsp, Parch, Fare.
mh1 <- glm(Survived ~., family = binomial(link = 'logit'), data = mac)
summary(mh1)
##
## Call:
## glm(formula = Survived ~ ., family = binomial(link = "logit"),
## data = mac)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.6169 -0.6089 -0.4172 0.6077 2.4526
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 4.070966 0.472692 8.612 < 2e-16 ***
## Pclass2 -0.914816 0.297481 -3.075 0.00210 **
## Pclass3 -2.147100 0.297781 -7.210 5.58e-13 ***
## Sexmale -2.716589 0.201048 -13.512 < 2e-16 ***
## Age -0.038573 0.007859 -4.908 9.19e-07 ***
## SibSp -0.320902 0.109163 -2.940 0.00329 **
## Parch -0.092618 0.118881 -0.779 0.43593
## Fare 0.002312 0.002468 0.937 0.34876
## EmbarkedQ -0.065598 0.380949 -0.172 0.86328
## EmbarkedS -0.447119 0.239171 -1.869 0.06156 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1186.66 on 890 degrees of freedom
## Residual deviance: 784.83 on 881 degrees of freedom
## AIC: 804.83
##
## Number of Fisher Scoring iterations: 5
# Kiểm định sự phù hợp của mô hình bằng cách tính giá trị Prob(LR statistic)
lr_test <- anova(mh1, test = "Chisq")
# Lấy giá trị Prob(LR statistic)
p_value <- lr_test$Pr[2]
p_value
## [1] 3.273615e-23
Kiểm định sự phù hơp của mô hình
Giả thuyết H0: mô hình không phù hợp Với P-value = Prob(LR) < 0 bác bỏ giả thuyết H0 nên mô hình phù hợp với dữ liệu.
Các biến trong mô hình 2 là các biến trong mô hình 1 đã loại bỏ đi biến Parch (do biến này không có ý nghĩa thống kê)
mh2 <- glm(Survived ~., family = binomial(link = 'probit'), data = mac)
summary(mh2)
##
## Call:
## glm(formula = Survived ~ ., family = binomial(link = "probit"),
## data = mac)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.7275 -0.6211 -0.4169 0.6179 2.4829
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.368483 0.266165 8.899 < 2e-16 ***
## Pclass2 -0.526840 0.173499 -3.037 0.00239 **
## Pclass3 -1.203571 0.169609 -7.096 1.28e-12 ***
## Sexmale -1.607835 0.112394 -14.305 < 2e-16 ***
## Age -0.022014 0.004457 -4.939 7.83e-07 ***
## SibSp -0.189313 0.061177 -3.095 0.00197 **
## Parch -0.063797 0.070036 -0.911 0.36234
## Fare 0.001522 0.001436 1.060 0.28932
## EmbarkedQ -0.076019 0.216703 -0.351 0.72574
## EmbarkedS -0.265159 0.136619 -1.941 0.05227 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1186.66 on 890 degrees of freedom
## Residual deviance: 786.05 on 881 degrees of freedom
## AIC: 806.05
##
## Number of Fisher Scoring iterations: 5
# Kiểm định sự phù hợp của mô hình bằng cách tính giá trị Prob(LR statistic)
lr_test <- anova(mh2, test = "Chisq")
# Lấy giá trị Prob(LR statistic)
p_value <- lr_test$Pr[2]
p_value
## [1] 3.273615e-23
Kiểm định sự phù hơp của mô hình
Giả thuyết H0: mô hình không phù hợp Với P-value = Prob(LR) = 0, 0000 < 5% bác bỏ giả thuyết H0 nên mô hình phù hợp với dữ liệu.
Do biến Fare không có ý nghĩa thống kê nên tiếp tục loại bỏ biến này và chạy lại mô hình(MH3)
mh3 <- glm(Survived ~., family = binomial(link = 'cloglog'), data = mac)
summary(mh3)
##
## Call:
## glm(formula = Survived ~ ., family = binomial(link = "cloglog"),
## data = mac)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -3.2381 -0.6618 -0.4522 0.5306 2.3060
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.3131943 0.3070927 7.533 4.98e-14 ***
## Pclass2 -0.5145602 0.2028800 -2.536 0.0112 *
## Pclass3 -1.5652794 0.2100747 -7.451 9.26e-14 ***
## Sexmale -1.9892230 0.1347215 -14.765 < 2e-16 ***
## Age -0.0228365 0.0053914 -4.236 2.28e-05 ***
## SibSp -0.1983802 0.0791471 -2.506 0.0122 *
## Parch -0.0777190 0.0839388 -0.926 0.3545
## Fare 0.0006759 0.0014975 0.451 0.6517
## EmbarkedQ 0.0411503 0.2549513 0.161 0.8718
## EmbarkedS -0.3593093 0.1619217 -2.219 0.0265 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1186.66 on 890 degrees of freedom
## Residual deviance: 775.19 on 881 degrees of freedom
## AIC: 795.19
##
## Number of Fisher Scoring iterations: 7
# Kiểm định sự phù hợp của mô hình bằng cách tính giá trị Prob(LR statistic)
lr_test <- anova(mh3, test = "Chisq")
# Lấy giá trị Prob(LR statistic)
p_value <- lr_test$Pr[2]
p_value
## [1] 3.273615e-23
Kiểm định sự phù hơp của mô hình
Giả thuyết H0: mô hình không phù hợp Với P-value = Prob(LR) = 0, 0000 < 5% bác bỏ giả thuyết H0 nên mô hình phù hợp với dữ liệu.
AIC(MH logit) = 804,83
AIC(MH probit) = 806,05
AIC(MH cloglog) = 795,19
Mô hình cloglog có AIC nhỏ nhất nên ta chọn MH cloglog
Deviance(MH logit) = 784,83
Deviance(MH probit) = 786,05
Deviance(MH cloglog) = 775,19
Mô hình cloglog deviance nhỏ nhất nên ta chọn MH cloglog
BrierScore(mh1)
## [1] 0.1392707
BrierScore(mh2)
## [1] 0.1397801
BrierScore(mh3)
## [1] 0.1371204
Dựa vào tiêu chí Brier score ta thấy MH cloglog có giá trị nhỏ nhất nên ta chọn MH cloglog
Mô hình logit
predictions <- predict(mh1, newdata = mac, type = "response")
predicted_classes <- ifelse(predictions > 0.5, "1", "0") # Chỉnh ngưỡng phân loại
predictions1<-factor(predicted_classes, levels = c("0","1"))
actual<- factor(mac$Survived, labels = c("0","1"))
confusionMatrix(table(predictions1, actual))
## Confusion Matrix and Statistics
##
## actual
## predictions1 0 1
## 0 477 102
## 1 72 240
##
## Accuracy : 0.8047
## 95% CI : (0.7771, 0.8303)
## No Information Rate : 0.6162
## P-Value [Acc > NIR] : < 2e-16
##
## Kappa : 0.5802
##
## Mcnemar's Test P-Value : 0.02791
##
## Sensitivity : 0.8689
## Specificity : 0.7018
## Pos Pred Value : 0.8238
## Neg Pred Value : 0.7692
## Prevalence : 0.6162
## Detection Rate : 0.5354
## Detection Prevalence : 0.6498
## Balanced Accuracy : 0.7853
##
## 'Positive' Class : 0
##
MH logit có độ chính xác toàn thể là 80,47%, độ nhạy là 86,89% và độ hiệu quả là 70,18%
Mô hình probit
predictions <- predict(mh2, newdata = mac, type = "response")
predicted_classes <- ifelse(predictions > 0.5, "1", "0") # Chỉnh ngưỡng phân loại
predictions1<-factor(predicted_classes, levels = c("0","1"))
actual<- factor(mac$Survived, labels = c("0","1"))
confusionMatrix(table(predictions1, actual))
## Confusion Matrix and Statistics
##
## actual
## predictions1 0 1
## 0 474 102
## 1 75 240
##
## Accuracy : 0.8013
## 95% CI : (0.7736, 0.8271)
## No Information Rate : 0.6162
## P-Value [Acc > NIR] : < 2e-16
##
## Kappa : 0.5737
##
## Mcnemar's Test P-Value : 0.05067
##
## Sensitivity : 0.8634
## Specificity : 0.7018
## Pos Pred Value : 0.8229
## Neg Pred Value : 0.7619
## Prevalence : 0.6162
## Detection Rate : 0.5320
## Detection Prevalence : 0.6465
## Balanced Accuracy : 0.7826
##
## 'Positive' Class : 0
##
MH probit có độ chính xác toàn thể là 80,13%, độ nhạy là 86,34% và độ hiệu quả là 70,18%
Mô hình cloglog
predictions <- predict(mh3, newdata = mac, type = "response")
predicted_classes <- ifelse(predictions > 0.5, "1", "0") # Chỉnh ngưỡng phân loại
predictions1<-factor(predicted_classes, levels = c("0","1"))
actual<- factor(mac$Survived, labels = c("0","1"))
confusionMatrix(table(predictions1, actual))
## Confusion Matrix and Statistics
##
## actual
## predictions1 0 1
## 0 492 110
## 1 57 232
##
## Accuracy : 0.8126
## 95% CI : (0.7854, 0.8377)
## No Information Rate : 0.6162
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.5918
##
## Mcnemar's Test P-Value : 5.725e-05
##
## Sensitivity : 0.8962
## Specificity : 0.6784
## Pos Pred Value : 0.8173
## Neg Pred Value : 0.8028
## Prevalence : 0.6162
## Detection Rate : 0.5522
## Detection Prevalence : 0.6756
## Balanced Accuracy : 0.7873
##
## 'Positive' Class : 0
##
MH cloglog có độ chính xác toàn thể là 81,26%, độ nhạy là 89,62% và độ hiệu quả là 67,84%
MH cloglog có độ chính xác, độ nhạy cao nhất trong 3 MH do đó chọn mô hình cloglog
Kết luận: Dựa vào 4 tiêu chuẩn trên ta thấy MH cloglog là mô hình được chọn nhiều nhất (4 tiêu chí) do đó thực hiện dự báo hành khách sống sót ta chọn MH cloglog
summary(mh3)
##
## Call:
## glm(formula = Survived ~ ., family = binomial(link = "cloglog"),
## data = mac)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -3.2381 -0.6618 -0.4522 0.5306 2.3060
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 2.3131943 0.3070927 7.533 4.98e-14 ***
## Pclass2 -0.5145602 0.2028800 -2.536 0.0112 *
## Pclass3 -1.5652794 0.2100747 -7.451 9.26e-14 ***
## Sexmale -1.9892230 0.1347215 -14.765 < 2e-16 ***
## Age -0.0228365 0.0053914 -4.236 2.28e-05 ***
## SibSp -0.1983802 0.0791471 -2.506 0.0122 *
## Parch -0.0777190 0.0839388 -0.926 0.3545
## Fare 0.0006759 0.0014975 0.451 0.6517
## EmbarkedQ 0.0411503 0.2549513 0.161 0.8718
## EmbarkedS -0.3593093 0.1619217 -2.219 0.0265 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1186.66 on 890 degrees of freedom
## Residual deviance: 775.19 on 881 degrees of freedom
## AIC: 795.19
##
## Number of Fisher Scoring iterations: 7
Kết quả phân tích hồi quy cloglog cho thấy, 9 biến đưa vào mô hình hồi quy để phân tích nhưng kết quả phân tích chỉ có 6 biến độc lập có ý nghĩa thống kê bao gồm:
Với giả thuyết các yếu tố khác không đổi, ảnh hưởng của từng biến đến được diễn giải như sau:
Hạng vé khác nhau sẽ có tác động đáng kể đến khả năng sống sót của hành khách. Ở mức ý nghĩa 5% thì hành khách có hạng vé Middle sẽ có xác suất sống sót cao hơn 44,996 % so với hạng vé Upper. Ở mức ý nghĩa 1% hạng vé Lower sẽ có xác suất sống sót cao hơn 18,86% so với hạng vé Upper.
Giới tính của hành khách có tác động đáng kể đến khả năng sống sót sau vụ chìm tàu. Ở mức ý nghĩa 1% hành khách nam sẽ có xác suất sống sót cao hơn 12,79% so với hành khách nữ.
Ở mức ý nghĩa 1%, Độ tuổi có tác động tiêu cực lên khả năng sống sot của hành khách.
Vị trí cảng lên tàu khác nhau sẽ có tác động đáng kể đến khả năng sống sót của hành khách. Ở mức ý nghĩa 5% thì hành khách lên tàu từ cảng S sẽ có xác suất sống sót cao hơn 50,25 % so với hành khách lên tàu từ cảng C.
test<-test %>%
mutate(Pclass = factor(Pclass), Sex = factor(Sex))
predictions <- predict(mh3, newdata = test, type = "response")
head(round(predictions,4),10)
## 1 2 3 4 5 6 7 8 9 10
## 0.1286 0.3400 0.1897 0.1038 0.4948 0.1371 0.6722 0.2185 0.7552 0.0818
Làm thống kê mô tả cho ít nhất 7 biến (vừa định tính định lượng và có 2 biến đã chọn ở câu 2) nhận xét về kết quả phân tích này.
table(mac$Survived)
##
## 0 1
## 549 342
table(mac$Survived)/sum(table(mac$Survived))
##
## 0 1
## 0.6161616 0.3838384
Có 549 hành khách mất sau vụ chìm tàu Titanic chiếm tỷ lệ 61,62% (tổng số hành khách) và 34 hành khách còn sống chiếm tỷ lệ 38,38% (tổng số hành khách)
ggplot(mac,aes(Survived))+
geom_bar(color = "blue", fill = "green")+
geom_text(aes(label = scales :: percent(after_stat(count/sum(count)))), stat= 'count', color = 'black', vjust = -.5)+
ylab("Number of Passenger")+ xlab("Survival")
table(mac$Pclass)
##
## 1 2 3
## 216 184 491
Có 216 hành khách mua hạng vé Upper, 184 hành khách mua hạng vé Middle, 491 hành khách mua hạng vé Lower.
ggplot(mac,aes(Pclass))+
geom_bar(color = "blue", fill = "green")+
geom_text(aes(label = scales :: percent(after_stat(count/sum(count)))), stat= 'count', color = 'black', vjust = -.5)+
ylab("Number of passenger")+ xlab("Ticket Class")
table(mac$Sex)
##
## female male
## 314 577
Có 314 hành khách nữ và 577 hành khách nam.
ggplot(mac,aes(Sex))+
geom_bar(color = "blue", fill = "green")+
geom_text(aes(label = scales :: percent(after_stat(count/sum(count)))), stat= 'count', color = 'black', vjust = -.5)+
ylab("Number of passenger")+ xlab("Sex")
summary(mac$Embarked)
## C Q S
## 170 77 644
ggplot(mac,aes(Embarked))+
geom_bar(color = "blue", fill = "green")+
geom_text(aes(label = scales :: percent(after_stat(count/sum(count)))), stat= 'count', color = 'black', vjust = -.5)+
ylab("Number of passenger")+ xlab("Embarked")
Thống kê mô tả
mac1<-data.frame(mac$Age, mac$SibSp, mac$Parch, mac$Fare)
summary(mac1)
## mac.Age mac.SibSp mac.Parch mac.Fare
## Min. : 0.42 Min. :0.000 Min. :0.0000 Min. : 0.00
## 1st Qu.:22.00 1st Qu.:0.000 1st Qu.:0.0000 1st Qu.: 7.91
## Median :28.00 Median :0.000 Median :0.0000 Median : 14.45
## Mean :29.36 Mean :0.523 Mean :0.3816 Mean : 32.20
## 3rd Qu.:35.00 3rd Qu.:1.000 3rd Qu.:0.0000 3rd Qu.: 31.00
## Max. :80.00 Max. :8.000 Max. :6.0000 Max. :512.33
Từ kết quả thống kê mô tả cho thấy:
Tuổi của hành khách nhỏ nhất là 0,42 ; giá trị lớn nhất là 80; giá trị trung bình là 29,36; 25% dữ liệu nhỏ hơn 22 (giá trị tứ phân vị thứ nhất); 50% dữ liệu nhỏ hơn 28 (giá trị trung vị); 75% dữ liệu nhỏ hơn 35 (giá trị tứ phân vị thứ ba)
Số anh chị em/ vợ chồng trên tàu của hành khách (Sibsp): giá trị nhỏ nhất của dữ liệu 0; giá trị lớn nhất là 8; giá trị trung bình là 0,523; 25% dữ liệu nhỏ hơn 0 (giá trị tứ phân vị thứ nhất); 50% dữ liệu nhỏ hơn 0 (giá trị trung vị); 75% dữ liệu nhỏ hơn 1 (giá trị tứ phân vị thứ ba)
số ba mẹ/ con trên tàu của hành khách (Parch): giá trị nhỏ nhất của dữ liệu 0; giá trị lớn nhất là 6; giá trị trung bình là 0,3816; 25% dữ liệu nhỏ hơn 0(giá trị tứ phân vị thứ nhất); 50% dữ liệu nhỏ hơn 0 (giá trị trung vị); 75% dữ liệu nhỏ hơn 0 (giá trị tứ phân vị thứ ba)
Giá vé hành khách (FARE): giá trị nhỏ nhất của dữ liệu 0; giá trị lớn nhất là 512,33; giá trị trung bình là 32,2; 25% dữ liệu nhỏ hơn 7,91 (giá trị tứ phân vị thứ nhất); 50% dữ liệu nhỏ hơn 14,45 (giá trị trung vị); 75% dữ liệu nhỏ hơn 31 (giá trị tứ phân vị thứ ba)
Biểu đồ Histogram
hist(mac$Age)
Độ tuổi của hành khách nằm trong phạm vi 20 đến 30 là nhiều nhất.
hist(mac$SibSp)
Đa số số anh chị em/ vợ chống trên tàu của hành khách là 1
hist(mac$Parch)
Đa số số ba mẹ/ con trên tàu của hành khách là 1
hist(mac$Fare)
Giá vé khách hàng trả đa số nằm trong phạm vi 0 - 50
rm<-table(mac$Sex,mac$Survived)
addmargins(rm)
##
## 0 1 Sum
## female 81 233 314
## male 468 109 577
## Sum 549 342 891
Trong tổng số 314 hành khách nữ có 233 hành khách được giải cứu và sống sót, số còn lại đã tử vong. Trong tổng số 577 hành khách nam có 109 người sống sót và 468 người đã mất.
ggplot(mac, aes(Sex, fill = Survived)) + geom_bar(position = 'dodge')
Nhìn vào biểu đồ ta thấy tỷ lệ sống sót của phụ nữ cao hơn nhiều so với nam.
Relative risk
RelRisk(rm)
## [1] 0.3180426
Tỷ lệ khách hàng nữ mất sau vụ chìm tàu Titanic bằng 31,8043 % tỷ lệ khách hàng nam mất sau vụ chìm tàu Titanic.
Risk ratio
epitab(rm,method='riskratio',rev='c')
## $tab
##
## 1 p0 0 p1 riskratio lower upper p.value
## female 233 0.7420382 81 0.2579618 1.000000 NA NA NA
## male 109 0.1889081 468 0.8110919 3.144233 2.595782 3.808564 6.463922e-60
##
## $measure
## [1] "wald"
##
## $conf.level
## [1] 0.95
##
## $pvalue
## [1] "fisher.exact"
Tỷ lệ hành khách nam còn sống sót sau vụ chìm tàu gấp 3,14 lần tỷ lệ hành khách nữ còn sống sau vụ chìm tàu.
epitab(rm, method = 'oddsratio', rev='c')
## $tab
##
## 1 p0 0 p1 oddsratio lower upper p.value
## female 233 0.6812865 81 0.147541 1.00000 NA NA NA
## male 109 0.3187135 468 0.852459 12.35066 8.899955 17.13928 6.463922e-60
##
## $measure
## [1] "wald"
##
## $conf.level
## [1] 0.95
##
## $pvalue
## [1] "fisher.exact"
Tỷ lệ sống sót so với tỷ lệ mất của hành khách nam gấp 12,35066 lần tỷ lệ sống sót so với tỷ lệ mất của hành khách nữ
rm1<-table(mac$Embarked,mac$Survived)
rm1
##
## 0 1
## C 75 95
## Q 47 30
## S 427 217
ggplot(mac, aes(Embarked, fill = Survived)) + geom_bar(position = 'dodge')
Tỷ lệ sống sót của hành khách lên tàu từ cảng S là cao nhất.
ggplot(mac, aes(x = Age, fill = Survived)) + theme_bw()+ geom_histogram(binwidth = 8)+ labs(y = "Passenger count", x = "Age", title = "Titanic survival rates by age")
rm2<-ftable(mac$Pclass, mac$Sex ,mac$Survived)
rm2
## 0 1
##
## 1 female 3 91
## male 77 45
## 2 female 6 70
## male 91 17
## 3 female 72 72
## male 300 47
Đối với hạng vé Upper:
Đối với hạng vé Middle:
Đối với hạng vé Lower:
ggplot(mac, aes(x = Sex, fill = Survived)) +
theme_bw()+
facet_wrap(~ Pclass)+
geom_bar()+
labs(y = "Passenger count",
title = "Titanic survival rates by Pclass and sex")
Nhìn vào biểu đồ ta thấy: * Đối với cả 3 hạng vé Upper, Midle, Lower: tỷ lệ sống sót của hành khách nữ đều cao hơn so với hành khách nam. Và tỷ lệ sống sót của hành khách nữ ở hạng vé Upper là cao nhất.
Kiểm định tính độc lập cho 2 biến Survived và Pclass
chisq.test(table(mac$Survived,mac$Pclass))
##
## Pearson's Chi-squared test
##
## data: table(mac$Survived, mac$Pclass)
## X-squared = 102.89, df = 2, p-value < 2.2e-16
Với p_value < 5%, bác bỏ giả thuyết H0 do đó kết luận việc hành khách sống sỏt có liên quan tới hạng vé
Kiểm định tính độc lập cho 2 biến Survived và Sex
chisq.test(table(mac$Survived,mac$Sex))
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: table(mac$Survived, mac$Sex)
## X-squared = 260.72, df = 1, p-value < 2.2e-16
Qua kết quả kiểm định cho thấy việc hành khách sống sỏt có liên quan tới giới tính của hành khách (p_value<5%)
Kiểm định tính độc lập cho 2 biến Survived và Embarked
chisq.test(table(mac$Survived,mac$Embarked))
##
## Pearson's Chi-squared test
##
## data: table(mac$Survived, mac$Embarked)
## X-squared = 28.005, df = 2, p-value = 8.294e-07
Qua kết quả kiểm định cho thấy việc hành khách sống sỏt có liên quan tới cảng lên tàu của hành khách (p_value<5%)
rm<- mac[mac$Survived == "1",]
rm1<-rm[rm$Sex == "male",]
prop.test(length(rm1$Sex), length(rm$Sex), p = 0.4)
##
## 1-sample proportions test with continuity correction
##
## data: length(rm1$Sex) out of length(rm$Sex), null probability 0.4
## X-squared = 9.08, df = 1, p-value = 0.002584
## alternative hypothesis: true p is not equal to 0.4
## 95 percent confidence interval:
## 0.2701891 0.3713836
## sample estimates:
## p
## 0.3187135
Với khoảng tin cậy 95% ước lượng tỷ lệ hành khách nam sống sót nằm trong khoảng từ 0,2702 đến 0,37138
p-value < 0, bác bỏ giả thuyết H0. Do đó tỷ lệ (%) hành khách nam sống sót không bằng 40% với mức ý nghĩa 5%.
rf<- mac[mac$Survived == "1",]
rf1<-rm[rm$Sex == "female",]
prop.test(length(rf1$Sex), length(rf$Sex), p = 0.6)
##
## 1-sample proportions test with continuity correction
##
## data: length(rf1$Sex) out of length(rf$Sex), null probability 0.6
## X-squared = 9.08, df = 1, p-value = 0.002584
## alternative hypothesis: true p is not equal to 0.6
## 95 percent confidence interval:
## 0.6286164 0.7298109
## sample estimates:
## p
## 0.6812865
Với khoảng tin cậy 95% ước lượng tỷ lệ hành khách nữ sống sót nằm trong khoảng từ 0,6286 đến 0,7298
p-value < 0, bác bỏ giả thuyết H0. Do đó tỷ lệ (%) hành khách nữ sống sót không bằng 60% với mức ý nghĩa 5%.
a <- c(nrow(rm), nrow(rf))
b <- c(nrow(rm1), nrow(rf1))
prop.test(b,a)
##
## 2-sample test for equality of proportions with continuity correction
##
## data: b out of a
## X-squared = 88.474, df = 1, p-value < 2.2e-16
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.4353388 -0.2898074
## sample estimates:
## prop 1 prop 2
## 0.3187135 0.6812865
P_value > 0, bác bỏ giả thuyết H0, do đó không có sự chênh lệnh về tỷ lệ hành khách có độ tuổi lớn hơn 30 giữa hành khách nam và nữ
Khoảng tin cậy 95% cho chênh lệch tỷ lệ nằm trong khoảng từ -0,06984 đến 0,06984
Chọn 1 biến định tính và 1 biến định lượng làm biến phụ thuộc để phân tích, giải thích lý do
Bộ dứ liệu training có 12 biến quan sát gôm 891 quan sát.
str(train)
## 'data.frame': 891 obs. of 12 variables:
## $ PassengerId: int 1 2 3 4 5 6 7 8 9 10 ...
## $ Survived : int 0 1 1 1 0 0 0 0 1 1 ...
## $ Pclass : int 3 1 3 1 3 3 1 3 3 2 ...
## $ Name : Factor w/ 891 levels "Abbing, Mr. Anthony",..: 109 179 358 277 16 559 520 629 417 581 ...
## $ Sex : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
## $ Age : num 22 38 26 35 35 28 54 2 27 14 ...
## $ SibSp : int 1 1 0 1 0 0 0 3 0 1 ...
## $ Parch : int 0 0 0 0 0 0 0 1 2 0 ...
## $ Ticket : Factor w/ 681 levels "110152","110413",..: 524 597 670 50 473 276 86 396 345 133 ...
## $ Fare : num 7.25 71.28 7.92 53.1 8.05 ...
## $ Cabin : Factor w/ 148 levels "","A10","A14",..: 1 83 1 57 1 1 131 1 1 1 ...
## $ Embarked : Factor w/ 3 levels "C","Q","S": 3 1 3 3 3 2 3 3 3 1 ...
Dự báo khách hàng sống sót sau vụ chìm tàu Titanic
Vụ chìm tàu Titanic là một trong những vụ đắm tàu khét tiếng nhất trong lịch sử. Vào ngày 15 tháng 4 năm 1912, trong chuyến hành trình đầu tiên của mình, con tàu RMS Titanic được nhiều người coi là “không thể chìm” đã chìm sau khi va chạm với một tảng băng trôi. Thật không may, không có đủ xuồng cứu sinh cho mọi người trên tàu, dẫn đến cái chết của 1502 trong số 2224 hành khách và thủy thủ đoàn. Mặc dù có một số yếu tố may mắn liên quan đến việc sống sót, nhưng có vẻ như một số nhóm người có nhiều khả năng sống sót hơn những nhóm khác.
Trong bài tiểu luận này tôi sẽ thực hiện xây dựng một mô hình dự báo hành khách sống sót sau vụ chìm tàu sử dụng dữ liệu hành khách bao gồm:
Phân tích các yếu tố ảnh hưởng đến giá vé hành khách trả
Tìm một dataset có dữ liệu định tính, dữ liệu định lượng, có trên 5 biến và nhiều hơn 150 quan sát.
Bộ dữ liệu này bao gồm số lượng xe đạp cho thuê hàng giờ và hàng ngày trong khoảng thời gian từ năm 2011 đến 2012 trong hệ thống chia sẻ xe đạp Capital vơi thông tin thời tiết và mùa tương ứng.
Hệ thống chia sẻ xe đạp là thế hệ mới của dịch vụ cho thuê xe đạp truyền thống, trong đó toàn bộ quá trình từ tư cách thành viên, cho thuê và trả lại đều trở nên tự động. Thông qua các hệ thống này, người dùng có thể dễ dàng thuê một chiếc xe đạp từ một vị trí cụ thể và quay trở lại ở một vị trí khá. Ngày nay, có rất nhiều mối quan tâm đến các hệ thống này do vai trò quan trọng của chúng đối với các vấn đề về giao thông, môi trường và sức khỏe. Ngoài các ứng dụng thú vị trong thế giới thực của hệ thống chia sẻ xe đạp, các đặc điểm của dữ liệu do các hệ thống này tạo ra khiến chúng trở nên hấp dẫn đối với nghiên cứu. Đối lập với các dịch vụ vận tải khác như xe buýt hoặc tàu điện ngầm, thời gian di chuyển, điểm khởi hành và điểm đến được ghi lại rõ ràng trong các hệ thống này. Tính năng này biến hệ thống chia sẻ xe đạp thành một mạng cảm biến ảo có thể được sử dụng để cảm nhận tính di động trong thành phố. Do đó, người ta hy vọng rằng hầu hết các sự kiện quan trọng trong thành phố có thể được phát hiện thông qua giám sát các dữ liệu này.library(ISLR2)
data(Bikeshare)
Bikeshare
str(Bikeshare)
## 'data.frame': 8645 obs. of 15 variables:
## $ season : num 1 1 1 1 1 1 1 1 1 1 ...
## $ mnth : Factor w/ 12 levels "Jan","Feb","March",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ day : num 1 1 1 1 1 1 1 1 1 1 ...
## $ hr : Factor w/ 24 levels "0","1","2","3",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ holiday : num 0 0 0 0 0 0 0 0 0 0 ...
## $ weekday : num 6 6 6 6 6 6 6 6 6 6 ...
## $ workingday: num 0 0 0 0 0 0 0 0 0 0 ...
## $ weathersit: Factor w/ 4 levels "clear","cloudy/misty",..: 1 1 1 1 1 2 1 1 1 1 ...
## $ temp : num 0.24 0.22 0.22 0.24 0.24 0.24 0.22 0.2 0.24 0.32 ...
## $ atemp : num 0.288 0.273 0.273 0.288 0.288 ...
## $ hum : num 0.81 0.8 0.8 0.75 0.75 0.75 0.8 0.86 0.75 0.76 ...
## $ windspeed : num 0 0 0 0 0 0.0896 0 0 0 0 ...
## $ casual : num 3 8 5 3 0 0 2 1 1 8 ...
## $ registered: num 13 32 27 10 1 1 0 2 7 6 ...
## $ bikers : num 16 40 32 13 1 1 2 3 8 14 ...
Bộ data có 15 biến với 8645 quan sát: