setwd("D:/HỌC TẬP/Phân tích dữ liệu định tính")
library(xlsx)
library(readxl)
## Warning: package 'readxl' was built under R version 4.2.3
library(data.table)
## Warning: package 'data.table' was built under R version 4.2.3
d <- read.xlsx("Car Ownership.xlsx",1)
data.table(d)
## Occupation MI CS YE FS FH Car
## 1: Nurse 4500 720 3 Stable No significant issues Yes
## 2: Software Developer 7800 800 5 Stable No significant issues Yes
## 3: Chef 3200 650 2 Unstable Missed payments in the past No
## 4: Accountant 6500 750 7 Stable No significant issues Yes
## 5: Salesperson 3000 600 1 Unstable Missed payments in the past No
## ---
## 393: Project Manager 7000 730 5 Stable No significant issues Yes
## 394: Chef 4500 680 4 Stable No significant issues Yes
## 395: Interior Designer 5500 690 4 Stable No significant issues Yes
## 396: Medical Assistant 3500 640 3 Stable No significant issues No
## 397: Customer Service Rep 3200 641 4 Stable No significant issues No
## NC
## 1: 0
## 2: 0
## 3: 0
## 4: 1
## 5: 0
## ---
## 393: 0
## 394: 0
## 395: 1
## 396: 1
## 397: 2
\(log(\pi/1-\pi)\) = \(\beta_0\) + \(\beta_1\)MI + \(\beta_2\)CS + \(\beta_3\)FS + \(\beta_4\)FH + \(\beta_5\)YE + \(\beta_6\)NC
fit1 <- glm(factor(Car) ~ MI + CS + FS + FH + YE + NC, family = binomial(link = 'logit'), data = d)
summary(fit1)
##
## Call:
## glm(formula = factor(Car) ~ MI + CS + FS + FH + YE + NC, family = binomial(link = "logit"),
## data = d)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.69171 -0.00021 0.01653 0.21608 2.21641
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.343e+01 6.523e+03 -0.004 0.997134
## MI 1.644e-03 4.843e-04 3.395 0.000685 ***
## CS -3.061e-03 9.937e-03 -0.308 0.758054
## FSUnstable 1.633e+01 6.523e+03 0.003 0.998003
## FHMissed payments in the past -1.629e+01 9.380e+02 -0.017 0.986147
## FHNo significant issues 1.598e+01 6.523e+03 0.002 0.998045
## YE 9.819e-01 3.156e-01 3.111 0.001864 **
## NC -3.078e-01 2.391e-01 -1.288 0.197892
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 512.89 on 396 degrees of freedom
## Residual deviance: 175.17 on 389 degrees of freedom
## AIC: 191.17
##
## Number of Fisher Scoring iterations: 17
\(probit(\pi/1-\pi)\) = \(\beta_0\) + \(\beta_1\)MI + \(\beta_2\)CS + \(\beta_3\)FS + \(\beta_4\)FH + \(\beta_5\)YE + \(\beta_6\)NC
fit2 <- glm(factor(Car) ~ MI + CS + FS + FH + YE + NC, family = binomial(link = 'probit'), data = d)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(fit2)
##
## Call:
## glm(formula = factor(Car) ~ MI + CS + FS + FH + YE + NC, family = binomial(link = "probit"),
## data = d)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.70503 -0.00013 0.00082 0.19927 2.18526
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -8.672e+00 1.569e+03 -0.006 0.995589
## MI 8.720e-04 2.609e-04 3.342 0.000832 ***
## CS -1.211e-03 5.570e-03 -0.217 0.827926
## FSUnstable 4.449e+00 1.569e+03 0.003 0.997737
## FHMissed payments in the past -4.819e+00 2.106e+02 -0.023 0.981742
## FHNo significant issues 4.308e+00 1.569e+03 0.003 0.997809
## YE 5.660e-01 1.776e-01 3.186 0.001442 **
## NC -1.752e-01 1.351e-01 -1.297 0.194644
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 512.89 on 396 degrees of freedom
## Residual deviance: 175.40 on 389 degrees of freedom
## AIC: 191.4
##
## Number of Fisher Scoring iterations: 17
\(cloglog(\pi/1-\pi)\) = \(\beta_0\) + \(\beta_1\)MI + \(\beta_2\)CS + \(\beta_3\)FS + \(\beta_4\)FH + \(\beta_5\)YE + \(\beta_6\)NC
fit3 <- glm(factor(Car) ~ MI + CS + FS + FH + YE + NC, family = binomial(link = 'cloglog'), data = d)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(fit3)
##
## Call:
## glm(formula = factor(Car) ~ MI + CS + FS + FH + YE + NC, family = binomial(link = "cloglog"),
## data = d)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.59276 -0.00019 0.00000 0.15223 2.18499
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.284e+01 6.236e+03 -0.004 0.99708
## MI 6.375e-04 2.405e-04 2.650 0.00804 **
## CS 1.984e-03 5.867e-03 0.338 0.73526
## FSUnstable 1.633e+01 6.236e+03 0.003 0.99791
## FHMissed payments in the past -1.614e+01 9.354e+02 -0.017 0.98624
## FHNo significant issues 1.661e+01 6.236e+03 0.003 0.99787
## YE 6.517e-01 2.003e-01 3.254 0.00114 **
## NC -2.363e-01 1.454e-01 -1.625 0.10418
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 512.89 on 396 degrees of freedom
## Residual deviance: 178.13 on 389 degrees of freedom
## AIC: 194.13
##
## Number of Fisher Scoring iterations: 17
aic1 <- AIC(fit1)
aic2 <- AIC(fit2)
aic3 <- AIC(fit3)
AIC <-cbind(aic1, aic2, aic3)
AIC
## aic1 aic2 aic3
## [1,] 191.1709 191.3966 194.1345
de1 <- deviance(fit1)
de2 <- deviance(fit2)
de3 <- deviance(fit3)
deviance <- cbind(de1,de2,de3)
deviance
## de1 de2 de3
## [1,] 175.1709 175.3966 178.1345
library(DescTools)
## Warning: package 'DescTools' was built under R version 4.2.3
##
## Attaching package: 'DescTools'
## The following object is masked from 'package:data.table':
##
## %like%
BrierScore(fit1)
## [1] 0.06958084
library(DescTools)
BrierScore(fit2)
## [1] 0.07013952
library(DescTools)
BrierScore(fit3)
## [1] 0.07149978
library(caret)
## Warning: package 'caret' was built under R version 4.2.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.2.3
## Loading required package: lattice
##
## Attaching package: 'caret'
## The following objects are masked from 'package:DescTools':
##
## MAE, RMSE
confusionMatrix(table(predict(fit1, type="response") >= 0.5,fit1$data$Car == 'Yes'))
## Confusion Matrix and Statistics
##
##
## FALSE TRUE
## FALSE 120 15
## TRUE 18 244
##
## Accuracy : 0.9169
## 95% CI : (0.8852, 0.9421)
## No Information Rate : 0.6524
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.8158
##
## Mcnemar's Test P-Value : 0.7277
##
## Sensitivity : 0.8696
## Specificity : 0.9421
## Pos Pred Value : 0.8889
## Neg Pred Value : 0.9313
## Prevalence : 0.3476
## Detection Rate : 0.3023
## Detection Prevalence : 0.3401
## Balanced Accuracy : 0.9058
##
## 'Positive' Class : FALSE
##
MH logit có độ chính xác toàn thể là 91,69%, độ nhạy là 86,96% và độ hiệu quả là 94,21%
library(caret)
confusionMatrix(table(predict(fit2, type="response") >= 0.5,fit2$data$Car == 'Yes'))
## Confusion Matrix and Statistics
##
##
## FALSE TRUE
## FALSE 120 15
## TRUE 18 244
##
## Accuracy : 0.9169
## 95% CI : (0.8852, 0.9421)
## No Information Rate : 0.6524
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.8158
##
## Mcnemar's Test P-Value : 0.7277
##
## Sensitivity : 0.8696
## Specificity : 0.9421
## Pos Pred Value : 0.8889
## Neg Pred Value : 0.9313
## Prevalence : 0.3476
## Detection Rate : 0.3023
## Detection Prevalence : 0.3401
## Balanced Accuracy : 0.9058
##
## 'Positive' Class : FALSE
##
MH probit có độ chính xác toàn thể là 91,69%, độ nhạy là 86,96% và độ hiệu quả là 94,21%
library(caret)
confusionMatrix(table(predict(fit3, type="response") >= 0.5,fit3$data$Car == 'Yes'))
## Confusion Matrix and Statistics
##
##
## FALSE TRUE
## FALSE 120 17
## TRUE 18 242
##
## Accuracy : 0.9118
## 95% CI : (0.8795, 0.9378)
## No Information Rate : 0.6524
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.8053
##
## Mcnemar's Test P-Value : 1
##
## Sensitivity : 0.8696
## Specificity : 0.9344
## Pos Pred Value : 0.8759
## Neg Pred Value : 0.9308
## Prevalence : 0.3476
## Detection Rate : 0.3023
## Detection Prevalence : 0.3451
## Balanced Accuracy : 0.9020
##
## 'Positive' Class : FALSE
##
MH cloglog có độ chính xác toàn thể là 91,18%, độ nhạy là 86,96% và độ hiệu quả là 93,44%
Kết luận: Trong 3 mô hình thì mô hình logit và mô hình probit đều có độ chính xác toàn thể là 91,69%, độ nhạy là 86,96% và độ hiệu quả là 94,21% (cao nhất). Nhưng chỉ số AIC, Deviance và Brier Score cho thấy mô hình lotgit tốt hơn. Vì vậy, dựa trên 4 tiêu chí đánh giá trên ta đi đến kết luận mô hình logit là phù hợp nhất.
Mặc khác ở kết quả hồi quy logistic cả 3 mô hình đều cho thấy trong tất cả 6 biến độc lập chỉ có 2 biến là có ý nghĩa thống kê ở mức 5% là biến MI và YE. Ta tiến hàng bỏ các biến không có ý nghĩa thống kê và chạy lại mô hình mới.
\(log(\pi/1-\pi)\) = \(\beta_0\) + \(\beta_1\)MI + \(\beta_5\)YE
f1 <- glm(factor(Car) ~ MI + YE , family = binomial(link = 'logit'), data = d)
summary(f1)
##
## Call:
## glm(formula = factor(Car) ~ MI + YE, family = binomial(link = "logit"),
## data = d)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.64568 -0.27735 0.01721 0.21658 2.40346
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -9.5229258 1.1768718 -8.092 5.88e-16 ***
## MI 0.0013592 0.0003329 4.083 4.45e-05 ***
## YE 1.2392617 0.2890771 4.287 1.81e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 512.89 on 396 degrees of freedom
## Residual deviance: 183.82 on 394 degrees of freedom
## AIC: 189.82
##
## Number of Fisher Scoring iterations: 8
\(probit(\pi/1-\pi)\) = \(\beta_0\) + \(\beta_1\)MI + \(\beta_5\)YE
f2 <- glm(factor(Car) ~ MI + YE , family = binomial(link = 'probit'), data = d)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(f2)
##
## Call:
## glm(formula = factor(Car) ~ MI + YE, family = binomial(link = "probit"),
## data = d)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.69164 -0.26842 0.00098 0.19468 2.39688
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -5.2886669 0.5989162 -8.830 < 2e-16 ***
## MI 0.0007421 0.0001831 4.054 5.05e-05 ***
## YE 0.7019320 0.1595153 4.400 1.08e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 512.89 on 396 degrees of freedom
## Residual deviance: 184.03 on 394 degrees of freedom
## AIC: 190.03
##
## Number of Fisher Scoring iterations: 8
\(cloglog(\pi/1-\pi)\) = \(\beta_0\) + \(\beta_1\)MI + \(\beta_5\)YE
f3 <- glm(factor(Car) ~ MI + YE, family = binomial(link = 'cloglog'), data = d)
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(f3)
##
## Call:
## glm(formula = factor(Car) ~ MI + YE, family = binomial(link = "cloglog"),
## data = d)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -3.10811 -0.41508 0.00000 0.08935 2.14578
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -6.0328388 0.7035045 -8.575 < 2e-16 ***
## MI 0.0006726 0.0001885 3.567 0.000361 ***
## YE 0.8489936 0.1846105 4.599 4.25e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 512.89 on 396 degrees of freedom
## Residual deviance: 191.32 on 394 degrees of freedom
## AIC: 197.32
##
## Number of Fisher Scoring iterations: 10
aic1 <- AIC(f1)
aic2 <- AIC(f2)
aic3 <- AIC(f3)
AIC <-cbind(aic1, aic2, aic3)
AIC
## aic1 aic2 aic3
## [1,] 189.8186 190.0302 197.3155
de1 <- deviance(f1)
de2 <- deviance(f2)
de3 <- deviance(f3)
deviance <- cbind(de1,de2,de3)
deviance
## de1 de2 de3
## [1,] 183.8186 184.0302 191.3155
library(DescTools)
BrierScore(f1)
## [1] 0.07191108
library(DescTools)
BrierScore(f2)
## [1] 0.07231477
library(DescTools)
BrierScore(f3)
## [1] 0.07401281
library(caret)
confusionMatrix(table(predict(f1, type="response") >= 0.5,f1$data$Car == 'Yes'))
## Confusion Matrix and Statistics
##
##
## FALSE TRUE
## FALSE 120 19
## TRUE 18 240
##
## Accuracy : 0.9068
## 95% CI : (0.8738, 0.9335)
## No Information Rate : 0.6524
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.7949
##
## Mcnemar's Test P-Value : 1
##
## Sensitivity : 0.8696
## Specificity : 0.9266
## Pos Pred Value : 0.8633
## Neg Pred Value : 0.9302
## Prevalence : 0.3476
## Detection Rate : 0.3023
## Detection Prevalence : 0.3501
## Balanced Accuracy : 0.8981
##
## 'Positive' Class : FALSE
##
MH logit có độ chính xác toàn thể là 90,68%, độ nhạy là 86,96% và độ hiệu quả là 92,66%
library(caret)
confusionMatrix(table(predict(f2, type="response") >= 0.5,f2$data$Car == 'Yes'))
## Confusion Matrix and Statistics
##
##
## FALSE TRUE
## FALSE 120 19
## TRUE 18 240
##
## Accuracy : 0.9068
## 95% CI : (0.8738, 0.9335)
## No Information Rate : 0.6524
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.7949
##
## Mcnemar's Test P-Value : 1
##
## Sensitivity : 0.8696
## Specificity : 0.9266
## Pos Pred Value : 0.8633
## Neg Pred Value : 0.9302
## Prevalence : 0.3476
## Detection Rate : 0.3023
## Detection Prevalence : 0.3501
## Balanced Accuracy : 0.8981
##
## 'Positive' Class : FALSE
##
MH probit có độ chính xác toàn thể là 90,68%, độ nhạy là 86,96% và độ hiệu quả là 92,66%
library(caret)
confusionMatrix(table(predict(f3, type="response") >= 0.5,f3$data$Car == 'Yes'))
## Confusion Matrix and Statistics
##
##
## FALSE TRUE
## FALSE 123 26
## TRUE 15 233
##
## Accuracy : 0.8967
## 95% CI : (0.8625, 0.9249)
## No Information Rate : 0.6524
## P-Value [Acc > NIR] : <2e-16
##
## Kappa : 0.7765
##
## Mcnemar's Test P-Value : 0.1183
##
## Sensitivity : 0.8913
## Specificity : 0.8996
## Pos Pred Value : 0.8255
## Neg Pred Value : 0.9395
## Prevalence : 0.3476
## Detection Rate : 0.3098
## Detection Prevalence : 0.3753
## Balanced Accuracy : 0.8955
##
## 'Positive' Class : FALSE
##
MH cloglog có độ chính xác toàn thể là 89,67%, độ nhạy là 89,13% và độ hiệu quả là 89,96%
Kết luận: Trong 3 mô hình thì mô hình logit và mô hình probit đều có độ chính xác toàn thể là 90,68%, độ nhạy là 86,96% và độ hiệu quả là 92,66% (cao nhất). Nhưng chỉ số AIC, Deviance và Brier Score cho thấy mô hình lotgit tốt hơn. Vì vậy, dựa trên 4 tiêu chí đánh giá trên ta đi đến kết luận mô hình logit là phù hợp nhất.
Làm thống kê mô tả để phân tích cho ít nhất 5 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(d$Car)/sum(table(d$Car))
##
## No Yes
## 0.3476071 0.6523929
library(ggplot2)
d |> ggplot(aes(x = Car, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
theme_classic() +
labs(x = 'Quyền sở hữu ô tô', y = 'Số người')
Ước lượng tỷ lệ người đã có xe, đồng thời kiểm định xem tỷ lệ (%) người đã có xe có phải là 50% không?
ul <- d[d$Car == "Yes",]
prop.test(length(ul$Car), length(d$Car), p = 0.5)
##
## 1-sample proportions test with continuity correction
##
## data: length(ul$Car) out of length(d$Car), null probability 0.5
## X-squared = 36.272, df = 1, p-value = 1.716e-09
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.6030046 0.6987823
## sample estimates:
## p
## 0.6523929
Ta có p_value < 0,05 nên ta bác bỏ \(H_0\). Vì vậy tỉ lệ người đã có xe không bằng 50%. Khoảng ước lượng tỷ lệ người đã có xe với độ tin cậy 95% là (0,6030046 ; 0,6987823).
table(d$Occupation)
##
## Account Executive Account Manager
## 4 3
## Accountant Architect
## 9 9
## Art Director Attorney
## 1 3
## Automotive Mechanic Bank Teller
## 1 4
## Barista Bartender
## 1 1
## Business Analyst Business Owner
## 3 1
## Carpenter Chef
## 3 26
## Civil Engineer Computer Programmer
## 1 1
## Computer Technician Construction Worker
## 1 5
## Customer Service Customer Service Rep
## 2 7
## Customer Support Data Analyst
## 1 3
## Data Scientist Dental Assistant
## 5 3
## Dental Hygienist Dentist
## 7 1
## Designer Electrical Engineer
## 2 1
## Electrician Elementary School Teacher
## 17 1
## Engineer Entrepreneur
## 3 1
## Event Planner Executive Assistant
## 4 3
## Fashion Designer Financial Advisor
## 2 6
## Financial Analyst Financial Manager
## 7 1
## Financial Planner Fitness Instructor
## 1 1
## Flight Attendant Graphic Artist
## 1 2
## Graphic Designer Hair Stylist
## 15 2
## Hairdresser HR Generalist
## 1 3
## HR Manager HR Specialist
## 1 1
## Human Resources Human Resources Manager
## 5 5
## Insurance Agent Insurance Underwriter
## 8 1
## Interior Designer Investment Banker
## 3 1
## IT Consultant IT Manager
## 1 6
## IT Support Specialist Lawyer
## 1 4
## Management Consultant Marketing
## 1 2
## Marketing Analyst Marketing Coordinator
## 1 5
## Marketing Manager Marketing Specialist
## 6 1
## Mechanic Mechanical Designer
## 3 1
## Mechanical Engineer Mechanical Technician
## 4 3
## Medical Assistant Musician
## 4 2
## Nurse Nurse Practitioner
## 10 1
## Office Manager Optometrist
## 2 1
## Personal Trainer Pharmacist
## 5 4
## Photographer Physical Education Teacher
## 3 4
## Physical Therapist Physical Therapist Assistant
## 10 1
## Physical Trainer Physician
## 2 3
## Physician Assistant Plumber
## 3 6
## Police Officer Project Manager
## 1 4
## Psychologist Public Relations
## 2 1
## Real Estate Agent Registered Nurse
## 9 1
## Retail Manager Retail Salesperson
## 4 1
## Sales Manager Sales Representative
## 9 8
## Salesperson Social Media Manager
## 3 1
## Social Worker Software Architect
## 5 1
## Software Developer Software Engineer
## 4 5
## Teacher Veterinarian
## 4 6
## Veterinarian Technician Waiter/Waitress
## 1 1
## Web Designer Web Developer
## 6 8
## Writer
## 7
library(ggplot2)
d |> ggplot(aes(Occupation)) +
geom_bar()
Ước lượng tỷ lệ người làm nghề chef, đồng thời kiểm định xem tỷ lệ (%) người làm nghề chef có phải là 10% không?
ul <- d[d$Occupation == "Chef",]
prop.test(length(ul$Occupation), length(d$Occupation), p = 0.1)
##
## 1-sample proportions test with continuity correction
##
## data: length(ul$Occupation) out of length(d$Occupation), null probability 0.1
## X-squared = 4.8766, df = 1, p-value = 0.02722
## alternative hypothesis: true p is not equal to 0.1
## 95 percent confidence interval:
## 0.04404677 0.09568659
## sample estimates:
## p
## 0.06549118
Ta có p_value < 0,05 nên ta bác bỏ \(H_0\). Vì vậy tỉ lệ người làm nghề chef không bằng 10%. Khoảng ước lượng tỷ lệ người làm nghề chef với độ tin cậy 95% là (0,04404677 ; 0,09568659).
summary(d$MI)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1500 3500 4600 5364 6900 15000
Thu nhập trong 1 tháng nhỏ nhất là 1500 USD; lớn nhất là 15000 USD; thu nhập trung bình là 5364 USD; 25% dữ liệu nhỏ hơn 3500 USD (giá trị tứ phân vị thứ nhất); 50% dữ liệu nhỏ hơn 4600 USD (giá trị trung vị); 75% dữ liệu nhỏ hơn 6900 USD (giá trị tứ phân vị thứ ba).
hist(d$MI)
income <- cut(d$MI, breaks= c(0 , 4000 , 15000), labels= c('thap' , 'cao'))
table(income)
## income
## thap cao
## 144 253
table(income)/sum(table(income))
## income
## thap cao
## 0.3627204 0.6372796
library(ggplot2)
d |> ggplot(aes(x = income, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
theme_classic() +
labs(x = 'Monthly Income', y = 'Số người')
Ước lượng tỷ lệ người có thu nhập mỗi tháng trên 10000USD, đồng thời kiểm định xem tỷ lệ (%) người thu nhập mỗi tháng trên 10000USD có phải là 10% không?
ul <- d[d$MI > 10000,]
prop.test(length(ul$MI), length(d$MI), p = 0.1)
##
## 1-sample proportions test with continuity correction
##
## data: length(ul$MI) out of length(d$MI), null probability 0.1
## X-squared = 22.257, df = 1, p-value = 2.385e-06
## alternative hypothesis: true p is not equal to 0.1
## 95 percent confidence interval:
## 0.01463550 0.05050911
## sample estimates:
## p
## 0.02770781
Ta có p_value < 0,05 nên ta bác bỏ \(H_0\). Vì vậy tỉ lệ người có thu nhập mỗi tháng trên 10000USD không bằng 10%. Khoảng ước lượng tỷ lệ người có thu nhập mỗi tháng trên 10000USD với độ tin cậy 95% là ( 0,01463550 ; 0,05050911).
summary(d$CS)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 560.0 650.0 693.0 701.4 750.0 890.0
Điểm tín dụng nhỏ nhất là 560; lớn nhất là 890; thu nhập trung bình là 701,4; 25% dữ liệu nhỏ hơn 650 (giá trị tứ phân vị thứ nhất); 50% dữ liệu nhỏ hơn 693 (giá trị trung vị); 75% dữ liệu nhỏ hơn 750 (giá trị tứ phân vị thứ ba).
credit <- cut(d$CS, breaks= c(500 , 700 , 890), labels= c('low', 'high'))
table(credit)
## credit
## low high
## 212 185
table(credit)/sum(table(credit))
## credit
## low high
## 0.534005 0.465995
library(ggplot2)
d |> ggplot(aes(x = credit, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
theme_classic() +
labs(x = 'Credit Score', y = 'Số người')
Trong tổng số 397 người khảo sát thì có 53,4% người có điểm tín dụng trong khoảng (500,700] và 46,6% người có điểm tín dụng trong khoảng (700,890].
Ước lượng tỷ lệ người có điểm tín dụng trên 800, đồng thời kiểm định xem tỷ lệ (%) người có điểm tín dụng trên 800 có phải là 20% không?
ul <- d[d$CS > 800,]
prop.test(length(ul$CS), length(d$CS), p = 0.2)
##
## 1-sample proportions test with continuity correction
##
## data: length(ul$CS) out of length(d$CS), null probability 0.2
## X-squared = 45.737, df = 1, p-value = 1.352e-11
## alternative hypothesis: true p is not equal to 0.2
## 95 percent confidence interval:
## 0.04198476 0.09276907
## sample estimates:
## p
## 0.06297229
Ta có p_value < 0,05 nên ta bác bỏ \(H_0\). Vì vậy tỉ lệ người có điểm tín dụng trên 800 không bằng 20%. Khoảng ước lượng tỷ lệ người có điểm tín dụng trên 800 với độ tin cậy 95% là (0,04198476 ; 0,09276907).
summary(d$YE)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 3.000 4.000 4.272 6.000 12.000
Kinh nghiệm làm việc nhỏ nhất là 1 năm; lớn nhất là 12 năm; kinh nghiệm làm việc trung bình là 4.272 năm ; 25% dữ liệu nhỏ hơn 3 năm (giá trị tứ phân vị thứ nhất); 50% dữ liệu nhỏ hơn 4 năm (giá trị trung vị); 75% dữ liệu nhỏ hơn 6 năm (giá trị tứ phân vị thứ ba).
years <- cut(d$YE, breaks= c(0 , 3 , 12), labels= c('it', 'nhieu'))
table(years)
## years
## it nhieu
## 149 248
table(years)/sum(table(years))
## years
## it nhieu
## 0.3753149 0.6246851
library(ggplot2)
d |> ggplot(aes(x = years, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
theme_classic() +
labs(x = 'Years of Employment', y = 'Số người')
Ước lượng tỷ lệ người có kinh nghiệm làm việc trên 10 năm, đồng thời kiểm định xem tỷ lệ (%) người có kinh nghiệm làm việc trên 10 năm có phải là 20% không?
ul <- d[d$YE > 10,]
prop.test(length(ul$years), length(d$YE), p = 0.2)
##
## 1-sample proportions test with continuity correction
##
## data: length(ul$years) out of length(d$YE), null probability 0.2
## X-squared = 98.004, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.2
## 95 percent confidence interval:
## 0.00000000 0.01194674
## sample estimates:
## p
## 0
Ta có p_value < 0,05 nên ta bác bỏ \(H_0\). Vì vậy tỉ lệ người có kinh nghiệm làm việc trên 10 năm không bằng 20%. Khoảng ước lượng tỷ lệ người có kinh nghiệm làm việc trên 10 năm với độ tin cậy 95% là (0,00000000 ; 0,01194674).
table(d$FS)/sum(table(d$FS))
##
## Stable Unstable
## 0.7758186 0.2241814
library(ggplot2)
d |> ggplot(aes(x = FS, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
theme_classic() +
labs(x = 'Finance Status', y = 'Số người')
Ước lượng tỷ lệ người có tình trạng tài chính ổn định, đồng thời kiểm định xem tỷ lệ (%) người có tình trạng tài chính ổn định có phải là 50% không?
ul <- d[d$FS == "Stable",]
prop.test(length(ul$FS), length(d$FS), p = 0.5)
##
## 1-sample proportions test with continuity correction
##
## data: length(ul$FS) out of length(d$FS), null probability 0.5
## X-squared = 119.71, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.7309357 0.8152538
## sample estimates:
## p
## 0.7758186
Ta có p_value < 0,05 nên ta bác bỏ \(H_0\). Vì vậy tỉ lệ người có tình trạng tài chính ổn định không bằng 50%. Khoảng ước lượng tỷ lệ người có tình trạng tài chính ổn định với độ tin cậy 95% là (0,7309357 ; 0,8152538).
table(d$FH)/sum(table(d$FH))
##
## Late payments Missed payments in the past
## 0.1183879 0.1083123
## No significant issues
## 0.7732997
library(ggplot2)
d |> ggplot(aes(x = FH, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
theme_classic() +
labs(x = 'Finance History', y = 'Số người')
Ước lượng tỷ lệ người có lịch sử tài chính không vấn đề, đồng thời kiểm định xem tỷ lệ (%) người có lịch sử tài chính không vấn đề có phải là 50% không?
ul <- d[d$FH == "No significant issues",]
prop.test(length(ul$FH), length(d$FS), p = 0.5)
##
## 1-sample proportions test with continuity correction
##
## data: length(ul$FH) out of length(d$FS), null probability 0.5
## X-squared = 117.52, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.7282819 0.8129202
## sample estimates:
## p
## 0.7732997
Ta có p_value < 0,05 nên ta bác bỏ \(H_0\). Vì vậy tỉ lệ người có lịch sử tài chính không vấn đề không bằng 50%. Khoảng ước lượng tỷ lệ người có lịch sử tài chính không vấn đề với độ tin cậy 95% là (0,7282819 ; 0,8129202).
children <- factor(d$NC == 0, levels = c(FALSE, TRUE), labels = c("Dacocon", "Khongcon"))
table(children)
## children
## Dacocon Khongcon
## 244 153
table(children)/sum(table(children))
## children
## Dacocon Khongcon
## 0.6146096 0.3853904
library(ggplot2)
d |> ggplot(aes(x = children, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
theme_classic() +
labs(x = 'Numbers of Children', y = 'Số người')
Ước lượng tỷ lệ người có số con trên 4, đồng thời kiểm định xem tỷ lệ (%) người có số con trên 4 có phải là 10% không?
ul <- d[d$NC > 4,]
prop.test(length(ul$NC), length(d$NC), p = 0.1)
##
## 1-sample proportions test with continuity correction
##
## data: length(ul$NC) out of length(d$NC), null probability 0.1
## X-squared = 43.007, df = 1, p-value = 5.454e-11
## alternative hypothesis: true p is not equal to 0.1
## 95 percent confidence interval:
## 0.00000000 0.01194674
## sample estimates:
## p
## 0
Ta có p_value < 0,05 nên ta bác bỏ \(H_0\). Vì vậy tỉ lệ người có số con trên 4 không bằng 10%. Khoảng ước lượng tỷ lệ người có số con trên 4 với độ tin cậy 95% là (0,00000000 ; 0,01194674).
k <- data.frame(d$Car, d$FS, d$FH, d$Occupation, years, income, credit, children)
cpp <- table(d$Car, d$FS)
cpp <- prop.table(cpp)
addmargins(cpp)
##
## Stable Unstable Sum
## No 0.13602015 0.21158690 0.34760705
## Yes 0.63979849 0.01259446 0.65239295
## Sum 0.77581864 0.22418136 1.00000000
d |> ggplot(aes(x = Car, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
facet_grid(. ~ FS) +
# theme_classic() +
labs(x = 'Quyền sở hữu ô tô', y = 'Số người')
Nhận xét: Trong tổng số 397 người khảo sát được
77,6% người thuộc nhóm tài chính ổn định, trong đó:
Người đã có xe chiếm 64%
Người chưa có xe chiếm 13,6%
22,4% người thuộc nhóm tài chính không ổn định, trong đó:
Người đã có xe chiếm 21,1%
Người chưa có xe chiếm 1,3%
library(DescTools)
cpp <- table(d$Car, d$FS)
addmargins(cpp)
##
## Stable Unstable Sum
## No 54 84 138
## Yes 254 5 259
## Sum 308 89 397
RelRisk(cpp)
## [1] 0.3990072
Tỷ lệ người tài chính ổn định nhưng không có xe gần bằng 40% tỷ lệ người tài chính ổn định và có xe. Hay nói cách khác tỷ lệ người tài chính ổn định và có xe cao hơn gấp 2,5 lần (1/0,3990072) tỷ lệ người tài chính ổn định nhưng không có xe.
cpp <- table(d$Car, d$FS)
library(epitools)
riskratio(cpp, rev = 'c')
## $data
##
## Unstable Stable Total
## No 84 54 138
## Yes 5 254 259
## Total 89 308 397
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## No 1.000000 NA NA
## Yes 2.506221 2.033962 3.088132
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## No NA NA NA
## Yes 0 3.167693e-42 5.308648e-41
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Tỷ lệ người tài chính ổn định và có xe cao hơn gấp 2,5 lần tỷ lệ người tài chính ổn định nhưng không có xe.
cpp <- table(d$Car, d$FS)
cpp
##
## Stable Unstable
## No 54 84
## Yes 254 5
OddsRatio(cpp)
## [1] 0.01265467
Tỷ lệ người tài chính ổn định so với người tài chính chưa ổn định mà không có xe gần bằng 1,3% tỷ lệ người tài chính ổn định so với người tài chính chưa ổn định mà đã có xe.
cpp <- table(d$Car, d$FS)
cpp
##
## Stable Unstable
## No 54 84
## Yes 254 5
oddsratio(cpp, rev = 'r')
## $data
##
## Stable Unstable Total
## Yes 254 5 259
## No 54 84 138
## Total 308 89 397
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Yes 1.00000 NA NA
## No 75.71606 32.09469 226.2817
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Yes NA NA NA
## No 0 3.167693e-42 5.308648e-41
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Tỷ lệ người tài chính ổn định so với người tài chính chưa ổn định mà đã có xe cao hơn gấp 75 lần tỷ lệ người tài chính ổn định so với người tài chính chưa ổn định mà không có xe.
cpp <- table(d$Car, d$FS)
cpp
##
## Stable Unstable
## No 54 84
## Yes 254 5
chisq.test(cpp)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: cpp
## X-squared = 176.45, df = 1, p-value < 2.2e-16
Kết quả kiểm định cho thấy p- value < 0,05 nên ta bác bỏ \(H_0\). Vậy quyền sở hữu xe và tình trạng tài chính có liên quan với nhau .
cpp <- table(d$Car, k$years)
cpp <- prop.table(cpp)
addmargins(cpp)
##
## it nhieu Sum
## No 0.30478589 0.04282116 0.34760705
## Yes 0.07052897 0.58186398 0.65239295
## Sum 0.37531486 0.62468514 1.00000000
k |> ggplot(aes(x = d.Car, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
facet_grid(. ~ years) +
# theme_classic() +
labs(x = 'Quyền sở hữu ô tô', y = 'Số người')
Nhận xét: Trong tổng số 397 người khảo sát được
37,5% người thuộc nhóm ít (có kinh nghiệm làm việc từ 3 năm trở xuống) trong đó:
Người đã có xe chiếm 7,1%
Người chưa có xe chiếm 30,5%
42,5% người thuộc nhóm nhiều (có kinh nghiệm làm việc từ 3 năm trở lên), trong đó:
Người đã có xe chiếm 58,2%
Người chưa có xe chiếm 4,3%
library(DescTools)
cpp <- table(d$Car, k$years)
addmargins(cpp)
##
## it nhieu Sum
## No 121 17 138
## Yes 28 231 259
## Sum 149 248 397
RelRisk(cpp)
## [1] 8.110507
Tỷ lệ người không có xe có kinh nghiệm làm việc từ 3 năm trở xuống hơn gấp 8,1 lần tỷ lệ người có xe có kinh nghiệm làm việc từ 3 năm trở xuống.
cpp <- table(d$Car, k$years)
cpp
##
## it nhieu
## No 121 17
## Yes 28 231
OddsRatio(cpp)
## [1] 58.72059
Tỷ lệ người có kinh nghiệm làm việc từ 3 năm trở xuống so với người có kinh nghiệm làm việc từ 3 năm trở lên mà chưa có xe cao hơn gấp 58 lần tỷ lệ người có kinh nghiệm làm việc từ 3 năm trở xuống so với người có kinh nghiệm làm việc từ 3 năm trở lên mà đã có xe.
cpp <- table(d$Car, k$years)
cpp
##
## it nhieu
## No 121 17
## Yes 28 231
chisq.test(cpp)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: cpp
## X-squared = 223.64, df = 1, p-value < 2.2e-16
Kết quả kiểm định cho thấy p- value < 0,05 nên ta bác bỏ \(H_0\). Vậy quyền sở hữu xe và kinh nghiệm làm việc có liên quan với nhau .
cpp <- table(d$Car, k$credit)
cpp <- prop.table(cpp)
addmargins(cpp)
##
## low high Sum
## No 0.33501259 0.01259446 0.34760705
## Yes 0.19899244 0.45340050 0.65239295
## Sum 0.53400504 0.46599496 1.00000000
k |> ggplot(aes(x = d.Car, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
facet_grid(. ~ credit) +
# theme_classic() +
labs(x = 'Quyền sở hữu ô tô', y = 'Số người')
Nhận xét: Trong tổng số 397 người khảo sát được
54% người thuộc nhóm low (điểm tín dụng 700 trở xuống) trong đó:
Người đã có xe chiếm 34%
Người chưa có xe chiếm 20%
46% người thuộc nhóm high (điểm tín dụng 700 trở lên), trong đó:
Người đã có xe chiếm 1%
Người chưa có xe chiếm 45%
library(DescTools)
cpp <- table(d$Car, k$credit)
addmargins(cpp)
##
## low high Sum
## No 133 5 138
## Yes 79 180 259
## Sum 212 185 397
RelRisk(cpp)
## [1] 3.159695
Tỷ lệ người không có xe có điểm tín dụng 700 trở xuống hơn gấp 3,2 lần tỷ lệ người có xe có điểm tín dụng 700 trở lên.
cpp <- table(d$Car, k$credit)
cpp
##
## low high
## No 133 5
## Yes 79 180
OddsRatio(cpp)
## [1] 60.60759
Tỷ lệ người có điểm tín dụng 700 trở xuống so với người có điểm tín dụng 700 trở lên mà chưa có xe cao hơn gấp 60 lần tỷ lệ người có điểm tín dụng 700 trở xuống so với người có điểm tín dụng 700 trở lên mà đã có xe.
cpp <- table(d$Car, k$credit)
cpp
##
## low high
## No 133 5
## Yes 79 180
chisq.test(cpp)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: cpp
## X-squared = 154.36, df = 1, p-value < 2.2e-16
Kết quả kiểm định cho thấy p- value < 0,05 nên ta bác bỏ \(H_0\). Vậy quyền sở hữu xe và điểm tín dụng có liên quan với nhau .
cpp <- table(d$Car, k$children)
cpp <- prop.table(cpp)
addmargins(cpp)
##
## Dacocon Khongcon Sum
## No 0.1813602 0.1662469 0.3476071
## Yes 0.4332494 0.2191436 0.6523929
## Sum 0.6146096 0.3853904 1.0000000
k |> ggplot(aes(x = d.Car, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
facet_grid(. ~ children) +
# theme_classic() +
labs(x = 'Quyền sở hữu ô tô', y = 'Số người')
Nhận xét: Trong tổng số 397 người khảo sát được
61,5% người thuộc nhóm đã có con trong đó:
Người đã có xe chiếm 43,3%
Người chưa có xe chiếm 18,1%
38,5% người thuộc nhóm không con, trong đó:
Người đã có xe chiếm 21,9%
Người chưa có xe chiếm 16,6%
cpp <- table(d$Car, k$children)
library(epitools)
riskratio(cpp, rev = 'c')
## $data
##
## Khongcon Dacocon Total
## No 66 72 138
## Yes 87 172 259
## Total 153 244 397
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## No 1.000000 NA NA
## Yes 1.272844 1.061351 1.526482
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## No NA NA NA
## Yes 0.005977916 0.006741118 0.005514824
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Tỷ lệ người đã có con mà sở hữu xe cao hơn gấp 1,27 lần tỷ lệ người đã có con nhưng không có xe.
cpp <- table(d$Car, k$children)
cpp
##
## Dacocon Khongcon
## No 72 66
## Yes 172 87
oddsratio(cpp, rev = 'r')
## $data
##
## Dacocon Khongcon Total
## Yes 172 87 259
## No 72 66 138
## Total 244 153 397
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Yes 1.000000 NA NA
## No 1.809072 1.185659 2.764979
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Yes NA NA NA
## No 0.005977916 0.006741118 0.005514824
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Tỷ lệ người đã có con so với người không con mà đã có xe cao hơn gấp 1,8 lần tỷ lệ người đã có con so với người không con mà chưa có xe.
cpp <- table(d$Car, k$children)
cpp
##
## Dacocon Khongcon
## No 72 66
## Yes 172 87
chisq.test(cpp)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: cpp
## X-squared = 7.1131, df = 1, p-value = 0.007652
Kết quả kiểm định cho thấy p- value < 0,05 nên ta bác bỏ \(H_0\). Vậy quyền sở hữu xe và số con có liên quan với nhau .
cpp <- table(k$income, d$FS)
cpp <- prop.table(cpp)
addmargins(cpp)
##
## Stable Unstable Sum
## thap 0.146095718 0.216624685 0.362720403
## cao 0.629722922 0.007556675 0.637279597
## Sum 0.775818640 0.224181360 1.000000000
k |> ggplot(aes(x = income, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
facet_grid(. ~ d.FS) +
# theme_classic() +
labs(x = 'Thu nhập mỗi tháng', y = 'Số người')
Nhận xét: Trong tổng số 397 người khảo sát được
77,6% người thuộc nhóm tài chính ổn định, trong đó:
Người thu nhập thấp chiếm 14,6%
Người thu nhập cao chiếm 63%
22,4% người thuộc nhóm tài chính không ổn định, trong đó:
Người thu nhập thấp chiếm 21,7%
Người thu nhập cao chiếm 0,8%
cpp <- table(k$income, d$FS)
library(epitools)
riskratio(cpp, rev = 'c')
## $data
##
## Unstable Stable Total
## thap 86 58 144
## cao 3 250 253
## Total 89 308 397
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## thap 1.000000 NA NA
## cao 2.453319 2.009929 2.994521
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## thap NA NA NA
## cao 0 9.703964e-44 3.250256e-41
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Tỷ lệ người tài chính ổn định và thu nhập cao hơn gấp 2,4 lần tỷ lệ người tài chính ổn định nhưng thu nhập thấp.
cpp <- table(d$Car, d$FS)
cpp
##
## Stable Unstable
## No 54 84
## Yes 254 5
OddsRatio(cpp)
## [1] 0.01265467
Tỷ lệ người tài chính ổn định so với người tài chính chưa ổn định mà không có xe gần bằng 1,3% tỷ lệ người tài chính ổn định so với người tài chính chưa ổn định mà đã có xe.
cpp <- table(k$income, d$FS)
cpp
##
## Stable Unstable
## thap 58 86
## cao 250 3
oddsratio(cpp, rev = 'r')
## $data
##
## Stable Unstable Total
## cao 250 3 253
## thap 58 86 144
## Total 308 89 397
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## cao 1.0000 NA NA
## thap 116.0891 41.50903 495.5882
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## cao NA NA NA
## thap 0 9.703964e-44 3.250256e-41
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Tỷ lệ người tài chính ổn định so với người tài chính chưa ổn định mà có thu nhập cao hơn gấp 116 lần tỷ lệ người tài chính ổn định so với người tài chính chưa ổn định mà yhu nhập thấp.
cpp <- table(k$income, d$FS)
cpp
##
## Stable Unstable
## thap 58 86
## cao 250 3
chisq.test(cpp)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: cpp
## X-squared = 177.44, df = 1, p-value < 2.2e-16
Kết quả kiểm định cho thấy p- value < 0,05 nên ta bác bỏ \(H_0\). Vậy thu nhập mỗi tháng và tình trạng tài chính có liên quan với nhau .
cpp <- table(k$income, k$years)
cpp <- prop.table(cpp)
addmargins(cpp)
##
## it nhieu Sum
## thap 0.31989924 0.04282116 0.36272040
## cao 0.05541562 0.58186398 0.63727960
## Sum 0.37531486 0.62468514 1.00000000
k |> ggplot(aes(x = income, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
facet_grid(. ~ years) +
# theme_classic() +
labs(x = 'Thu nhập mỗi tháng', y = 'Số người')
Nhận xét: Trong tổng số 397 người khảo sát được
37,5% người thuộc nhóm ít (có kinh nghiệm làm việc từ 3 năm trở xuống) trong đó:
Người thu nhập thấp chiếm 32%
Người thu nhập cao chiếm 5,5%
42,5% người thuộc nhóm nhiều (có kinh nghiệm làm việc từ 3 năm trở lên), trong đó:
Người thu nhập thấp chiếm 4,3%
Người thu nhập cao chiếm 58,2%
library(DescTools)
cpp <- table(k$income, k$years)
addmargins(cpp)
##
## it nhieu Sum
## thap 127 17 144
## cao 22 231 253
## Sum 149 248 397
RelRisk(cpp)
## [1] 10.14236
Tỷ lệ người thu nhập thấp, có kinh nghiệm làm việc từ 3 năm trở xuống hơn gấp 10,1 lần tỷ lệ người thu nhập cao, có kinh nghiệm làm việc từ 3 năm trở lên.
cpp <- table(k$income, k$years)
cpp
##
## it nhieu
## thap 127 17
## cao 22 231
OddsRatio(cpp)
## [1] 78.44118
Tỷ lệ người có kinh nghiệm làm việc từ 3 năm trở xuống so với người có kinh nghiệm làm việc từ 3 năm trở lên mà thu nhập thấp hơn gấp 74 lần tỷ lệ người có kinh nghiệm làm việc từ 3 năm trở xuống so với người có kinh nghiệm làm việc từ 3 năm trở lên mà thu nhập cao.
cpp <- table(k$income, k$years)
cpp
##
## it nhieu
## thap 127 17
## cao 22 231
chisq.test(cpp)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: cpp
## X-squared = 244, df = 1, p-value < 2.2e-16
Kết quả kiểm định cho thấy p- value < 0,05 nên ta bác bỏ \(H_0\). Vậy thu nhập mỗi tháng và kinh nghiệm làm việc có liên quan với nhau .
cpp <- table(k$income, k$credit)
cpp <- prop.table(cpp)
addmargins(cpp)
##
## low high Sum
## thap 0.357682620 0.005037783 0.362720403
## cao 0.176322418 0.460957179 0.637279597
## Sum 0.534005038 0.465994962 1.000000000
k |> ggplot(aes(x = income, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
facet_grid(. ~ credit) +
# theme_classic() +
labs(x = 'Thu nhập mỗi tháng', y = 'Số người')
Nhận xét: Trong tổng số 397 người khảo sát được
53% người thuộc nhóm low (điểm tín dụng 700 trở xuống) trong đó:
Người thu nhập thấp chiếm 36%
Người thu nhập cao chiếm 18%
47% người thuộc nhóm high (điểm tín dụng 700 trở lên), trong đó:
Người thu nhập thấp chiếm 1%
Người thu nhập cao chiếm 46%
library(DescTools)
cpp <- table(k$income, k$credit)
addmargins(cpp)
##
## low high Sum
## thap 142 2 144
## cao 70 183 253
## Sum 212 185 397
RelRisk(cpp)
## [1] 3.564087
Tỷ lệ người thu nhập thấp có điểm tín dụng 700 trở xuống hơn gấp 3,6 lần tỷ lệ người thu nhập cao có điểm tín dụng 700 trở lên.
cpp <- table(k$income, k$credit)
cpp
##
## low high
## thap 142 2
## cao 70 183
OddsRatio(cpp)
## [1] 185.6143
Tỷ lệ người có điểm tín dụng 700 trở xuống so với người có điểm tín dụng 700 trở lên mà thu nhập thấp hơn gấp 186 lần tỷ lệ người có điểm tín dụng 700 trở xuống so với người có điểm tín dụng 700 trở lên mà thu nhập cao.
cpp <- table(k$income, k$credit)
cpp
##
## low high
## thap 142 2
## cao 70 183
chisq.test(cpp)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: cpp
## X-squared = 182.76, df = 1, p-value < 2.2e-16
Kết quả kiểm định cho thấy p- value < 0,05 nên ta bác bỏ \(H_0\). Vậy thu nhập mỗi tháng và điểm tín dụng có liên quan với nhau .
cpp <- table(k$income, k$children)
cpp <- prop.table(cpp)
addmargins(cpp)
##
## Dacocon Khongcon Sum
## thap 0.1763224 0.1863980 0.3627204
## cao 0.4382872 0.1989924 0.6372796
## Sum 0.6146096 0.3853904 1.0000000
k |> ggplot(aes(x = income, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
facet_grid(. ~ children) +
# theme_classic() +
labs(x = 'Thu nhập mỗi tháng', y = 'Số người')
Nhận xét: Trong tổng số 397 người khảo sát được
61,5% người thuộc nhóm đã có con trong đó:
Người thu nhập thấp chiếm 17,6%
Người thu nhập cao chiếm 43,8%
38,5% người thuộc nhóm không con, trong đó:
Người thu nhập thấp chiếm 18,6%
Người thu nhập cao chiếm 19,9%
cpp <- table(k$income, k$children)
library(epitools)
riskratio(cpp, rev = 'c')
## $data
##
## Khongcon Dacocon Total
## thap 74 70 144
## cao 79 174 253
## Total 153 244 397
##
## $measure
## risk ratio with 95% C.I.
## estimate lower upper
## thap 1.000000 NA NA
## cao 1.414794 1.173097 1.706288
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## thap NA NA NA
## cao 8.416319e-05 0.0001055465 7.22221e-05
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Tỷ lệ người đã có con mà thu nhập cao hơn gấp 1,4 lần tỷ lệ người đã có con nhưng thu nhập thấp.
cpp <- table(k$income, k$children)
cpp
##
## Dacocon Khongcon
## thap 70 74
## cao 174 79
oddsratio(cpp, rev = 'r')
## $data
##
## Dacocon Khongcon Total
## cao 174 79 253
## thap 70 74 144
## Total 244 153 397
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## cao 1.000000 NA NA
## thap 2.321982 1.524744 3.550759
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## cao NA NA NA
## thap 8.416319e-05 0.0001055465 7.22221e-05
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Tỷ lệ người đã có con so với người không con mà thu nhập cao hơn gấp 2,3 lần tỷ lệ người đã có con so với người không con mà thu nhập thấp.
cpp <- table(k$income, k$children)
cpp
##
## Dacocon Khongcon
## thap 70 74
## cao 174 79
chisq.test(cpp)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: cpp
## X-squared = 14.912, df = 1, p-value = 0.0001126
Kết quả kiểm định cho thấy p- value < 0,05 nên ta bác bỏ \(H_0\). Vậy thu nhập mỗi tháng và số con có liên quan với nhau .
cpp <- table(d$Car, k$income)
cpp <- prop.table(cpp)
addmargins(cpp)
##
## thap cao Sum
## No 0.30226700 0.04534005 0.34760705
## Yes 0.06045340 0.59193955 0.65239295
## Sum 0.36272040 0.63727960 1.00000000
k |> ggplot(aes(x = d.Car, y = after_stat(count))) +
geom_bar(fill = 'pink') +
geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) +
facet_grid(. ~ income) +
# theme_classic() +
labs(x = 'Quyền sở hữu ô tô', y = 'Số người')
Nhận xét: Trong tổng số 397 người khảo sát được
36,2% người thuộc nhóm thu nhập thấp, trong đó:
Người đã có xe chiếm 6%
Người chưa có xe chiếm 30,2%
63,8% người thuộc nhóm thu nhập cao, trong đó:
Người đã có xe chiếm 59,2%
Người chưa có xe chiếm 4,5%
library(DescTools)
cpp <- table(d$Car, k$income)
addmargins(cpp)
##
## thap cao Sum
## No 120 18 138
## Yes 24 235 259
## Sum 144 253 397
RelRisk(cpp)
## [1] 9.384058
Tỷ lệ người không có xe mà thu nhập thấp hơn gấp 9,4 lần tỷ lệ người có xe mà thu nhập cao.
cpp <- table(d$Car, k$income)
cpp
##
## thap cao
## No 120 18
## Yes 24 235
OddsRatio(cpp)
## [1] 65.27778
Tỷ lệ người thu nhập thấp so với người thu nhập cao mà không có xe hơn gấp 65 lần tỷ lệ người thu nhập thấp so với người thu nhập cao mà đã có xe.
cpp <- table(k$income, d$Car)
cpp
##
## No Yes
## thap 120 24
## cao 18 235
chisq.test(cpp)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: cpp
## X-squared = 231.73, df = 1, p-value < 2.2e-16
Kết quả kiểm định cho thấy p- value < 0,05 nên ta bác bỏ \(H_0\). Vậy quyền sở hữu ô tô và thu nhập mỗi tháng là có liên quan với nhau.
Chọn 1 hoặc 2 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.
Xem biến Quyền sở hữu xe (Car) là biến phụ thuộc nhằm mục đích đo lường các yếu tố ảnh hưởng đến quyết định có mua ô tô hay không thông qua các yếu tố như thông tin về nghề nghiệp (Occupation), tình trạng tài chính (Finance Status), lịch sử tài chính (Finance History), thu nhập hàng tháng (Monthly Income), điểm tín dụng (Credit Score), số năm làm việc (Years of Employment), số con (Number of Children). Từ đó, xác định được đối tượng khách hàng phù hợp, triển khai những chính sách khuyến mãi, bán hàng kịp thời.
Xem thu nhập hàng tháng (Monthly Income) là biến phụ thuộc nhằm mục đích xem xét mối quan hệ giữa thu nhập trung bình hàng tháng với các biến độc lập như quyền sở hữu xe (Car), tình trạng tài chính (Finance Status), thu nhập hàng tháng (Monthly Income), điểm tín dụng (Credit Score), số năm làm việc (Years of Employment), số con (Number of Children).
Giả sử thu nhập hàng tháng (Y) là biến phụ thuộc, biến độc lập định lượng số năm làm việc (X).
Biến độc lập định tính quyền sở hữu xe (D) có 2 phạm trù Yes và No.
Đặt D = 1 nếu là Yes, D = 0 nếu là No.
Mô hình: \(Y = \beta_1 + \beta_2D + \beta_3X + u\)
Nếu là Yes (D = 1) - > \(Y = (\beta_1 + \beta_2) + \beta_3X + u\)
Nếu là No (D = 0) - > \(Y = \beta_1 + \beta_3X + u\)
Ý nghĩa
Giá trị trung bình của Y là \(\beta_1\) (đơn vị) khi \(X = 0\) và biến định tính là No.
X không đổi, giá trị trung bình của Y khi biến định tính là Yes cao hơn giá trị trung bình của Y khi biến định tính là No \(\beta_2\) (đơn vị).
Khi X tăng 1 đơn vị thì giá trị trung bình của Y tăng \(\beta_3\) (đơn vị) trong cả 2 trường hợp biến định tính là Yes hoặc No.
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 300 quan sát.
Bộ dữ liệu 397 quan sát có 8 biến bao gồm 4 biến định tính (thông tin
về nghề nghiệp, tình trạng tài chính, lịch sử tài chính và quyền sở hữu
xe hơi) và 4 biến định lượng (thu nhập hàng tháng, điểm tín dụng, số năm
làm việc, số con). Thông tin nguồn dữ liệu được lấy từ
kaggle nguồn: https://www.kaggle.com/datasets/rkiattisak/car-ownership-predictionbeginner-intermediate
Occupation: thông tin về nghề nghiệp.
MI (Monthly Income): thông tin về số tiền mỗi cá nhân kiếm được trong một tháng.
CS (Credit Score): thông tin về điểm tín dụng của mỗi cá nhân, biểu thị bằng số về mức độ đáng tin cậy của họ.
YE (Years of Employment): thông tin về khoảng thời gian mỗi cá nhân đã được tuyển dụng tại công việc hiện tại của họ.
FS (Finance Status): thông tin về tình trạng tài chính của mỗi cá nhân (Stable: ổn định / Unstable: không ổn định).
FH (Finance History): thông tin về lịch sử tài chính của mỗi cá nhân, bao gồm hành vi trong quá khứ của họ với việc thanh toán hóa đơn, vay tiền và quản lý tín dụng (No significant issues: Không vấn đề / Missed payments in the past: trong quá khứ bỏ lỡ một khoản thanh toán hóa đơn hoàn toàn / Late payments: thanh toán sau ngày đến hạn).
NC (Number of Children): Số con của mỗi cá nhân.
Car: cho biết mỗi cá nhân có sở hữu ô tô hay không (Yes/No).
setwd("D:/HỌC TẬP/Phân tích dữ liệu định tính")
library(xlsx)
library(readxl)
library(data.table)
d <- read.xlsx("Car Ownership.xlsx",1)
data.table(d)
## Occupation MI CS YE FS FH Car
## 1: Nurse 4500 720 3 Stable No significant issues Yes
## 2: Software Developer 7800 800 5 Stable No significant issues Yes
## 3: Chef 3200 650 2 Unstable Missed payments in the past No
## 4: Accountant 6500 750 7 Stable No significant issues Yes
## 5: Salesperson 3000 600 1 Unstable Missed payments in the past No
## ---
## 393: Project Manager 7000 730 5 Stable No significant issues Yes
## 394: Chef 4500 680 4 Stable No significant issues Yes
## 395: Interior Designer 5500 690 4 Stable No significant issues Yes
## 396: Medical Assistant 3500 640 3 Stable No significant issues No
## 397: Customer Service Rep 3200 641 4 Stable No significant issues No
## NC
## 1: 0
## 2: 0
## 3: 0
## 4: 1
## 5: 0
## ---
## 393: 0
## 394: 0
## 395: 1
## 396: 1
## 397: 2