ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KHOA HỌC KỸ THUẬT MÁY TÍNH BÀI TẬP LỚN XÁC SUẤT THỐNG KÊ Giảng viên hướng dẫn Nguyễn Bá Thi Lớp L02,nhóm 16, HK 212 Sinh viên thực hiện Nguyễn Thành Công 2012752 Ngày 16 tháng 4 năm 2022 Đại học Bách Khoa thành phố Hồ Chí Minh Khoa khoa học và kỹ thuật máy tính Contents A PHẦN CHUNG 3 I Hồi quy tuyến tính 3 1 Đề bài 3 2 Câu hỏi 3 2 1 Đọc dữ liệu (Import data) 3 2 2 Làm sạch dữ liệu (Data cleaning) 3 2 3 Làm rõ dữ liệu (Data vis.
Đọc dữ liệu (Import data)
Hãy dùng lệnh read.csv() để đọc tệp tin.
Làm sạch dữ liệu (Data cleaning)
Để thực hiện các yêu cầu xử lý sau này, trước tiên cần trích xuất một tập dữ liệu con có tên là new_DF, bao gồm các biến chính mà chúng ta quan tâm, như đã nêu trong phần giới thiệu dữ liệu Tất cả các phân tích và xử lý tiếp theo sẽ dựa trên tập dữ liệu con này.
Để kiểm tra dữ liệu bị khuyết trong tập tin, bạn có thể sử dụng các câu lệnh như is.na(), which(), và apply() Nếu phát hiện dữ liệu bị khuyết, hãy đề xuất các phương pháp thay thế phù hợp để xử lý những dữ liệu này.
Làm rõ dữ liệu (Data visualization)
Để thực hiện phân tích, chúng ta cần chuyển đổi các biến giá cả và diện tích, bao gồm price, sqft_living15, sqft_above, và sqft_living thành dạng log Cụ thể, chúng ta sẽ tính toán log(price), log(sqft_living15), log(sqft_above), và log(sqft_living) Sau khi thực hiện các phép biến đổi này, mọi tính toán liên quan đến các biến trên sẽ được hiểu là đã được chuyển đổi sang dạng log.
Đối với các biến liên tục, cần tính toán các giá trị thống kê mô tả như trung bình, trung vị, độ lệch chuẩn, giá trị lớn nhất và giá trị nhỏ nhất, sau đó xuất kết quả dưới dạng bảng bằng các hàm như mean(), median(), sd(), min(), max(), apply(), as.data.frame() và rownames() Đối với các biến phân loại, hãy tạo một bảng thống kê số lượng cho từng loại bằng cách sử dụng hàm table().
(d) Hãy dùng hàm hist() để vẽ đồ thị phân phối của biến price.
(e) Hãy dùng hàm boxplot() vẽ phân phối của biến price cho từng nhóm phân loại của biến floors và biến condition.
(f) Dùng lệnh pairs() vẽ các phân phối của biến price lần lượt theo các biến sqft_living15,sqft_above và sqft_living.
Xây dựng các mô hình hồi quy tuyến tính (Fitting linear regression models): 4
Chúng ta muốn khám phá rằng có những nhân tố nào và tác động như thế nào đến giá nhà ở quận King.
Để xây dựng mô hình hồi quy tuyến tính, biến giá (price) được xác định là biến phụ thuộc, trong khi tất cả các biến khác sẽ được coi là biến độc lập Sử dụng lệnh lm() để thực hiện mô hình hồi quy tuyến tính bội.
(b) Dựa vào kết quả của mô hình hồi quy tuyến tính trên, những biến nào bạn sẽ loại khỏi mô hình tương ứng với mức tin cậy 5% ?
(c) Xét 2 mô hình tuyến tính cùng bao gồm biến price là biến phụ thuộc nhưng:
• Mô hình M1 chứa tất cả các biến còn lại là biến độc lập.
• Mô hình M2 là loại bỏ biến condition từ mô hình M1.
Hãy dùng lệnh anova() để đề xuất mô hình hồi quy hợp lý hơn.
(d) Chọn mô hình hợp lý hơn từ câu (c) hãy suy luận sự tác động của các biến lên giá nhà.
Sử dụng mô hình hồi quy đã chọn ở câu (c), hãy áp dụng lệnh plot() để tạo đồ thị thể hiện sai số hồi quy (residuals) và giá trị dự báo (fitted values) Đồ thị này giúp chúng ta đánh giá sự phân bố của sai số và kiểm tra xem mô hình có phù hợp với dữ liệu hay không Nếu sai số hồi quy phân bố ngẫu nhiên xung quanh giá trị 0, điều này cho thấy mô hình hoạt động tốt Ngược lại, nếu có xu hướng rõ ràng trong sai số, có thể cần xem xét lại mô hình hoặc các biến đầu vào.
Dự báo (Predictions)
Sử dụng mô hình đã chọn, hãy áp dụng lệnh predict() để dự đoán giá nhà dựa trên hai thuộc tính: x1 với sqft_living15 bằng giá trị trung bình của sqft_living15 và sqft_above bằng giá trị trung bình của sqft_above Kết quả dự đoán sẽ được trả về dưới dạng một đoạn văn.
= mean(sqtf_living), floor = 2, condition = 3. x2: sqft_living15 = max(sqft_living15), sqft_above = max(sqft_above), sqtf_living max(sqtf_living), floor = 2, condition = 3.
So sánh khoảng tin cậy cho 2 giá trị dự báo này.
Đọc dữ liệu (Import data)
Hãy dùng lệnh read.csv() để đọc tệp tin. gia_nha = read.csv("D:/gia_nha.csv")
Giải thích: dùng lệnh read.csv() để đọc dữ liệu gia_nha.csv, sau đó lưu vào gia_nha.
Làm sạch dữ liệu (Data cleaning)
Để bắt đầu, chúng ta cần trích xuất một tập dữ liệu con có tên là new_DF, bao gồm các biến chính mà chúng ta quan tâm, như đã đề cập trong phần giới thiệu dữ liệu Từ đây, mọi yêu cầu xử lý dữ liệu sẽ dựa trên tập dữ liệu con new_DF này Cụ thể, new_DF sẽ bao gồm các biến: "price", "sqft_living15", "floors", "condition" và "sqft_above".
Giải thích:Tạo data.frame mới bao gồm các biến chính:price,sqft_living15,floors,condition, sqft_above, sqft_living Sau đó đặt tên là new_DF.
Kiểm tra dữ liệu bị khuyết trong tập tin bằng các câu lệnh như is.na(), which(), và apply() Nếu phát hiện có dữ liệu khuyết, cần đề xuất phương pháp thay thế phù hợp cho những giá trị này Sử dụng hàm miss_var_summary từ gói naniar để tóm tắt tình trạng dữ liệu khuyết trong new_DF.
Giải thích: Lệnh miss_var_summary() tính toán tổng các giá trị khuyết (n_miss) và tỷ lệ giá trị khuyết (pct_miss) của từng biến trong new_DF.
Dựa trên bảng thống kê giá trị khuyết đối với từng biến, chúng ta nhận thấy có sự hiện diện của các giá trị khuyết ở biến giá (price) Dưới đây là một số phương pháp mà tôi đề xuất để xử lý vấn đề này.
Phương pháp xóa (Deletion) được áp dụng khi xác suất thiếu biến là đồng nhất cho tất cả các biến Có hai cách thực hiện phương pháp này: List Wise Deletion và Pair Wise Deletion.
Xóa quan sát theo danh sách là phương pháp loại bỏ các trường hợp có bất kỳ biến nào bị thiếu Tuy nhiên, phương pháp này có nhược điểm, vì việc loại bỏ các quan sát này có thể làm giảm sức mạnh của mô hình do kích thước mẫu bị giảm và dẫn đến việc xóa toàn bộ hàng dữ liệu có thông tin bị thiếu.
Phương pháp Pair Wise Deletion cho phép phân tích tất cả các trường hợp có mặt của các biến quan tâm, giúp duy trì nhiều trường hợp có sẵn cho phân tích Tuy nhiên, nhược điểm của phương pháp này là nó sử dụng kích thước mẫu khác nhau cho từng biến, điều này có thể ảnh hưởng đến tính chính xác của kết quả phân tích.
Phương pháp Mean/Mode/Median Imputation là một kỹ thuật phổ biến để điền vào các giá trị thiếu bằng cách sử dụng các giá trị ước tính, nhằm tận dụng các mối quan hệ đã biết trong tập dữ liệu Mục tiêu của phương pháp này là hỗ trợ việc ước lượng các giá trị khuyết dựa trên các giá trị hợp lệ có sẵn Đây là một trong những phương pháp thường được áp dụng trong phân tích dữ liệu.
Generalized Imputation là phương pháp thay thế các giá trị khuyết bằng giá trị trung bình hoặc trung vị của biến, giúp duy trì tính toàn vẹn của dữ liệu Bằng cách này, chúng ta có thể giảm thiểu ảnh hưởng của các giá trị thiếu và cải thiện độ chính xác của phân tích dữ liệu.
Imputation theo trường hợp tương tự là phương pháp tính toán giá trị trung bình cho từng biến riêng biệt từ các giá trị không bị khuyết Sau đó, các giá trị khuyết của từng biến sẽ được thay thế bằng các giá trị trung bình vừa tính được, giúp cải thiện độ chính xác của dữ liệu.
Phương pháp 3: Mô hình dự đoán (Prediction Model) cho phép ước tính các giá trị thay thế cho các giá trị khuyết Đầu tiên, chúng ta chia tập dữ liệu thành hai phần: một phần không có giá trị thiếu để làm dữ liệu huấn luyện (training data) và phần còn lại chứa giá trị khuyết để làm dữ liệu kiểm tra (test data), trong đó biến có giá trị khuyết được coi là biến mục tiêu Sau đó, chúng ta xây dựng mô hình dự đoán biến mục tiêu dựa trên các thuộc tính của tập dữ liệu huấn luyện và sử dụng mô hình này để điền các giá trị khuyết trong tập dữ liệu kiểm tra.
Phương pháp KNN Imputation là một kỹ thuật trong việc xử lý dữ liệu thiếu, trong đó giá trị khuyết của một thuộc tính được gán bằng cách sử dụng các thuộc tính tương tự nhất Sự tương đồng giữa các thuộc tính được xác định thông qua hàm khoảng cách, giúp cải thiện độ chính xác của dữ liệu.
Tỷ lệ giá trị khuyết của biến price khoảng 10%, do đó, phương pháp Mean/Mode/Median Imputation sẽ được áp dụng để xử lý các giá trị khuyết này Chúng ta sẽ thay thế các giá trị khuyết bằng giá trị trung bình, giá trị mode hoặc giá trị trung vị để đảm bảo tính chính xác và đầy đủ của dữ liệu.
In the dataset, missing values (NA) in the 'price' variable are replaced with the mean of the 'price' column using the command `new_DF[is.na(new_DF)]