HỒI QUY TUYẾN TÍNH BỘIMô hình một biến phụ thuộc với hai hoặc nhiều biến độc lập được gọi là hồi quy bội... a Xét mô hình hồi quy tuyến tính bao gồm biến price là một biến phụ thuộc, và
Trang 1BÁO CÁO BÀI TẬP LỚN 2
Trang 2HỒI QUY TUYẾN TÍNH BỘI
Mô hình một biến phụ thuộc với hai hoặc nhiều biến độc lập được gọi là hồi quy bội Phương trình hồi quy tuyến tính bội Y = β0 + β1*X1 + β2*X2 + … + βk*Xk + ε
• Với Y : biến phụ thuộc
Giá trị thống kê
Trang 3Phần chung Bài tập 1:
Tập tin”gia_nha.csv” chứa thông tin về giá bán ra thị trường (đơn vị đô la) của 21613
ngôi nhà ở quận King nước Mỹ trong khoảng thời gian từ 5/2014 đến 5/2015 Bêncạnh giá nhà, dữ liệu còn bao gồm các thuộc tính mô tả chất lượng ngôi nhà Dữ liệugốc được cung cấp tại: https://www.kaggle.com/harlfoxem/housesalesprediction
Các biến chính trong dữ liệu:
Price: giá nhà được bán ra
Sqft_living15: Diện tích trung bình của 15 ngôi nhà gần nhất trong khu dân cư.
Floors: Số tầng của ngôi nhà, được phân loại từ 1- 3.5.
Condition: Điều kiện kiến trúc của ngôi nhà từ 1-5, 1: rất tệ và 5: rất tốt.
Sqft_above: Diện tích ngôi nhà.
Sqft_living: Diện tích khuôn viên.
- Tìm thư mục hiện hành chứa file bằng lệnh setwd.
- Đọc dữ liêu từ tệp “gia_nha.csv” bằng lệnh read.csv().
- “header = True” giữ lại tên của các biến.
2 Làm sạch dữ liệu (Data cleaning):
(a) Hãy trích ra một dữ liệu con đặt tên là new_DF chỉ bao gồm các biến chính mà
ta quan tâm như đã trình bày trong phần giới thiệu dữ liệu Từ câu hỏi này về
sau, mọi yêu cầu xử lý đều dựa trên tập dữ liệu con new_DF này.
Input:
Trang 4new DF=d [, c (price , sqft_living15 , floors ,condition , sqft_above , sqft_living)]
Giải thích: Dữ liệu con đặt tên là new_DF bao gồm các biến chính: price,
sqft_living115, floors, condition, sqft_above, sqft_living
(b) Kiểm tra các dữ liệu bị khuyết tật trong tập tin (Các câu lệnh tham khảo:
is.na(), which(), apply()) Nếu có dữ liệu bị khuyết tật, hãy đề xuất phương
pháp thay thế cho những dữ liệu bị khuyết tật này
Input:
apply (is na(new DF), 2 , which)
colSums (is na (new DF))
Trang 5+ Phương pháp 1: Delete(xóa): phương pháp này được sử dụng khi số các giá trị
apply (is na(new DF), 2 , which)
Output: “interger(0)”: không có giá trị nào bị khuyết tật.
3 Làm rõ dữ liệu (Data visualization)
(a) Chuyển đổi các biến price, sqft_living15, sqft_above, sqft_living lần lượt
thành log(price), log(sqft_living15), log(sqft_above), log(sqft_living) Từ đây
mọi sự tính toán với các biến trên được hiểu là đã qua đổi biến dạng log
Input:
new DF[,1]=log 10(new DF[,1])
new DF[,2]=log 10(new DF[,2])
new DF[,5]=log 10(new DF[,5 ])
Trang 6Output:
Giải thích:
- Lấy dữ liệu từ tập con new_DF
- Tính trung bình, trung vị, độ lệch chuẩn, giá trị lớn nhất, nhỏ nhất của các biến price, sqft_living15, sqft_above, sqft_living.
- Dùng lệnh data.frame để đưa kết quả vừa tính được về dạng bảng và xuất
mean = apply(new_DF[, c(1,2,5,6)], 2, mean)
median = apply(new_DF[, c(1,2,5,6)], 2, median)
sd = apply(new_DF[, c(1,2,5,6)], 2, sd)
max = apply(new_DF[, c(1,2,5,6)], 2, max)
min = apply(new_DF[, c(1,2,5,6)], 2, min)
descriptive=data.frame(mean,median,sd,max,min)
descriptive
Trang 8Nhận xét: Giá nhà tập trung nhiều nhất trong khoảng 5.4 – 5.9 Đồ thị có dạng phân
Trang 9Nhận xét:
- Ta nhận thấy đối với biểu đồ hộp ô vuông càng nhỏ thì sự phân tán càng ít,
đường màu đen là đường trung vị
- Biểu đồ của biến price theo biến floors và condition có nhiều ngoại lai (e) Dùng lệnh pairs vẽ các phân phối của iến price lần lượt theo các biến sqft_living15, sqft_above, và sqft living.
Input:
Trang 10pairs( price sqft living 15 , main=pairs of house price for sqft_living15 , data=new DF)
pairs( price sqft above , main=pairs of house price for sqft_above , data=new DF)
pairs( price sqft living , main=pairs of house price for sqft_living , data=new DF)
Output:
Trang 11Nhận xét: các biểu đồ phân bố cho ta thấy có quan hệ tuyến tính đồng biến giữa biến
price và các biến sqft_living15, sqft_above, sqft_living Khi các biến sqft_living15,sqft_above, sqft_living tăng thì biến price cũng tăng theo
4 Xây dựng các mô hình hồi quy tuyến tính (Fitting linear regression models): 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
(a) Xét mô hình hồi quy tuyến tính bao gồm biến price là một biến phụ thuộc, và tất cả các biến còn lại đều là biến độc lập Hãy dùng lệnh lm() để thực thi mô hình hồi quy tuyến tính bội.
Input:
new DF $ floors=as factor (new DF $ floors)
new DF $ condition=as factor (new DF $ condition)
M 1=lm( price sqft living 15+floors +condition+sqft above+sqft living , data=new DF)
summary(M 1)
Output:
Trang 12Giải thích:
- Chuyển 2 biến floors và condition thành 2 nhân tố bằng lệnh as.factor.
- Xây dựng mô hình M1 thể hiện sự phụ thuộc của biến price với tất cả các
biến các lạ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%
Đặt giả thuyết:
- Ho: hệ số hồi quy không có ý nghĩa thống kê
- H´: hệ số hồi quy có ý nghĩa thống kê
- Pr¿ > mức ý nghĩa α → chấp nhận giả thiết H, tức là hệ số hồi quy ứng vớibiến phụ thuộc không có ý nghĩa thống kê, ta sẽ loại biến phụ thuộc đó rakhỏi mô hình
- Ngược lại, Pr¿ < mức ý nghĩa α → bác bỏ giả thiết H, chấp nhận giả thiết
´
H ,tức là hệ số hồi quy ứng với biến phụ thuộc có ý nghĩa thống kê
(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 MH1 chứa tất cả các biến còn lại là biến độc lập.
• mô hình MH2 là loại bỏ biến condition.
Hãy dùng lệnhh anova() để đề xuất mô hình hồi quy hợp lí hơn
Input:
Trang 13M 2=lm( price sqft living 15+floors+sqft above+sqft living , data=new DF)
summary(M 2)
Output:
Giải thích
- Xây dựng mô hình M2 từ M1 và bỏ đi biến condition.
(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à
Input:
anova(M1,M2)
Output:
Trang 14Nhận xét:
- Đặt giả thuyết:
+ Ho: Hai mô hình tuyến tính như nhau
+ H´: Hai mô hình tuyến tính khác nhau
- Pr (¿F) = 2.2e-16 < α = 0.05 nên bác bỏ giả thuyết Ho, chấp nhận giả thuyết
´
H
2 mô hình tuyến tính khác nhau
- Ta thấy RSS (Residual sum of squared: tổng bình phương giữa độ lệch thực
tế và dự đoán) của M1 là 553.32 < M2 là 562.49 nên M1 hợp lý hơn M2
Mô hình hồi quy tuyến tính từ M1:
Y(price) = 2.308027 + 0.462153 X1(sqft_living15) + 0.078713 X2(floors1.5) + 0.029366 X3(floors2) + 0.162118 X4(floors2.5) + 0.165894 X5(floors3) + 0.215827 X6(floors3.5) + 0.070449 X7(condition3) + 0.090356 X8(condition4) + 0.144105 X9(condition5) -
0.142451 X10(sqft_above) + 0.670249 X11(sqft_living)
(e) Từ mô hình hồi quy mà bạn chọn ở câu (c) hãy dùng lệnh plot() để vẽ đồ thị biểu thị sai số hồi quy (residuals) và giá trị dự báo (fitted values) Nêu ý nghĩa và nhận xét đồ thị.
Input:
plot(M1,which = 1)
Output:
Trang 15Nhận xét: phần lớn các điểm tập trung trong khoản từ 5.4 – 5.9
x2: sqft_living15 = max(sqft_living15), sqft_above = max(sqft_above),
sqft_living = max(sqft_living), floor = 2, condition = 3
So sánh khoảng tin cậy cho 2 giá trị dự báo này
Trang 16Nhận xét: với mức tin cậy 95%, ta thấy độ dài khoảng tin cậy x1= 0.6277745 < x2
=0.6280780 nên với tập dữ liệu x1 ta thu được kết quả dự đoán chính xác hơn x2
Bài tập 2:
Tập tin “diem_so.csv” chứa thông tin về điểm toán của các em học sinh trung học
thuộc hai trường học ở Bồ Đào Nha Các thuộc tính dữ liệu bao gồm điểm học sinh,nơi cư trú, và một số hoạt động xã hội khác Dữ liệu được thu nhập bằng cách sử dụngbáo cáo của các trường và các kết quả khảo sát sinh viên Dữ liệu gốc được cung cấptại: https://archive.ics.uci.edu/ml/datasets//student+performance
Các biến chính trong bộ dữ liệu:
Trang 17 G1: Điểm thi học kì 1.
G2: Điểm thi học kì 2.
G3: Điểm cuối khóa.
studytime: Thời gian tự học trên tuần (1 – ít hơn 2 giờ, 2 – từ 2 đến 5 giờ, 3 –
từ 5 đến 10 giờ, hay 4 – lớn hơn 10 giờ)
failures: Số lần không qua môn (1,2,3 hoặc 4 chỉ nhiều hơn hoặc bằng 4 lần).
absences: Số lần nghỉ học.
higher: Có muốn học cao hơn hay không (yes: có, no: không).
age: Tuổi của học sinh.
Bài làm
1 Đọc dữ liệu: Hãy dùng lệnh read.csv() để đọc tệp tin.
Input:
setwd(/User /trongnghia/ Documents/ XSTK / BTL2”)
diem_so = read.csv( diem so csv , header = TRUE)
Giải thích:
- Tìm thư mục gốc Working Directory hiện hành chứa file dữ liệu bằng lệnhsetwd()
- Đọc dữ liệu “diem_so.csv” bằng lệnh read.csv()
- Lệnh “header = TRUE”: giữ lại tên các biến số
Output:
Trang 182 Làm sạch dữ liệu (Data cleaning)
(a) Hãy trích ra một dữ liệu con đặt tên là new_DF chỉ bao gồm các biến chính mà ta
quan tâm như đã trình bày trong phần giới thiệu dữ liệu Từ câu hỏi này về sau, mọi
yêu cầu xử lý đều dựa trên tập dữ liệu con new_DF này.
Input:
new_DF=diem_so[,c(G 1 ,G 2 ,G 3 , studytime , failures , absences ,higher , age )]
Giải thích: Dữ liệu con đặt tên là new_DF bao gồm các biến chính: G1, G2, G3,
studytime, failures, absences, higher, age
(b) Kiểm tra các dữ liệu bị khuyết tật trong tập tin (Các câu lệnh tham khảo: is.na(), which(), apply()) Nếu có dữ liệu bị khuyết tật, hãy đề xuất phương pháp thay thế cho
những dữ liệu bị khuyết tật này
Trang 19new_DF=na.omit(new_DF)
Theo kết quả thu được, ta nhận thấy có năm giá trị khuyết tật tại biến G2 do đó ta cần
sử lý dựa trên các phương pháp sau:
+ Phương pháp 1: Delete(xóa): phương pháp này được sử dụng khi xác xuất thiếu biến
là như nhau cho tất cả các quan sát
+ Phương pháp 2: Mean/ Mode/ Median Imputation: là một phương pháp để điền vàocác giá trị còn thiếu với các ước tính nhất định
Ta sẽ chọn phương pháp xóa các quan sát mà bất kì biến nào của nó bị khiếm khuyết
Input:
Output: “interger(0)”: không có giá trị nào bị
3 Làm rõ dữ liệu (Data visualization)
(a) Đối với các biến liên tục, hãy tính các giá trị thống kê mô tả bao gồm: trung bình,
trung vị, độ lệch chuẩn, giá trị lớn nhất và giá trị nhỏ nhất Xuất kết quả dưới dạngbảng (Hàm gợi ý: mean(), median(), sd(), min(), max(), apply(), as.data.frame(),rownames())
Trang 20Giải thích:
- Lấy dữ liệu từ tập con new_DF.
- Tính trung bình, trung vị, độ lệch chuẩn, giá trị lớn nhất, giá trị nhỏ nhất của các biến liên tục G1, G2, G3, studytime và age.
A = cbind(mean,median,sd,max,min)
as.data.frame(A)
Giải thích:
- Tạo matrix thể hiện các giá trị thống kê mô tả cho các biến liên tục
- Chuyển matrix thành dạng bảng dữ liệu.
Output:
> attach(new_DF)
> mean=apply(new_DF[,c( G1 , G2 , G3 , age )],2,mean)
> median=apply(new_DF[,c(G 1 ,G 2 ,G 3 , age )],2,median)
> sd=apply(new_DF[,c(G 1 ,G 2 ,G 3 , age )],2,sd)
> max=apply(new_DF[,c( G1 , G2 , G3 , age )],2,max)
> min=apply(new_DF[,c(G 1, G 2, G 3 , age )],2,min)
Trang 21(b) Đối với các biến phân loại, hãy lập một bảng thống kê số lượng cho từng chủng
Trang 22hist(new_DF$G3,xlab = G3 ,main = Histogram of G3 ,labels = T, ylim =c(0, 10 0))
Giải thích: Vẽ đồ thị histogram (biểu đồ phân phối tần suất) cho biến G3.
Output:
Nhận xét: Theo biểu đồ, ta nhận thấy điểm cuối khóa G3 của sinh viên phần lớn tập
trung ở mức 6-16 điểm, cao nhất ở mức 8-10 điểm và thấp nhất ở mức 2-4 điểm Đồthị có dạng khá giống phân phối chuẩn
(d) Hãy dùng hàm boxplot() vẽ phân phối của biến G3 cho từng nhóm phân loại của
biến studytime, failures, và higher
Input:
boxplot(G3~studytime,main= Boxplot of G 3 for each category of studytime )
boxplot(G3~ failures ,main= Boxplot of G3 for each category of failures )
boxplot(G3~ higher ,main= Boxplot of G 3 for each category of higher )
Giải thích: Vẽ biểu đồ Boxplot của biến G3 cho từng nhóm phân loại của biến
studytime, failures và higher
Trang 23Output:
Trang 24(e) Dùng lệnh pairs() vẽ các phân phối của biến G3 lần lượt theo các biến G1,G2, age
và absences
Input:
pairs(G3~G1, main= Pair of G3 for each category of G 1 )
pairs(G3~G2, main= Pair of G3 for each category of G 2 )
pairs(G3~age , main= Pair of G 3 for each category of age )
pairs(G3~absences, main= Pair of G3 for each category of absences )
Giải thích: Vẽ các phân phối của biến G3 theo biến G1, G2, age, absences.
Output:
Trang 25Nhận xét: Nhìn vào biểu đồ phân tán của biến G3 theo G1, G2, age và absences, ta
nhận thấy:
Trang 26- Các biến G1, G2 có quan hệ tuyến tính với biến G3.
- Các biến age, absences không có quan hệ tuyến tính với biến G3.
4 Xây dựng các mô hình hồi quy tuyến tính (Fitting linear regression models):
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điểm cuối khóa môn Toán của các em học sinh
(a) Xét mô hình hồi quy tuyến tính bao gồm biến G3 là một biến phụ thuộc, và tất cả
các biến còn lại đều là biến độc lập Hãy dùng lệnh lm() để thực thi mô hình hồi quytuyến tính bội
Xét mô hình:
G1: biến liên tục
G2: biến liên tục
G3: biến liên tục
studytime: biến phân loại
failures: biến phân loại
absences: biến liên tục
higher: biến phân loại
age: biến liên tục
- Thay biến studytime thành biến nhân tố
- Thay biến failures thành biến nhân tố
- Thay biến failures thành biến nhân tố
Trang 27M1 = lm(G3~G1+G2+studytime+failures+absences+higher+age ,new_DF )
summary(M1)
Output:
(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 các mức tin cậy 5% và 1%?
Giả thiết:
- H: Hệ số hồi quy không có ý nghĩa thống kê
- H´: Hệ số hồi quy có ý nghĩa thống kê
Phương pháp kiểm định bằng Pvalue=¿:
- Pr¿ > mức ý nghĩa α → chấp nhận giả thiết H, tức là hệ số hồi quy ứng vớibiến phụ thuộc không có ý nghĩa thống kê, ta sẽ loại biến phụ thuộc đó rakhỏi mô hình
- Ngược lại, Pr¿ < mức ý nghĩa α → bác bỏ giả thiết H, chấp nhận giả thiết H ,´
tức là hệ số hồi quy ứng với biến phụ thuộc có ý nghĩa thống kê
Với mức tin cậy α=5 %:
Trang 28- Pr(age) = 0,091 > 0,05 → chấp nhận giả thiết H → hệ số hồi quy không có ýnghĩa thống kê → loại biến age.
- Pr(higheryes) = 0,5257 > 0,05 →chấp nhận giả thiết H → hệ số hồi quykhông có ý nghĩa thống kê → loại biến age
- Tương tự đối với các biến còn lại, kết quả, ta sẽ loại bỏ biến studytime2,
studytime3, failures2, failures3, higheryes, age
Với mức tin cậy α=1 %:
- Xét các biến tương tự như đối với mức tin cậy α=5 %, kết quả, ta sẽ loại bỏbiến studytime2, studytime3, studytime4, failures2, failures3, higheryes, age.(c) Xét 3 mô hình tuyến tính cùng bao gồm biến G3 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 higher từ M1
- Mô hình M3 là loại bỏ biến failures từ M2
Hãy dùng lệnh anova() để đề xuất mô hình hồi quy hợp lý hơn
Trang 30Input:
anova(M1,M2)
Output:
Nhận xét:
- Giả thiết H0: Mô hình M1 và M2 như nhau
- Giả thiết H1: Mô hình M1 và M2 khác nhau
- Ta nhận thấy Pr (¿F) = 0,5386 > 0,05 (mức ý nghĩa α=5 %) → chấp nhận giảthiết H0→ mô hình M1 và M2 như nhau
- Như đã biết ở trên, biến Higher của mô hình M1 không có ý nghĩa thống kênên khi bỏ nó đi ta được mô hình M2 chính xác hơn
Chọn mô hình M2
Trang 31Input:
anova(M 2,M3 )
Output:
Nhận xét:
- Giả thiết H0: Mô hình M2 và M3 như nhau
- Giả thiết H´: Mô hình M2 và M3 khác nhau
- Ta nhận thấy Pr (¿F) = 0,01696 < 0,05 (mức ý nghĩa α=5 %)
→ Bác bỏ giả thuyết H0, chấp nhận giả thuyết H´
→Hai mô hình M2 và M3 khác nhau
- Do mô hình M2 và M3 khác nhau nên ta phải cân nhắc việc lựa chọn môhình nào tốt hơn giữa M2 và M3, ta nên thực hiện vẽ biểu đồ sai số hồi quy
và giá trị dự báo của mô hình M2 và M3
Input:
plot(M2, which = 1)
Giải thích: vẽ đồ thị sai số hồi quy và sai số dự báo của mô hình M2.
Output: