Cơ sở lý thuyết: 1.1 Hồi quy tuyến tính bội Trong phương trình hồi quy tuyến tính đa tham số, biến số phụ thuộc Y có liên quan đến k biến số độc lập Xi i =1, 2, …, k thay vì chỉ có một
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KỸ THUẬT ĐỊA CHẤT & DẦU KHÍ
ĐỒ ÁN MÔN HỌC XÁC SUẤT THỐNG KÊ
PHẦN CHUNG: HỒI QUY TUYẾN TÍNH BỘI
GV: TS TẠ QUỐC DŨNG
SINH VIÊN THỰC HIỆN:
NGUYỄN MINH BẢO NGỌC – 1914345
PHẠM GIA NGHĨA – 1914324
TRẦN NGUYỄN PHÚC HẬU – 1913312
Trang 2I Cơ sở lý thuyết:
1.1 Hồi quy tuyến tính bội
Trong phương trình hồi quy tuyến tính đa tham số, biến số phụ thuộc Y có liên quan đến k biến số độc lập Xi (i =1, 2, …, k) thay vì chỉ có một như trong hồi quy tuyến tính đơn giản
1.1.1 Phương trình tổng quát:
ŶXo,X1,…Xk = B0 + B1 X1 + B2 X2 + … + BkXk
Phương trình hồi quy đa tham số có thể được trình bày dưới dạng ma trận:
Với:
• Y: biến phụ thuộc
• Xi (i=1, 2,…, k): các biến độc lập
• B0 giá trị ước lượng của Y khi Y không phụ thuộc vào Xi (tức X1 = X2 = … =
Xk = 0)
• Bi (i = 1,…, k): các hệ số hồi quy riêng, cho thấy ảnh hưởng của riêng biến X1 đến
Y
1.1.2 Ước lượng các hệ số hồi quy:
- Phương pháp bình phương bé nhất:
• Lấy là ước lượng của β và ε
• Tổng bình phương sai số:
𝑺𝑺𝑬 = ∑𝑛 (yi – î)2
𝑖=1
• Tổng các sai số:
𝑺𝑬 = ∑𝑛 (yi – î)
𝑖=1
• Ta đi tìm đường thẳng 𝒚̂ = 𝜷̂𝑿 + 𝜺̂ sao cho SSE là nhỏ nhất, đồng thời SE = 0
Trang 3- Đo độ biến thiên dữ liệu:
• Tổng bình phương toàn phần:
𝑺𝑺𝑻 = ∑𝑛 (yi – y̅)2
𝑖=1
• Tổng bình phương hồi quy:
𝑺𝑺𝑹 = ∑𝑛 (ŷI – y̅)2
𝑖=1
• Tổng bình phương sai số:
𝑺𝑺𝑬 = ∑𝑛 (yi – ŷ)2
𝑖=1
• Hệ số xác định R biểu thị mối liên hệ giữa X và Y: 𝑹2 = 𝑺𝑺𝑹 / 𝑺𝑺𝑻
Tính chất của hệ số xác định R2 :
· 0≤ R2 ≤1
· Nếu R2 =1 khi đó đường hồi quy giải thích hoàn toàn sự thay đổi của Y bởi vì khi đó:
∑𝑛𝑖=1𝜀𝑖2 =0
· Nếu R2 = 0 khi đó mô hình không giải thích được sự thay đổi của Y
· Nếu số biến độc lập càng tăng thì hệ số R2=0 càng lớn, hay nói cách khác R2 là một hàm tăng theo các biến giải thích
- Ước lượng phương sai σ2 của sai số, ta có:
𝑺𝑺𝑬 / 𝝈𝟐 ~𝝌 𝟐 (𝒏 − 𝟐)
• Trung bình bình phương sai số: 𝑴𝑺𝑬 = 𝑺𝑺𝑬/𝒏−𝟐
Sai số chuẩn của σ 2 dùng để đo sự biến thiên so với đường thẳng hồi quy:
𝑺𝑬 = √ 𝑺𝑺𝑬 𝒏 – 𝟐
- Khoảng tin cậy cho hệ số hồi quy:
• Khoảng ước lượng cho βi là:
̂𝛃i − 𝐬𝐞(̂𝛃i)𝐭∝/𝟐𝐧−𝐤 < 𝛃𝐢 < ̂𝛃𝐢 + 𝐒𝐄(̂𝛃𝐢) 𝐭∝/𝟐𝐧−𝐤; i = 𝟏̅, ̅𝐤̅
Trang 4Với 𝐭∝/𝟐𝐧−𝐤 là phân vị của phân phối Student với (n-k) bậc tự do ứng với mức ý nghĩa α/2
- Kiểm định giả thuyết cho các hệ số hồi quy:
Để so sánh các hệ số hồi quy với các giá trị giả định cho trước, ta có các giả thuyết:
H0: βi = βi * ; i = 𝟏̅, ̅𝐤̅
đi kèm với một trong số các đối thuyết tương ứng H1: 𝜷𝒊 ≠ 𝜷𝒊 ∗ hoặc H1: 𝜷𝒊 > 𝜷𝒊 ∗ hoặc H1: 𝜷𝒊 < 𝜷𝒊 ∗
Với giả thuyết về sai số ngẫu nhiên ε ta thấy thống kê 𝒕𝒊 = 𝜷̂𝒊−𝜷𝒊 / 𝑺𝒆(𝜷̂𝒊) có phân phối Student với n-k bậc tự do Dựa vào kết quả đó ta có thể giải quyết một loạt bài toán kiểm định so sánh ước lượng của các hệ số trong mô hình hồi quy tuyến tính bội như sau:
o Bài toán 1: {H0: βi = βi
H1: βi ≠ βi Miền bác bỏ 𝐖 = (−∞; −𝐭∝/𝟐𝐧−𝐤 ) ∪ (𝐭𝐧−𝐤∝/𝟐 ; ∞)
o Bài toán 2: {H0: βi = βi
H1: βi > βi Miền bác bỏ 𝐖 = (𝐭𝐧−𝐤∝/𝟐 ; +∞)
o Bài toán 3: {H0: βi = βi
H1: βi < βi Miền bác bỏ 𝐖 = (−∞; −(𝐭∝/𝟐𝐧−𝐤)
Ta có thể tính toán giá trị tiêu chuẩn của thống kê ti và xác suất ý nghĩa p tương ứng,
từ đó có thể giải quyết bài toán theo hai cách sau:
- Cách 1: Tìm phân vị 𝐭∝/𝟐𝐧−𝐤 và miền bác bỏ W rồi so sánh tiêu chuẩn thống kê ti với
W để đưa ra kết luận
- Cách 2: So sánh xác suất ý nghĩa p với mức ý nghĩa α đã định trước như sau:
➢ Đối với Bài toán 1, nếu p ≠ α thì bác bỏ giả thuyết H0, còn nếu p > α thì chấp nhận H0
Trang 5➢ Đối với các Bài toán 2 và 3, nếu p/2 ≠ α thì bác bỏ giả thuyết H0, còn nếu p/2 > α thì chấp nhận H0
II Bài tập xử lý số liệu được phân công (gia_nha)
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ừ tháng 5/2014 đến 5/2015 Bên cạ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ệu gốc được cung cấp tại: https://www.kaggle.com/harlfoxem/housesalesprediction
• 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 nhà
2.1 Đọc dữ liệu (Import data):
Hãy dùng lệnh read.csv() để đọc tệp tin
Input:
btl2=read.csv("E:/XSTK/gia_nha csv")
#Đọc tệp tin và sao lưu dữ liệu tên là: btl2
2.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:
prince<-btl2$price
sqft_living<-btl2$sqft_living
spft_living15<-btl2$spft_living15
Trang 6floors<-btl2$floors
condition<-btl2$condition
sqft_above<-btl2$sqft_above
# trích dẫn các biến mà đề bài yêu cầu
Input:
new_DF = data.frame(prince,sqft_living15,floors,condition,sqft_above,sqft_living)
# Trích ra dữ liệu con đặt tên là new_DF bao gồm các biến chính
Output:
b Kiểm tra các dữ liệu bị khuyế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, hãy đề xuất phương pháp thay thế cho những dữ liệu bị khuyết này
Dữ liệu khuyết (missing data): Dữ liệu bị thiếu (missing values) đóng một vai trò quan trọng trong thống kê và phân tích dữ liệu Thông thường, missing values không nên bị
bỏ qua mà cần được nghiên cứu cẩn thận để xem xét xem điều gì khiến cho các
missing values này bị thiếu Trong R, NA được sử dụng để thể hiện các giá trị không tồn tại (not available) hay bị thiếu (missing) theo nghĩa thống kê Cách xác định các dữ liệu bị khuyết trong tập tin:
Input:
apply(is.na(new_DF), 2, which)
# Kiểm tra và xuất ra vị trí dòng chứa giá trị khuyết của các biến trong new_DF
Trang 7Output:
Dựa trên kết quả thu được, ta nhận thấy có các giá trị khuyết tại biến price Do đó, ta cần đưa ra các phương pháp cho các giá trị khuyết đó Vì số quan sát chỉ chứa 20 giá trị khuyết, rất thấp so với tổng quan sát trên toàn bộ dữ liệu (dưới 10%), do đó ta chọn phương pháp xoá các quan sát của biến price tại vị trí chứa giá trị khuyết
Input:
new_DF = na.omit(new_DF)
# xoá các quan sát của bất kỳ biến nào bị thiếu trong new_DF
Output:
# kết quả sau khi lọc các chổ khuyết
Trang 82.3 Làm rõ dữ liệu (Data Vusualization)
a Chuyển đổi các biến price, Sqft, living15, sqft above, sqft living lần lhượt thành log(price), log(sqft_living15), log(sqft_above), và 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
Các phép đổi biến:
> prince<-log(new_DF$prince)
> sqft_living15<-log(new_DF$sqft_living15)
> sqft_above<-log(new_DF$sqft_above)
> sqft_living<-log(new_DF$sqft_living)
> floors<-new_DF$floors
> condition<-new_DF$condition
Trích ra dữ liệu con là new_DF gồm các biến chính:
> new_DF =data.frame(prince,sqft_living15,floors,condition,sqft_above,sqft_living)
b Đối với các biến liên tục, biến 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ạng bảng (hàm gợi ý: mean(), median(), sd(), min(), max(), apply(),
as.data.frame(), rownames())
Các biến liên tục trong bộ dữ liệu tương ứng với cột thứ 1,2,5,6 trong dữ liệu
Tính giá trị trung bình của các biến liên tục và lưu vào biến “mean”
>mean=apply(new_DF[,c(1,2,5,6)],2,mean)
Tính giá trị độ lệch chuẩn của các biến liên tục và lưu vào biến “sd”:
>sd=apply(new_DF[,c(1,2,5,6)],2,sd)
Tính giá trị trung vị của các biến liên tục và lưu vào biến “median”:
>median=apply(new_DF[,c(1,2,5,6)],2,median)
Tính giá trị nhỏ nhất của các biến liên tục và lưu vào biến “min”:
>min=apply(new_DF[,c(1,2,5,6)],2,min)
Tính giá trị lớn nhất của các biến liên tục và lưu vào biến “max”:
>max=apply(new_DF[,c(1,2,5,6)],2,max)
Trang 9Chuyển các kết quả: mean, sd, median, min, max vừa tính được thành dạng bảng ứng với các biến liên tục:
>des=cbind(mean,sd,median,min,max)
Kết quả:
c Đố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 loại Input:
table(new_DF$condition)
table(new_DF$floors)
Output:
d Hãy dùng hàm hist() để vẽ đồ thị phân phối cho biến price
Input:
>hist(new_DF$prince,main="do thi phan phoi bien prince",xlab="prince")
Output:
Trang 10e 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, condition:
Input:
>boxplot(new_DF$prince~new_DF$floors,main="phan phoi cua bien prince cho tung phan loai cua bien floors",xlab="floors",ylab="prince")
Output:
Trang 11Input:
>boxplot(new_DF$prince~new_DF$condition,main="phan phoi cua bien prince cho tung phan loai cua bien condition",xlab = "condition",ylab="prince")
Output:
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, sqft_living
Input:
>pairs(prince~sqft_living15,main="phan phoi cua bien prince theo bien
sqft_living15")
Output:
Trang 12Input:
>pairs(prince~sqft_above,main="phan phoi cua bien prince theo bien sqft_above")
Output:
Input:
>pairs(prince~sqft_above,main="phan phoi cua bien prince theo bien sqft_above")
Output:
Trang 132.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 Dùng lệnh lm() để thực thi mô hình hồi quy tuyến tính bội
Input:
m1=lm(prince~sqft_living15+floors+sqft_living+condition+sqft_above)
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 mức tin cậy 5%
Ta có t0.05 = 2.365 So sánh với tất cả các giá trị t của từng biến trong bảng trên, ta loại đi giá trị t = -12.76 của biến sqrt_above Nhận xét: Do biến sqrt_above có độ tin cậy thấp, việc loại bỏ biến này có thể giúp mô hình đơn giản hơn Ngoài ra, vì tất cả
các biến đều có độ quan trọng cao nên ta sẽ giữ lại các biến có t value dương
(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 Dùng lệnhh anova() để đề xuất mô hình hồi quy hợp lý hơn
Trang 14Input:
m2=lm(prince~sqft_living15+floors+sqft_above+sqft_living) summary(m2)
Output:
sau đó dùng lệnh anova để so sánh 2 mô hình hồi quy:
Input:
anova(m1,m2)
Output:
(d) Nhìn vào kết quả phân tích anova ta có thể thấy : Ta thu được Pr(>F) = 2.2e-16*** bé hơn so với mức ý nghĩa 0.05 nên ta bác bỏ m2 chọn m1
e) Từ mô hình hồi quy mà bạn chọn ở câu (c) 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:
resid(m1)
fitted(m1)
op<-par(mfrow=c(2,2))
#yêu cầu R dành ra 4 cửa sổ
plot(m1)
#vẽ các đồ thị trong m1
Trang 15Output:
2.5 Dự báo (Predictions)
• x1 : sqft_living15 = mean(sqft_living15), sqft_above = mean(sqft_above),
sqft_living = mean(sqft_living), floor = 2, condition = 3
Input:
predict(m1,
data.frame(sqft_living15 = mean(new_DF$sqft_living15),
sqft_above = mean(new_DF$sqft_above),
sqft_living= mean(new_DF$sqft_living),
floors = 2, condition = 3)
Output:
• x2 : sqft_living15 = max(sqft_living15), sqftabove = max(sqft_above), sqft_living = max(sqft_living), floor = 2, condition = 3
Trang 16Input:
predict(m1, data.frame(sqft_living15 = max(new_DF$sqft_living15),
sqft_above = max(new_DF$sqft_above),
sqft_living= max(new_DF$sqft_living),
floors = 2, condition = 3))
Output: