Phần 1: Tìm hiểu và Chuẩn bị Dữ liệu

Tập dữ liệu được sử dụng trong phân tích này nhằm khảo sát nhu cầu và hành vi lựa chọn xe hơi của người tiêu dùng. Mỗi quan sát trong bộ dữ liệu đại diện cho một mẫu xe cụ thể, với các đặc điểm kỹ thuật khác nhau và mức đánh giá tổng thể từ hệ thống.

Các biến gồm có:

  • buying: Giá mua xe (gồm các mức: vhigh, high, med, low)
  • maint: Chi phí bảo trì (vhigh, high, med, low)
  • doors: Số cửa (2, 3, 4, 5more)
  • persons: Số chỗ ngồi (2, 4, more)
  • lug_boot: Kích thước khoang hành lý (small, med, big)
  • safety: Mức độ an toàn (low, med, high)
  • class: Mức đánh giá tổng thể của xe (unacc, acc, good, vgood)
df <- read.csv("C:/Users/Admin/Downloads/data car.csv", stringsAsFactors = FALSE)
str(df)
## 'data.frame':    1728 obs. of  7 variables:
##  $ buying  : chr  "vhigh" "vhigh" "vhigh" "vhigh" ...
##  $ maint   : chr  "vhigh" "vhigh" "vhigh" "vhigh" ...
##  $ doors   : chr  "2" "2" "2" "2" ...
##  $ persons : chr  "2" "2" "2" "2" ...
##  $ lug_boot: chr  "small" "small" "small" "med" ...
##  $ safety  : chr  "low" "med" "high" "low" ...
##  $ class   : chr  "unacc" "unacc" "unacc" "unacc" ...
colSums(is.na(df))
##   buying    maint    doors  persons lug_boot   safety    class 
##        0        0        0        0        0        0        0
df$buying <- as.factor(df$buying)
df$maint <- as.factor(df$maint)
df$doors <- as.factor(df$doors)
df$persons <- as.factor(df$persons)
df$lug_boot <- as.factor(df$lug_boot)
df$safety <- as.factor(df$safety)
df$class <- as.factor(df$class)

Phần 2: Phân tích Mô tả Một biến Định tính

2.1. Biến buying

Giới thiệu biến và thống kê

tanso_buying <- table(df$buying)
tanso_buying
## 
##  high   low   med vhigh 
##   432   432   432   432
tansuat_buying <- tanso_buying / nrow(df)
tansuat_buying
## 
##  high   low   med vhigh 
##  0.25  0.25  0.25  0.25
barplot(tansuat_buying,
        main = "Biểu đồ phân bố - Buying",
        xlab = "Buying",
        ylab = "Tần suất",
        col = "lightblue",
        border = "black")

pie(tansuat_buying,
    main = "Biểu đồ tròn - Buying",
    col = rainbow(length(tansuat_buying)),
    labels = paste(names(tansuat_buying), " (", round(tansuat_buying * 100, 1), "%)", sep = ""))

Nhận xét:

Kết quả phân tích cho thấy biến “buying” (Giá mua xe) có phân bố hoàn toàn đồng đều giữa 4 nhóm:

  • high (Giá cao): chiếm khoảng 25%
  • vhigh (Rất cao): chiếm khoảng 25%
  • med (Trung bình): chiếm khoảng 25%
  • low (Thấp): chiếm khoảng 25%

Việc phân bố đều giữa các mức giá giúp so sánh công bằng giữa các nhóm xe theo khả năng chi trả của người dùng.
Yếu tố giá cả là một trong những tiêu chí quan trọng hàng đầu ảnh hưởng đến quyết định mua xe, đặc biệt với những người tiêu dùng có ngân sách giới hạn.
Sự phân bổ cân đối này tạo điều kiện thuận lợi cho các phân tích liên quan đến khả năng tiếp cận thị trường, hành vi lựa chọn theo thu nhập, và chiến lược giá của doanh nghiệp.

Ước lượng và kiểm định

n_low <- sum(df$buying == "low")

n_total <- nrow(df)

# Ước lượng khoảng tin cậy, định giả thuyết H0: 
prop.test(n_low, n_total, p = 0.25, conf.level = 0.95)
## 
##  1-sample proportions test without continuity correction
## 
## data:  n_low out of n_total, null probability 0.25
## X-squared = 0, df = 1, p-value = 1
## alternative hypothesis: true p is not equal to 0.25
## 95 percent confidence interval:
##  0.2301534 0.2709557
## sample estimates:
##    p 
## 0.25

Giả thiết đặt ra:

  • Giả thuyết H₀ (H0): Tỷ lệ chọn mức giálow trong tổng biến buying là 25% (p = 0.25).

  • Giả thuyết H₁ (H1): Tỷ lệ chọn mức giá low trong tổng biến buying khác 25% (p ≠ 0.25)

  • Nếu p-value < 0.05 bác bỏ H₀ và ngược lại **p-value ≥ 0.05* chưa đủ bằng chứng bác bỏ giả thuyết H₀

Nhận xét:

  • Tỷ lệ chọn mức low ttng dữ liệu là đúng 25.00%, và nằm trọn trong khoảng tin cậy 95% từ 23.02% đến 27.10%.

  • p-value = 1 > 0.05, nên chúng ta không bác bỏ giả thuyết rrg tỷ lệ mức “low” là 25%.

  • Biểu đồ và tần suất cho thấy phân bố giữa các mức giá (low, med, high, vhigh) là hoàn toàn cân bằng

  • Điều này cho thấy dữ liệu biến buying được phân phối đều giữa các nhóm, và phù hợp với giả thuyết thống kê ban đầu.

2.2. Biến maint

Giới thiệu biến và thống kê

tanso_maint <- table(df$maint)
tanso_maint
## 
##  high   low   med vhigh 
##   432   432   432   432
tansuat_maint <- tanso_maint / nrow(df)
tansuat_maint
## 
##  high   low   med vhigh 
##  0.25  0.25  0.25  0.25
barplot(tansuat_maint,
        main = "Biểu đồ phân bố - Maint",
        xlab = "Maint",
        ylab = "Tần suất",
        col = "lightgreen",
        border = "black")

pie(tansuat_maint,
    main = "Biểu đồ tròn - Maint",
    col = rainbow(length(tansuat_maint)),
    labels = paste(names(tansuat_maint), " (", round(tansuat_maint * 100, 1), "%)", sep = ""))

Nhận xét:

Kết quả phân tích cho thấy biến “maint” (Chi phí bảo trì) có phân bố hoàn toàn đồng đều giữa 4 nhóm:

  • high (Giá cao): chiếm khoảng 25%
  • vhigh (Rất cao): chiếm khoảng 25%
  • med (Trung bình): chiếm khoảng 25%
  • low (Thấp): chiếm khoảng 25%

Ước lượng và kiểm định

n_low_maint <- sum(df$maint == "low")


n_total_maint <- nrow(df)


prop.test(n_low_maint, n_total_maint, p = 0.25, conf.level = 0.95)
## 
##  1-sample proportions test without continuity correction
## 
## data:  n_low_maint out of n_total_maint, null probability 0.25
## X-squared = 0, df = 1, p-value = 1
## alternative hypothesis: true p is not equal to 0.25
## 95 percent confidence interval:
##  0.2301534 0.2709557
## sample estimates:
##    p 
## 0.25

Giả thiết đặt ra:

  • Giả thuyết H₀ (H0): Tỷ lệ chọn mức giá low trong tổng biến maint là 25% (p = 0.25).
  • Giả thuyết H₁ (H1): Tỷ lệ chọn mức giá low trong tổng biến maint khác 25% (p ≠ 0.25)
  • Nếu p-value < 0.05Bác bỏ giả thuyết H₀và ngược lại p-value ≥ 0.05chưa đủ bằng chứng bác bỏ giả thuyết H₀

Nhận xét:

  • Tỷ lệ chọn mức “low” trong dữ liệu là đúng 25.00%, và nằm trọn trong khoảng tin cậy 95% từ 23.02% đến 27.10%.

  • p-value = 1 > 0.05, nên chúng ta không bác bỏ giả thuyết rằng tỷ lệ mức “low” là 25%.

  • Biểu đồ và tần suất cho thấy phân bố giữa các mức chi phí (low, med, high, vhigh) trong biến mainthoàn toàn cân bằng.

  • Điều này cho thấy dữ liệu biến maint được thu thập đồng đều, phù hợp với giả định phân phối chuẩn ban đầu và hỗ trợ cho các phân tích tiếp theo.

2.3. Biến doors

Giới thiệu biến và thống kê

tanso_doors <- table(df$doors)
tanso_doors
## 
##     2     3     4 5more 
##   432   432   432   432
tansuat_doors <- tanso_doors / nrow(df)
tansuat_doors
## 
##     2     3     4 5more 
##  0.25  0.25  0.25  0.25
barplot(tansuat_doors,
        main = "Biểu đồ phân bố - Doors",
        xlab = "Doors",
        ylab = "Tần suất",
        col = "lightcoral",
        border = "black")

pie(tansuat_doors,
    main = "Biểu đồ tròn - Doors",
    col = rainbow(length(tansuat_doors)),
    labels = paste(names(tansuat_doors), " (", round(tansuat_doors * 100, 1), "%)", sep = ""))

Nhận xét:

Kết quả phân tích cho thấy biến “doors” (Số cửa xe) có phân bố hoàn toàn đồng đều giữa 4 nhóm:

  • 2 cửa: chiếm khoảng 25%
  • 3 cửa: chiếm khoảng 25%
  • 4 cửa: chiếm khoảng 25%
  • 5more (Từ 5 cửa trở lên): chiếm khoảng 25%

Biểu đồ trònbiểu đồ cột thể hiện rõ sự phân bố cân bằng giữa các loại số cửa. Tương tự biến buying và biến maint đã phân tích ở trên

Ước lượng và kiểm định

n_doors_2 <- sum(df$doors == "2")


n_total <- nrow(df)


prop.test(n_doors_2, n_total, p = 0.25, conf.level = 0.95)
## 
##  1-sample proportions test without continuity correction
## 
## data:  n_doors_2 out of n_total, null probability 0.25
## X-squared = 0, df = 1, p-value = 1
## alternative hypothesis: true p is not equal to 0.25
## 95 percent confidence interval:
##  0.2301534 0.2709557
## sample estimates:
##    p 
## 0.25

Giả thiết đặt ra:

  • H₀: Tỷ lệ xe có 2 cửa trong tổng thể là 25% (p = 0.25)
  • H₁: Tỷ lệ xe có 2 cửa trong tổng thể khác 25% (p ≠ 0.25)

Kết quả kiểm định:

  • Tỷ lệ ước lượng: 25.00%
  • Khoảng tin cậy 95%: 23.02% – 27.10%
  • p-value = 1

Nhận xét:

  • p-value > 0.05, ta không bác bỏ giả thuyết H₀.
  • Tỷ lệ xe có 2 cửa không khác biệt có ý nghĩa thống kê so với 25%.
  • Phân bố giữa các nhóm số cửa là cân bằng tuyệt đối, phù hợp với dữ liệu thiết kế chuẩn.

2.4. Biến persons

Giới thiệu biến và thống kê

tanso_persons <- table(df$persons)
tanso_persons
## 
##    2    4 more 
##  576  576  576
tansuat_persons <- tanso_persons / nrow(df)
tansuat_persons
## 
##         2         4      more 
## 0.3333333 0.3333333 0.3333333
barplot(tansuat_persons,
        main = "Biểu đồ phân bố - Persons",
        xlab = "Persons",
        ylab = "Tần suất",
        col = "lightsalmon",
        border = "black")

pie(tansuat_persons,
    main = "Biểu đồ tròn - Persons",
    col = rainbow(length(tansuat_persons)),
    labels = paste(names(tansuat_persons), " (", round(tansuat_persons * 100, 1), "%)", sep = ""))

Nhận xét:

Kết quả phân tích cho thấy biến “persons” (Sức chứa hành khách) có phân bố hoàn toàn đồng đều giữa 3 nhóm:

  • 2 người: chiếm khoảng 33.3%
  • 4 người: chiếm khoảng 33.3%
  • more (trên 4 người): chiếm khoảng 33.3%

Ước lượng và kiểm định

n_persons_2 <- sum(df$persons == "2")


n_total <- nrow(df)

# Kiểm định tỷ lệ với H0: p = 1/3 
prop.test(n_persons_2, n_total, p = 1/3, conf.level = 0.95)
## 
##  1-sample proportions test without continuity correction
## 
## data:  n_persons_2 out of n_total, null probability 1/3
## X-squared = 4.4877e-29, df = 1, p-value = 1
## alternative hypothesis: true p is not equal to 0.3333333
## 95 percent confidence interval:
##  0.3114982 0.3559079
## sample estimates:
##         p 
## 0.3333333

Giả thiết đặt ra:

  • Giả thuyết H₀ (H0): Tỷ lệ xe có sức chứa 2 người trong tổng thể là 1/3 (p = 0.333).

  • Giả thuyết H₁ (H1): Tỷ lệ xe có sức chứa 2 người trong tổng thể khác 1/3 (p ≠ 0.333).

  • Nếu p-value < 0.05Bác bỏ giả thuyết H₀ ngược lại p-value ≥ 0.05Chưa đủ bằng chứng bác bỏ giả thuyết H₀

Nhận xét:

  • Tỷ lệ ước lượng cho nhóm 2 người33.33%, và nằm trong khoảng tin cậy 95% từ 31.15% đến 35.59%.

  • p-value = 1 > 0.05, nên chúng ta không bác bỏ giả thuyết rằng tỷ lệ nhóm “2 người” là 1/3.

  • Điều này cho thấy tỷ lệ nhóm 2 người trong dữ liệu là phphp với phân bố giả định đều tương tự các nhóm còn lại (4, more).

2.5. Biến lug_boot

Giới thiệu biến và thống kê

tanso_lug <- table(df$lug_boot)
tanso_lug
## 
##   big   med small 
##   576   576   576
tansuat_lug <- tanso_lug / nrow(df)
tansuat_lug
## 
##       big       med     small 
## 0.3333333 0.3333333 0.3333333
barplot(tansuat_lug,
        main = "Biểu đồ phân bố - Lug Boot",
        xlab = "Lug Boot",
        ylab = "Tần suất",
        col = "lightcyan",
        border = "black")

pie(tansuat_lug,
    main = "Biểu đồ tròn - Lug Boot",
    col = rainbow(length(tansuat_lug)),
    labels = paste(names(tansuat_lug), " (", round(tansuat_lug * 100, 1), "%)", sep = ""))

Nhận xét:

Kết quả phân tích cho thấy biến lug_boot (Kích thước khoang hành lý) có phân bố hoàn toàn đồng đều giữa 3 nhóm:

  • small (Nhỏ): chiếm khoảng 33.3%
  • med (Trung bình): chiếm khoảng 33.3%
  • big (Lớn): chiếm khoảng 33.3%

Việc phân bố đều giữa các kích thước khoang hành lý có thể ảnh hưởng trực tiếp đến khả năng chứa đồ và mức độ tiện nghi của xe, từ đó ảnh hưởng đến sự lựa chọn của người tiêu dùng tùy theo nhu cầu sử dụng (gia đình, chở hàng, đi xa,…).
Sự cân bằng giữa các nhóm cũng*giúp so sánh công bằng gga các loại xe khi phân tích các yếu tố như giá cả, đánh giá tổng thể, hoặc mức độ phù hợp với từng phân khúc người dùng.

Ước lượng và kiểm định

n_lug_small <- sum(df$lug_boot == "small")

n_total <- nrow(df)

prop.test(n_lug_small, n_total, p = 1/3, conf.level = 0.95)
## 
##  1-sample proportions test without continuity correction
## 
## data:  n_lug_small out of n_total, null probability 1/3
## X-squared = 4.4877e-29, df = 1, p-value = 1
## alternative hypothesis: true p is not equal to 0.3333333
## 95 percent confidence interval:
##  0.3114982 0.3559079
## sample estimates:
##         p 
## 0.3333333

Giả thiết đặt ra:

  • Giả thuyết H₀ (H0): Tỷ lệ xe có khoang hành lý small trong tổng thể là 1/3 (p = 0.333).

  • Giả thuyết H₁ (H1): Tỷ lệ xe có khoang hành lý small trong tổng thể khác 1/3 (p ≠ 0.333).

  • Nếu p-value < 0.05Bác bỏ giả thuyết H₀ ngược lại p-value ≥ 0.05Chưa đủ bằng chứng bác bỏ giả thuyết H₀

Nhận xét:

  • Tỷ lệ xe có khoang hành lý “small” trong dữ liệu là 33.33%, và nằm trọn trong khoảng tin cậy 95% từ 31.15% đến 35.59%.

  • p-value = 1 > 0.05, nên chúng ta không bác bỏ giả thuyết rằng lệ nhóm small là 1/3.

  • Điều này cho phép phân tích công bằng giữa các nhóm xe dựa trên yếu tố sức chứa hành lý, và tăng độ tin cậy khi đánh giá nhu cầu sử dụng, đặc biệt với các mục đích gia đình hoặc vận chuyển đồ đạc.

2.6. Biến safety

Giới thiệu biến và thống kê

tanso_safety <- table(df$safety)
tanso_safety
## 
## high  low  med 
##  576  576  576
tansuat_safety <- tanso_safety / nrow(df)
tansuat_safety
## 
##      high       low       med 
## 0.3333333 0.3333333 0.3333333
barplot(tansuat_safety,
        main = "Biểu đồ phân bố - Safety",
        xlab = "Safety",
        ylab = "Tần suất",
        col = "khaki",
        border = "black")

pie(tansuat_safety,
    main = "Biểu đồ tròn - Safety",
    col = rainbow(length(tansuat_safety)),
    labels = paste(names(tansuat_safety), " (", round(tansuat_safety * 100, 1), "%)", sep = ""))

Nhận xét:

Kết quả phân tích cho thấy biến safety (Mức độ an toàn) có phân bố hoàn toàn đồng đều giữa 3 nhóm:

  • low (Thấp): chiếm khoảng 33.3%
  • med (Trung bình): chiếm khoảng 33.3%
  • high (Cao): chiếm khoảng 33.3%

Mức độ an toàn là một trong những yếu tố quan trọng hàng đầu khi đánh giá chất lượng và giá trị sử dụng của xe, đặc biệt với những người mua có xu hướng ưu tiên sự bảo vệ cho bản thân và gia đình.Xe có mức độ an toàn cao thường được đánh giá cao hơn trong các tiêu chí xếp hạng tổng thể, đồng thời ảnh hưởng mạnh đến giá bán, uy tín thương hiệu và khả năng tiêu thụ trên thị trường.Tuy nhiên trong kết quả phân tích thì mức độ giữa 3 nhóm đồng đều nhau

Ước lượng và kiểm định

n_safety_low <- sum(df$safety == "low")

n_total <- nrow(df)

prop.test(n_safety_low, n_total, p = 1/3, conf.level = 0.95)
## 
##  1-sample proportions test without continuity correction
## 
## data:  n_safety_low out of n_total, null probability 1/3
## X-squared = 4.4877e-29, df = 1, p-value = 1
## alternative hypothesis: true p is not equal to 0.3333333
## 95 percent confidence interval:
##  0.3114982 0.3559079
## sample estimates:
##         p 
## 0.3333333

Giả thiết đặt ra:

  • Giả thuyết H₀ (H0): Tỷ lệ xe có mức độ an toàn “low” trong tổng thể là 1/3 (p = 0.333).

  • Giả thuyết H₁ (H1): Tỷ lệ xe có mức độ an toàn “low” trong tổng thể khác 1/3 (p ≠ 0.333).

  • Nếu p-value < 0.05Bác bỏ giả thuyết H₀ ngược lại p-value ≥ 0.05Chưa đủ bằng chứng bác bỏ giả thuyết H₀

Nhận xét:

  • Tỷ lệ xe có mức độ an toàn “low” trong dữ liệu là 33.33%, và nằm trọn trong khoảng tin cậy 95% từ 31.15% đến 35.59%.

  • p-value = 1 > 0.05, nên chúng ta không bác bỏ giả thuyết rằng tỷ lệ nhóm “low” là 1/3.

  • Phân bố giữa các nhóm mức độ an toàn (low, med, high) trong biến safety là hoàn toàn cân bằng.

  • Mức độ an toàn là một tiêu chí cực kỳ quan trọng trong việc đánh giá chất lượng xe và ảnh hưởng lớn đến quyết định mua hàng

2.7. Biến class

Giới thiệu biến và thống kê

tanso_class <- table(df$class)
tanso_class
## 
##   acc  good unacc vgood 
##   384    69  1210    65
tansuat_class <- tanso_class / nrow(df)
tansuat_class
## 
##        acc       good      unacc      vgood 
## 0.22222222 0.03993056 0.70023148 0.03761574
barplot(tansuat_class,
        main = "Biểu đồ phân bố - Class",
        xlab = "Class",
        ylab = "Tần suất",
        col = "plum",
        border = "black")

pie(tansuat_class,
    main = "Biểu đồ tròn - Class",
    col = rainbow(length(tansuat_class)),
    labels = paste(names(tansuat_class), " (", round(tansuat_class * 100, 1), "%)", sep = ""))

Nhận xét:

Kết quả phân tích cho thấy biến class (Phân loại xe) có sự phân bố không đồng đều giữa các nhóm:

  • unacc (Không chấp nhận): chiếm tỷ lệ cao nhất, khoảng 70.0%
  • acc (Chấp nhận được): chiếm khoảng 22.2%
  • good (Tốt): chiếm khoảng 4.0%
  • vgood (Rất tốt): chiếm khoảng 3.8%

Biểu đồ cột và biểu đồ tròn thể hiện rõ sự không cân bằng giữa các nhóm. Nhóm unacc chiếm tỷ lệ khá cao, trong khi các nhóm còn lại – đặc biệt là good và vgood có tỷ lệ rất nhỏ.Điều này phản ánh rằng phần lớn các xe trong bộ dữ liệu không đạt tiêu chuẩn chấp nhận, cho thấy tiêu chí đánh giá của hệ thống phân loại có thể khá nghiêm ngặt.

Ước lượng và kiểm định

n_unacc <- sum(df$class == "unacc")

n_total <- nrow(df)

prop.test(n_unacc, n_total, p = 0.25, conf.level = 0.95)
## 
##  1-sample proportions test with continuity correction
## 
## data:  n_unacc out of n_total, null probability 0.25
## X-squared = 1865.8, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.25
## 95 percent confidence interval:
##  0.6779103 0.7216525
## sample estimates:
##         p 
## 0.7002315

Giả thiết đặt ra:

  • Giả thuyết H₀ (H0): Tỷ lệ xe thuộc nhóm “unacc” trong tổng thể là 25% (p = 0.25), tức phân bố đều giữa 4 nhóm class.

  • Giả thuyết H₁ (H1): Tỷ lệ xe thuộc nhóm “unacc” trong tổng thể khác 25% (p ≠ 0.25).

  • Nếu p-value < 0.05Bác bỏ giả thuyết H₀và ngược lại p-value ≥ 0.05Chưa đủ bằng chứng bác bỏ H₀

Nhận xét:

  • Tỷ lệ xe thuộc nhóm “unacc” trong dữ liệu là 70.02%, và nằm trong khoảng tin cậy 95% từ 67.79% đến 72.17%.

  • p-value < 2.2e-16 < 0.05, nên bác bỏ giả thuyết H0 Điều này cho thấy tỷ lệ nhóm "unacc" trong dữ liệu khác biệt có ý nghĩa thống kê với giả thuyết 25%.

  • Như vậy, phân bố giữa các nhóm trong biến class không đều**, và nhóm "unacc" chiếm tỷ lệ khá cao so với các nhóm "acc", "good""vgood".Điều này có thể phản ánh:

    • Tiêu chuẩn đánh giá trong hệ thống là rất nghiêm ngặt
    • Hoặc chất lượng của các xe trong bộ dữ liệu này chưa cao.

Phần 3: Phân tích mối quan hệ giữa hai biến Buying và Class

Tạo bảng tần số chéo và kiểm định

table_cb <- table(df$class, df$buying)
table_cb
##        
##         high low med vhigh
##   acc    108  89 115    72
##   good     0  46  23     0
##   unacc  324 258 268   360
##   vgood    0  39  26     0
round(prop.table(table_cb, margin = 1) * 100, 2)
##        
##          high   low   med vhigh
##   acc   28.12 23.18 29.95 18.75
##   good   0.00 66.67 33.33  0.00
##   unacc 26.78 21.32 22.15 29.75
##   vgood  0.00 60.00 40.00  0.00
# Kiểm định Chi bình phương 
chisq.test(table_cb)
## 
##  Pearson's Chi-squared test
## 
## data:  table_cb
## X-squared = 189.24, df = 9, p-value < 2.2e-16

Quan sát **bảng tần số chéo cho thấy:

  • Nhóm unacc chiếm tỷ lệ cao nhất ở các mức giá:vhigh (29.75%) và high (26.78%)

  • Nhóm acc có tỷ lệ khá đồng đều giữa các mức:low, med, high, vhigh

  • Nhóm good chỉ xuất hiện ở mức giá:low(66.67%) vàmed(33.33%) không hề xuất hiện ở mứchighhoặcvhigh`

  • Nhóm vgood chỉ có ở mức giá:low (60%) và med (40%)hoàn toàn không có ở mức highvhigh

Có thể thấy một sự hơi vô lý ở phân tích này nghĩa là loại xe càng được đánh giá cao (vgood, good) thì xuất hiện chủ yếu ở các mức giá thấp,trong khi đó xe bị đánh giá kém (unacc) lại thường có mức giá cao hơn

Giả thuyết kiểm định Chi bình phương:

  • H₀ (Giả thuyết không): Hai biến class và `buyign độc lập nhau

  • H₁ (Giả thuyết đối): Hai biến class và `buyingcos mối quan hệ

Kết quả kiểm định:

p-value: < 2.2e-16

  • p-value < 0.05, ta bác bỏ giả thuyết H₀
    → Điều này chứng tỏ có mối quan hệ có ý nghĩa thống kê giữa hai biến classbuying.

Điều này có thể phản ánh rằng: - Giá cả không hoàn toàn quyết định chất lượng xe, hoặc - Xe giá cao lại không đáp ứng được các tiêu chí đánh giá, dẫn đến tỷ lệ "unacc" vẫn rất cao trong nhóm giá cao (vhigh, high).

Biểu đồ cột thể hiện mối quan hệ 2 biến

library(ggplot2)

ggplot(df, aes(x = class, fill = buying)) +
  geom_bar(position = "dodge") +
  labs(
    title = "Biểu đồ cột nhóm: Class và Buying",
    x = "Class",
    y = "Số lượng",
    fill = "Buying"
  ) +
  theme_minimal()

Xét thêm về RR và OR giữa hai biến Buying và class

install.packages(“epitools”) library(epitools)

library(epitools)

df$class2 <- ifelse(df$class %in% c("good", "vgood"), "good", "notgood")

tbl <- table(df$buying, df$class2)
tbl_rr <- tbl[c("low", "high"), ]

# Tính Risk Ratio
rr_result <- riskratio(tbl_rr, method = "wald", correction = TRUE)
rr_result
## $data
##        
##         good notgood Total
##   low     85     347   432
##   high     0     432   432
##   Total   85     779   864
## 
## $measure
##       risk ratio with 95% C.I.
##        estimate    lower    upper
##   low  1.000000       NA       NA
##   high 1.244957 1.188188 1.304438
## 
## $p.value
##       two-sided
##        midp.exact fisher.exact   chi.square
##   low          NA           NA           NA
##   high          0 5.254845e-28 8.368394e-22
## 
## $correction
## [1] TRUE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét:

Bảng tần số giữa buyingclass (sau khi gộp good / notgood) cho thấy: - Nhóm low có 85/432 xe được phân loại là good. - Nhóm high không có xe nào được phân loại là good (0/432).

Kết quả Risk Ratio (RR): - RR = 1.245 nghĩa là nnhóm người chọn xe có mức giá cao (high) có nguy cơ bị đánh giá là “notgood” cao hơn 1.245 lần so với nhóm chọn xe giá thấp (low). khoảng tin cậy 95% được xét từ trong khoảng [1.188 – 1.304]

  • CI không chứa 1 ch thấ ycó sự khác biệt thật giữa hai nhóm
library(epitools)

tbl_or <- tbl[c("low", "high"), ]

# Tính Odds Ratio
or_result <- oddsratio(tbl_or, method = "wald", correction = TRUE)
or_result
## $data
##        
##         good notgood Total
##   low     85     347   432
##   high     0     432   432
##   Total   85     779   864
## 
## $measure
##       odds ratio with 95% C.I.
##        estimate lower upper
##   low         1    NA    NA
##   high      Inf   NaN   Inf
## 
## $p.value
##       two-sided
##        midp.exact fisher.exact   chi.square
##   low          NA           NA           NA
##   high          0 5.254845e-28 8.368394e-22
## 
## $correction
## [1] TRUE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét Kết quả Odds Ratio cho thấy nhóm high không có xe nào được đánh giá là good, dẫn đến OR = ∞ và không xác định được khoảng tin cậy. Tuy vậy, p-value rất nhỏ (≈ 8.37e-22) cho thấy sự khác biệt giữa nhóm high và low là rõ ràng và có ý nghĩa thống kê. Điều này cho thấy người chọn xe giá cao có khả năng được đánh giá tốt thấp hơn rõ rệt so với nhóm chọn xe giá thấp.

Phần 4: Hạn chế về dữ liệu phân tích

Sau quá trình phân tích, có thể nhận thấy rằng bộ dữ liệu hiện tại chưa thật sự phản ánh đầy đủ và chính xác nhu cầu mua xe của người tiêu dùng trong bối cảnh hiện tại, bởi các lý do sau:

  • Bộ dữ liệu chủ yếu dựa trên các yếu tố định tính như giá xe, kích thước cốp, dung tích chở người,… mà không xét đến các yếu tố quan trọng khác như thương hiệu xe, mức độ an toàn, hiệu suất tiêu thụ nhiên liệu, chính sách hậu mãi,…

  • Dữ liệu có vẻ đã cũ hoặc không cập nhật với thị trường thực tế ngày nay, vốn đã thay đổi nhiều về xu hướng tiêu dùng, công nghệ xe, và mức độ cạnh tranh.

  • Một số kết quả phân tích cho thấy sự phân bố không hợp lý, ví dụ như xe có giá cao thường bị đánh giá “notgood”, trong khi xe giá thấp lại được xếp loại cao – điều này không phản ánh xu hướng thực tế và có thể do dữ liệu bị lệch hoặc thiếu thông tin định lượng bổ sung.