Cơ sở lý thuyết
1 Mô hình hồi quy tuyến tính biến và phân tích tương quan:
1.1 Mô hình hồi quy tuyến tính đơn:
Phương trình hồi quy tuyến tính đơn biến tổng thể:
Xi và Yi là các giá trị của biến độc lập và biến phụ thuộc tại cặp quan sát thứ i b0: hệ số tung độ gốc (hệ số chặn) b1: hệ số độ dốc (hệ số góc) ei: yếu tố ngẫu nhiên (chênh lệch giữa giá trị Yi thực tế và giá trị E(Y|Xi) với E(Y|Xi) = b0 + b1Xi
1.1.1 Ý nghĩa củ a h ệ s ố h ồ i quy: b 1 là hệ số độ dốc của đường hồi quy tổng thể, đo lường lượng thay đổi trung bình trong biến phụ thuộc Y, cho mỗi đơn vị thay đổi của X b 0 là hệ số tung độ gốc (hệ số chặn hoặc hệ số tự do) cho biết giá trị trung bình của Y khi X bằng 0
Phương trình hồi quy tuyến tính mẫu đực sử dụng để ước lượng mô hình hồi quy tổng thể E(Y|Xi) = b0 + b1Xi có công thức:
𝑌̂ 𝑖 : giá trị ước lượng cho giá trị của biến Y ở quan sát thứ i
Xi: giá trị của X ở quan sát thứ i
Công thức tính giá trị của các hệ số hồi quy mẫu:
1.1.2 Đo lườ ng bi ế n thiên b ằ ng h ệ s ố xác đị nh: Để khảo sát khả năng sử dụng biến độc lập để dự đoán về biến phụ thuộc cần phải đo lường một số sự biến thiên trong mô hình
Tổng biến thiên của biến phụ thuộc (SST) được tính bằng cách lấy tổng chênh lệch bình phương của các giá trị Yi xung quanh giá trị trung bình của chúng
Tổng biến thiên được chia làm 2 phần: biến thiên hồi quy (SSR) và biến thiên của phần dư (SSE)
+ SSR thể hiện sự khác biệt giữa giá trị do đường hồi quy tính toán được 𝑌̂ 𝑖 và 𝑌̅ SSE đại diện cho thành phần biến thiên trong Y mà không được giải thích bởi hồi quy, được hình thành dựa trên chênh lệch giữa Yj và 𝑌̂ 𝑖
+ SST là chênh lệch giữa mỗi giá trị quan sát Yi và 𝑌̅
Tỉ lệ giữa SSR và SST là hệ số biến thiên (R 2 ) dùng để đánh giá mô hình hồi quy
1.1.3 Sai s ố chu ẩ n c ủa ước lượ ng: Độ lệch chuẩn xung quanh đường hồi quy được gọi là sai số chuẩn của hồi quy (kí hiệu sY/X) được tính bằng cách lấy tổng của các chênh lệch bình phương chia cho bậc tự do rồi lấy căn bậc hai kết quả tìm được
𝑛 − 2Bình phương sY/X ta được s2Y/X là ước lượng tốt cho s 2 căn cứ trên (n-2) bậc tự do
Chỉ số Y/X dùng để chỉ rõ s2Y/X là ước lượng cho phương sai của Y khi có sự hồi quy
1.1.4 Suy di ễ n th ố ng kê v ề h ệ s ố độ d ố c Địng lí Gauss – Markov: Trong các ước lượng tuyến tính không chệch cho hệ số hồi quy tổng thể, ước lượng tìm được bằng phương pháp bình phương bé nhất có phương sai cực tiểu
Giả sử Y tuân theo phân phối chuẩn và các tham số b0 và b1 cũng tuân theo phân phối chuẩn:
Khoảng tin cậy 100x(1-a)% cho hệ số độ dốc b1 có dạng (b1 ± t(n-2; /2) х sb1)
Kiểm định ý nghĩa của hệ số độ dốc có thể tiến hành với giả thiết bất kì về giá trị của b1 (giả dụ H0: b1=b*)
+ Chuẩn hóa b1 theo công thức: Z = (b-b1)/sb1
+ Do ta đã dùng ước lượng trên mẫu 𝑠 𝑏 2 1 thay cho phương sai thực trên tổng thể mà ta chưa biết nên b1 không có phân phối chuẩn mà sẽ có phân phối student với (n-2) bậc tự do
𝑠 𝑏 1 Trong đó: b1 là hệ số hồi quy mẫu b* là giá trị của hệ số hồi quy tổng thể được giả định sb1 là ước lượng của sai số chuẩn của hệ số độ dốc
+ Tiến hành so sánh giá trị t này với giá trị t tra bảng theo quy tắc nếu |t| < t (n-2; /2) chưa thể bác bỏ giả thiết H0
+ Với mô hình hồi quy đơn biến thì việc kiểm định thông tin về hệ số độ dốc được tiến hành với giả thiết b1=0
1.1.5 Phân tích ph ần dư:
Kiểm định tính đúng đắn của mô hình hồi quy tuyến tính bằng cách vẽ đồ thị mà phần dư được đặt trên trục đứng và biến độc lập X được đặt ở trục ngang + Đồ thị ei theo X không thể hiện một hình dạng rõ ràng nào của các chấm phân tán thì mô hình đúng đắn
+ Đồ thị ei theo X có một dạng liên kết nào đó thì mô hình không đúng đắn Kiểm tra sự vi phạm giả định phương sai bằng nhau bằng:
+ Đồ thị phần dư theo biến độc lập Nếu không có sự khác biệt lớn nào trong sự biến thiên của phần dư tại các giá trị khác nhau của biến X thì mô hình tuyến tính đã xây dựng không vi phạm giả định phương sai bằng nhau
Kiểm tra giả định phân phối chuẩn của phần dư: có thể được đánh giá bằng cách phân tích phần dư Sử dụng đồ thị xác suất chuẩn (Normal probability plot) để xem phần dư có phân phối chuẩn hay xấp xỉ chuẩn hay không
Kiểm định tính độc lập của phần dư bằng cách:
+ Vẽ đồ thị phần dư theo trật tự của các giá trị mà ta thu thập được theo thời gian
+ Kiểm định Durbin-Watson (không đáng tin khi cỡ mẫu t(n-2; /2) thì bác bỏ giả thiết H0 và ngược lại, là mức ý nghĩa đã chọn cho phép kiểm định
Một số vấn đề đáng lưu ý về r:
+ r = 0 cho biết không có mối liên hệ tuyến tính giữa 2 biến chứ chưa có ý nghĩa là 2 biến đó không có mối liên hệ vì chúng có thể liên hệ phi tuyến do đó hệ số tương quan tuyến tính chỉ nên được sử dụng để biểu thị mức độ chặt chẽ của liên hệ tương quan tuyến tính
+ Cần phải cẩn thận xem xét đồng thời hệ số tương quan và cả đồ thị phân tán giữa X và Y bởi vì hệ số tương quan có thể có cùng 1 giá trị trong khi hình dạng của mối liên hệ lại rất khác nhau
Bài tập xử lý số liệu
Đọc dữ liệu (Import data)
Dùng lệnh read.csv() để đọc tệp tin
Input: gia_nha = read.csv("C:/Users/ASUS/Downloads/gia_nha.csv")
# Đọc tệp tin và lưu dữ liệu với tên là gia_nha
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
# Liệt kê tất cả các biến có trong gia_nha
[16] "sqft_above" "sqft_basement" "yr_built"
[22] "long" "sqft_living15" "sqft_lot15"
Input: new_DF = data.frame(gia_nha[,c(6,23,11,14,16,9)])
# Trích ra dữ liệu con đặt tên là new_DF bao gồm các biến chính
Output: price sqft_living15 floors condition sqft_above sqft_living
6 1225000 4760 1 3 3890 5420 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
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
Input: colSums(is.na(new_DF))
# Thống kê số lượng giá trị khuyết trong new_DF
Output: price spft_living15 floors condition sqft_above sqft_living
16 colMeans(is.na(new_DF))
# Tính tỉ lệ giá trị khuyết trong dữ liệu
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 Vậy nên ta cần xử lý các giá trị khuyết đó
Phương pháp xử lí được đề xuất là thay thế giá trị trung bình vào các quan sát của biến price tại vị trí chứa giá trị khuyết
Input: new_DF$price[is.na(new_DF$price)]=mean(new_DF$price,na.rm=T)
# Thay thế các quan sát chứa giá trị khuyết tại biến price bằng giá trị trung bình
Làm rõ dữ liệu
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), 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
Input: new_DF[,c(1,2,5,6)]=log(new_DF[,c(1,2,5,6)])
#Chuyển đối biến price thành log(price), sqft_living15 thành log(sqft_living15), sqft_above thành log(sqft_above), sqft_living thành log(sqft_living)
Output: b) Đố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ạng bảng (Hàm gợi ý: mean(), median(), sd(), min(), max() , apply(), as.data.frame(), rownames())
Input: mean=apply(new_DF[,c(1,2,5,6)],2,mean)
# Tính trung bình của các biến liên tục (price, sqft_living15, sqft_above, sqft_living) và lưu vào biến có tên là mean median=apply(new_DF[,c(1,2,5,6)],2,median)
# Tính trung vị của các biến liên tục (price, sqft_living15, sqft_above, sqft_living) và lưu vào biến có tên là median sd=apply(new_DF[,c(1,2,5,6)],2,sd)
# Tính độ lệch chuẩn của các biến liên tục (price, sqft_living15, sqft_above, sqft_living) và lưu vào biến có tên là sd max=apply(new_DF[,c(1,2,5,6)],2,max)
# Tính giá trị lớn nhất của các biến liên tục (price, sqft_living15, sqft_above, sqft_living) và lưu vào biến có tên là max min=apply(new_DF[,c(1,2,5,6)],2,min)
# Tính giá trị nhỏ nhất của các biến liên tục (price, sqft_living15, sqft_above, sqft_living) và lưu vào biến có tên là min descriptivea.frame(mean,median,sd,max,min) descriptive
# Tạo bảng thể hiện các giá trị thống kê mô tả cho các biến liên tục, lưu vào biến descriptive
Output: mean median sd min max price 13.047981 13.017003 0.5263504 11.225243 15.856731 sqft_living15 7.539440 7.517521 0.3275145 5.988961 8.733916 sqft_above 7.394877 7.352441 0.4276305 5.669881 9.149528 sqft_living 7.550335 7.554859 0.4248069 5.669881 9.513404 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 chủng loại (Hàm gợi ý: table())
Input table(new_DF$floors)
# Tạo bảng thống kê số lượng cho biến floors.
# Tạo bảng thống kê số lượng cho biến conditon.
30 172 14031 5679 1701 d) Hãy dùng hàm hist() để vẽ đồ thị phân phối của biến price
Input: hist(new_DF$price,xlab="price",main="Histogram of price",labels=T)
# Vẽ biểu đồ historgram cho biến price.
Nhận xét: Đồ thị phân phối của biến price có hình dạng phân phối chuẩn Ngoài ra, ta có thể thấy giá nhà tập trung phần lớn ở mức giá từ 12.5$ - 13.5$, phân bố tần số cao nhất ở mức giá 12.5$-13$, phân bố tần số thấp nhất ở mức giá 15.5$ -16$
20 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
Input: boxplot(price~floors,main="Boxplot of price for each category of floor",new_DF)
# Vẽ biểu đồ Boxplot của biến price cho từng nhóm phân loại của biến floors. Output:
• Với nhóm nhà có 1 tầng:
Giá nhà bán ra thị trường cao nhất khoảng 15.5$
Giá nhà bán ra thị trường thấp nhất 11.2$
Có khoảng 25% nhà bán ra thị trường với giá dưới 12.5$
Có khoảng 50% nhà bán ra thị trường với giá dưới 12.9$
Có khoảng 75% nhà bán ra thị trường với giá dưới 13.25$
Phạm vi liên phần tử (IQR) khoảng 0.75$
• Với nhóm nhà có 1.5 tầng:
Giá nhà bán ra thị trường cao nhất khoảng 15.25$
Giá nhà bán ra thị trường thấp nhất khoảng 11.5$
Có khoảng 25% nhà bán ra thị trường với giá dưới 12.85$
Có khoảng 50% nhà bán ra thị trường với giá dưới 13.25$
Có khoảng 75% nhà bán ra thị trường với giá dưới 13.4$ Phạm vi liên phần tử (IQR) khoảng 0.55$
• Với nhóm nhà có 2 tầng:
Giá nhà bán ra thị trường cao nhất khoảng 15.75$
Giá nhà bán ra thị trường thấp nhất khoảng 11.5$
Có khoảng 25% nhà bán ra thị trường với giá dưới 12.9$
Có khoảng 50% nhà bán ra thị trường với giá dưới 13.3$
Có khoảng 75% nhà bán ra thị trường với giá dưới 13.5$ Phạm vi liên phần tử (IQR) khoảng 0.6$
• Với nhóm nhà có 2.5 tầng:
Giá nhà bán ra thị trường cao nhất khoảng 15.85$
Giá nhà bán ra thị trường thấp nhất khoảng 12.5$
Có khoảng 25% nhà bán ra thị trường với giá dưới 13.25$
Có khoảng 50% nhà bán ra thị trường với giá dưới 13.5$
Có khoảng 75% nhà bán ra thị trường với giá dưới 14.15$ Phạm vi liên phần tử (IQR) khoảng 0.9
• Với nhóm nhà có 3 tầng:
Giá nhà bán ra thị trường cao nhất khoảng 14.8$
Giá nhà bán ra thị trường thấp nhất khoảng 12.4$
Có khoảng 25% nhà bán ra thị trường với giá dưới 12.9$
Có khoảng 50% nhà bán ra thị trường với giá dưới 13.1$
Có khoảng 75% nhà bán ra thị trường với giá dưới 13.3$ Phạm vi liên phần tử (IQR) khoảng 0.4$
• Với nhóm nhà có 3.5 tầng:
Giá nhà bán ra thị trường cao nhất khoảng 14.85$
Giá nhà bán ra thị trường thấp nhất khoảng 12.9$
Có khoảng 25% nhà bán ra thị trường với giá dưới 13.1$
Có khoảng 50% nhà bán ra thị trường với giá dưới 13.2$
Có khoảng 75% nhà bán ra thị trường với giá dưới 13.5$
Phạm vi liên phần tử (IQR) khoảng 0.4$
Nhìn chung, nhóm nhà có số tầng từ 2 đến 2.5 có giá nhà bán ra cao nhất Điều này cho thấynhóm nhà này được ưa chuộng nhất và phù hợp nhất với người dân quận King nước Mỹ Giá bán ra cao nhất thuộc nhóm nhà có 2.5 tầng, thấp nhất ở nhóm nhà có 1 tầng Cũng có thể đánh giá được giá bán ra của nhóm nhà 3.5 tầng khá đồng đều so với những nhóm khác
Input: boxplot(price~condition,main="Boxplot of price for each category of condition",new_DF)
# Vẽ biểu đồ Boxplot cho biến price cho từng nhóm phân loại của biến condition
• Với nhóm nhà có điều kiện kiến trúc rất tệ(1):
Giá nhà bán ra thị trường cao nhất khoảng 14.25$
Giá nhà bán ra thị trường thấp nhất khoảng 11.25$
Có khoảng 25% nhà bán ra thị trường với giá dưới 11.9$
Có khoảng 50% nhà bán ra thị trường với giá dưới 12.5$
Có khoảng 75% nhà bán ra thị trường với giá dưới 13$ Phạm vi liên phần tử (IQR) khoảng 1.1$
• Với nhóm nhà có điều kiện kiến trúc tệ(2):
Giá nhà bán ra thị trường cao nhất khoảng 14.8$
Giá nhà bán ra thị trường thấp nhất khoảng 11.25$
Có khoảng 25% nhà bán ra thị trường với giá dưới 12.25$
Có khoảng 50% nhà bán ra thị trường với giá dưới 12.6$
Có khoảng 75% nhà bán ra thị trường với giá dưới 12.9$ Phạm vi liên phần tử (IQR) khoảng 0.65$
• Với nhóm nhà có điều kiện kiến trúc trung bình(3): Giá nhà bán ra thị trường cao nhất khoảng 15.8$
Giá nhà bán ra thị trường thấp nhất khoảng 11.15$
Có khoảng 25% nhà bán ra thị trường với giá dưới 12.7$
Có khoảng 50% nhà bán ra thị trường với giá dưới 13$
Có khoảng 75% nhà bán ra thị trường với giá dưới 13.3$ Phạm vi liên phần tử (IQR) khoảng 0.6$
• Với nhóm nhà có điều kiện kiến trúc tốt(4):
Giá nhà bán ra thị trường cao nhất khoảng 15.9$
Giá nhà bán ra thị trường thấp nhất khoảng 11.4$
Có khoảng 25% nhà bán ra thị trường với giá dưới 12.6$
Có khoảng 50% nhà bán ra thị trường với giá dưới 13$
Có khoảng 75% nhà bán ra thị trường với giá dưới 13.25$ Phạm vi liên phần tử (IQR) khoảng 0.65$
• Với nhóm nhà có điều kiện kiến trúc rất tốt(5):
Giá nhà bán ra thị trường cao nhất khoảng 15.2$
Giá nhà bán ra thị trường thấp nhất khoảng 11.6$
Có khoảng 25% nhà bán ra thị trường với giá dưới 12.8$
Có khoảng 50% nhà bán ra thị trường với giá dưới 13.1$
Có khoảng 75% nhà bán ra thị trường với giá dưới 13.4$
Phạm vi liên phần tử (IQR) khoảng 0.6$
Với điều kiện kiến trúc ngôi nhà từ mức trung bình trở lên, ta thấy giá cả nhà bán ra cao hơn so với điều kiện kiến trúc ngôi nhà tệ hoặc rất tệ Từ đó điều kiện kiến trúc ngôi nhà càng tốt thì giá càng cao tỷ lệ thuận với nhu cầu nhà ở của người dân
Nhận xét chung: Dựa vào các biểu đồ Boxplot ta nhận thấy có nhiều ngoại lai của biến price theo biến floors và condition Nguyên nhân có nhiều biến ngoại lai rất có thể là do lỗi phát sinh trong quá trình nhập và chỉnh sửa dữ liệu hoặc người ta cố tình tạo ra giá trị ảo để test thị trường hoặc làm mồi nhử, hoặc thâm chí là trong một vài ngày, giá nhà cao hơn một cách đột biến so với các ngày còn lại do gần đó có một sự kiện cộng đồng… 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
Input: pairs(price~sqft_living15,main="Pairs of price for each category of sqft_living15" , new_DF)
# Vẽ phân phối của biến price theo biến sqft_living15. pairs(price~sqft_above,main="Pairs of price for each category of sqft_above", new_DF)
# Vẽ phân phối của biến price theo biến sqft_above pairs(price~sqft_living,main = "Pairs of price for each category of sqft_living" ,new_DF)
# Vẽ phân phối của biến price theo biến sqft_living
Nhận xét: Từ các đồ thị phân tán của biến price theo sqft_living15, sqft_above, sqft_living, ta nhận thấy các biến sqft_living15, sqft_above, sqft_living có quan hệ tuyến tính với price, nói rõ hơn là quan hệ đồng biến Có thể nhận thấy khi các biến sqft_living15, sqft_above, sqft_living tăng lên thì biến price có xu hướng tăng theo.
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: m1 = lm(price ~ sqft_living15 + floors + condition + sqft_above + sqft_living, data
# Xây dựng mô hình tuyến tính bội theo mô hình m1
# Thống kê kết quả tính toán khi xây dựng mô hình m1
Từ kết quả phân tích, ta thu được 𝛽 0 =5.451345, 𝛽 1 =0.429764, 𝛽 2 =0.13687,
Như vậy đường thẳng hồi quy ước lượng cho bởi phương trình sau:
Price = 5.451345 + 0.429764 x sqft_living15 + 0.13687 x floors + 0.085407 x condition – 0.178314 x sqft_above + 0.685977 x sqft_living
Hệ số R 2 hiệu chỉnh bằng 0.4983 nghĩa là 49.83 % sự biến thiên trong biến Price được giải thích bởi các biến sqft_living15, floors, condition, sqft_above, sqft_living 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 ý nghĩa 5%?
H0: Các hệ số hồi quy không có ý nghĩa thống kê
H1: Các hệ số hồi quy có ý nghĩa thống kê
Nhận xét: Dựa vào kết quả của mô hình hồi quy, ta nhận thấy Pr(>|t|) của tất cả các hệ số tương ứng các biến đều bằng 2e -16 , bé hơn nhiều so với mức ý nghĩa 5%, nên ta sẽ bác bỏ giả thiết H0, chấp nhận giả thiết H1, có nghĩa là tất cả các hệ số ứng với các biến đều có ý nghĩa thống kê Vậy ta sẽ không loại bỏ biến nào ra khỏi mô hình 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ệnhh anova() để đề xuất mô hình hồi quy hợp lý hơn
Input: m2 = lm(price ~ sqft_living15 + floors + sqft_above + sqft_living,data = new_DF) summary(m2)
# Xây dựng mô hình tuyến tính bội theo mô hình m2
# Thống kê kết quả tính toán khi xây dựng mô hình m2
Từ kết quả phân tích, ta thu được 𝛽 0 =5.81042, 𝛽 1 =0.414445, 𝛽 2 =0.112811, 𝛽 3 = – 0.203136, 𝛽 4 = 0.721355
Như vậy đường thẳng hồi quy ước lượng cho bởi phương trình sau:
Price = 5.81042 + 0.414445.sqft_living15 +0.112811.floors – 0.203136.sqft_above + 0.721355.sqft_living
Hệ số R 2 hiệu chỉnh bằng 0.4881 nghĩa là 48,81 % sự biến thiên trong biến Price được giải thích bởi các biến sqft_living15, floors, sqft_above, sqft_living
# Phân tích phương sai cho hai mô hình tuyến tính m1 và m2
H0: Hai mô hình hiệu quả như nhau
H1: Hai mô hình hiệu quả khác nhau
Nhận xét: Vì kết quả thu được trong bảng Anova cho 2 mô hình M1 và M2 là Pr(>F)
= 2,2.e -16 nhỏ hơn 0.05 nên ta bác bỏ H0, chấp nhận H1 Điều đó chỉ ra rằng 2 mô hình là khác nhau Do đó ta sẽ cân nhắc việc chọn mô hình M1 hay mô hình M2 Đối với mô hình M2, biến loại bỏ đi từ mô hình M1 là condition, mà biến condition ta không loại bỏ khỏi mô hình (đã xét ở câu b) do đó ta sẽ có chọn mô hình M1 sẽ hợp lý hơn
Mặt khác, ta có thể xét hệ số muiltle R 2 (hệ số xác định) ở mô hình M1 = 0,4984 > hệ số multiple R 2 (hệ số xác định) ở mô hình M2 = 0,4882 Tức có nghĩa là mô hình M1 cho ta biết sự thay đổi của biến price được giải thích bởi các biến độc lập tốt hơn so với mô hình M2 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à
Nhận xét: Dựa kết quả việc lựa chọn mô hình ở câu (c), ta nhận thấy mô hình 1 là hợp lý nhất, tức biến price có liên quan tuyến tính đến tất cả các biến độc lập còn lại Ngoài ra, dựa trên kết quả tóm tắt trên mô hình 1, ta nhận thấy các biến độc lập đều có Pr(>t) rất bé (***), tức khả năng bác bỏ H0 càng cao, tức các hệ số ứng với các biến trên có ý nghĩa thống kê cao, có nghĩa là những thay đổi của các biến này có ảnh hưởng nhiều đến sự thay đổi của giá nhà Ngoài ra, ta có thể đánh giá sự tác động của các hệ số ứng với từng biến độc lập
Ví d ụ như : hệ số hồi quy ứng với sqft_living15 = 0.430556 thì ứng với sqft_living15 tăng 1 đơn vị thì ta có thể kỳ vọng giá nhà có thể tăng 0,4305 đơn vị (giả sử rằng
30 các biến dự báo còn lại không đổi) Tương tự cũng như hệ số hồi quy ứng với floors
= 0.137069 thì ứng với floors tăng 1 đơn vị thì ta có thể kỳ vọng giá nhà tăng 0.137069 (giả sử rằng các biến dự báo còn lại không đổi) 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ị
# Vẽ đồ thị biểu thị sai số hồi quy (residuals) và giá trị dự báo (fitted values)
Nhận xét: Đồ thị trên vẽ các giá trị dự báo và các giá trị thặng dư (sai số) tương ứng Dựa vào đồ thị ta thấy, đường thẳng màu đỏ trên đồ thị là đường hơi cong (lõm ở giữa), tức là mối quan hệ giữa các biến dự báo X và biến phụ thuộc Y được xem như là tuyến tính, thoả mản giả định tuyến tính của dữ liệu Ngoài ra các giá trị thặng dư (sai số) phân tán tương đối đều xung quanh đường thẳng y = 0 ,chứng tỏ phương sai của các sai số là hằng số
• Các giả định trong mô hình hồi quy tuyến tính:
Y và X có mối quan hệ tuyến tính
Sai số hồi quy tuân theo phân phối chuẩn
Các sai số phải độc lập với nhau
Phương sai các sai số phải là hằng số
• Vẽ thêm các biểu đồ để kiểm tra các giả định của mô hình hồi quy
Input: plot(m1,which = 1) plot(m1,which = 2) plot(m1,which = 3) plot(m1,which = 5)
Nhận xét: Dựa vào đồ thị ta thấy, đường thẳng màu đỏ trên đồ thị là đường thẳng hơi cong nằm ngang, nhưng mức độ cong khá nhỏ còn chấp nhận được, tức là mối quan hệ giữa các biến dự báo X và biến phụ thuộc Y được xem như là tuyến tính, thoả mãn giả định tuyến tính của dữ liệu Ngoài ra các giá trị thặng dư (sai số) phân tán tương đối đều xung quanh đường thẳng y = 0
(ngoài trừ một số giá trị là ngoại lai), chứng tỏ phương sai của các sai số là hằng số Đồ thị 2: Đồ thị kiểm tra giả định về phân phối chuẩn của các sai số.Nếu các điểm thặng dư nằm trên cùng 1 đường thẳng thì điều kiện về phân phối chuẩn được thỏa mãn
Nhận xét: Nhìn vào từng đồ thị, ta nhận thấy các biến tập trung đa số xung quanh đường thẳng 45 𝑜 , ở khoảng đầu và cuối có vài giá trị lệch khỏi đường thẳng nhưng không đáng kể, nên giả định về các sai số tuân theo phân phối chuẩn được thỏa mãn Đồ thị 3: Đồ thị vẽ căn bậc hai của giá trị thặng dư được chuẩn hóa bởi các giá trị dự báo, được dùng để kiểm tra giả định phương sai của các sai số là hằng số
Nhận xét: Nhìn vào từng đồ thị, ta nhận thấy đường thẳng màu đỏ nằm ngang và các giá trị phân phối tương đối đều xung quang đường thẳng y=0 nên giả định phương sai các sai số là hằng số đã thỏa mãn Đồ thị 4: Đồ thị cho phép xác định những ảnh hưởng cao, nếu chúng hiện diện trong dữ liệu Những điểm này có thể là outliers,là những điểm gây nhiễu làm ảnh hưởng đến việc phân tích Nếu có một số điểm vượt qua khoảng đường màu đỏ đứt nét (Cook’s distance), nghĩa là những điểm này có ảnh hưởng cao
Nhận xét: Dựa vào đồ thị ta thấy các quan sát thứ 3915,9255,7253 có thể là các điểm ảnh hưởng cao trong bộ dữ liệu, tuy nhiên các điểm này chưa vượt qua đường khoảng cách cook’s distance Vì thế các điểm này chưa thực sự ảnh hưởng cao, nên ta không cần loại bỏ chúng khi phân tích.
Dự báo (Predictions)
a) Từ mô hình bạn chọn trong câu (c), hãy dùng lệnh predict() để dự báo giá nhà tại 2 thuộc tính như sau: x1: sqft_living15 = mean(sqft_living15), sqft_above = mean(sqft_above), sqft_living = mean(sqft_living), floor = 2, condition = 3 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
X1 = 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)
Input predict_X1 = predict(m1, X1, interval = "confidence") predict_X1
#Dự báo giá nhà tại thuộc tính X1
X2 = 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)
Input predict_X2 = predict(m1, X2, interval = "confidence") predict_X2
#Dự báo giá nhà tại thuộc tính X2
1 14.62931 14.60503 14.65359 b) So sánh khoảng tin cậy cho 2 giá trị dự báo này
Input: pred = data.frame(rbind(predict_X1 , predict_X2))
#Tạo bảng thể hiện dự báo giá nhà ở 2 thuộc tính X1, X2 rownames(pred) = c("X1","X2")
#Đổi tên dòng thành X1, X2 pred$range = pred$upr - pred$lwr pred
Output: fit lwr upr range
Nh ậ n xét : Với khoảng tin cậy 95%, ta thấy được độ dài khoảng tin cậy giá trị dự báo của X1 < X2 nên ta có thể kết luận với tập dữ liệu từ X1, ta có thể thu được một giá trị dự báo chính xác hơn so với X2
PHẦN RIÊNG Đề bài: Tập dữ liệu “nha_may_dien”chứa 9568 điểm dữ liệu được thu thập từ
Nhà máy điện chu trình hỗn hợp trong vòng 6 năm (2006-2011), khi nhà máy điện này được thiết lập để làm việc với đầy đủ phụ tải Dữ liệu cho ta các thông số môi trường xung quanh hàng giờ và sản lượng điện ròng hàng giờ của nhà máy
Dữ liệu gốc được cung cấp tại: https://archive.ics.uci.edu/ml/datasets/Combined+Cycle+Power+Plant
Các biến chính trong dữ liệu:
• AT: Nhiệt độ môi trường
• V: Áp suất hút chân không
• AP: Áp suất môi trường
• RH: độ ẩm tỉ đối của môi trường
• PE: sản lượng điện ròng
1 Đọc dữ liệu và làm rõ dữ liệu:
Hãy dùng lệnh read.csv() để đọc tệp tin
Kiểm tra các dữ liệu bị khuyết trong tập tin 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
3 Làm rõ dữ liệu 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ạng bảng b) Hãy dùng hàm hist() để vẽ đồ thị phân phối của biến PE c) Dùng lệnh pairs() vẽ các phân phối của biến PE lần lượt theo các biến AT, V, AP,
4 Xây dựng các mô hình hồi quy tuyến tính:
Chúng ta muốn đánh giá xem có những nhân tố nào và tác động như thế nào đến sản lượng điện ròng theo giờ
38 a) Xét mô hình hồi quy tuyến tính gồm biến PE là 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 b) Dựa vào kết quả mô hình hồi quy tuyến tính trên, những biến nào sẽ bị bạn loại khỏi mô hình với mức tin cậy 5%? c) Hãy suy luận sự tác động của các biến đến Sản lượng điện ròng theo giờ d) Hãy hãy dùng lệnh plot() để vẽ đồ thị biểu thị sai số hồi quy và giá trị dự báo Nêu ý nghĩa và nhận xét.
Dự Báo (Predictions) 44 TÀI LIỆU THAM KHẢO A
a) Từ mô hình bạn chọn trong câu 4, hãy dùng lệnh predict () để dự báo sản lượng điện năng lượng ròng theo giờ (PE) – Net hourly electrical energy output: x1: AT = mean (AT), V = mean (V), AP = mean (AP), RH = mean (RH) x2: AT = max (AT), V = max (AT), V = max (AT), V = max (AT) b) Hãy so sánh khoảng tin cậy của 2 giá trị dự báo trên
1 Đọc dữ liệu (Import data):
Hãy dùng lệnh read.csv() để đọc tệp tin
Input: nha_may_dien = read.csv("C:/Users/ASUS/Downloads/nha_may_dien.csv")
# Đọc tệp tin và lưu dữ liệu với tên là nha_may_dien
2 Làm sạch dữ liệu (Data cleaning):
Kiểm tra các dữ liệu bị khuyết trong tập tin và đề xuất phương pháp thay thế cho những dữ liệu bị khuyết (nếu có)
Input: names(nha_may_dien)
# Liệt kê tất cả các biến có trong nha_may_dien
Input: head(nha_may_dien)
Input: apply(is.na(nha_may_dien), 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
Dựa trên kết quả thu được, ta nhận thấy dữ liệu không có giá trị khuyết nào Vậy nên ta không cần phải xử lý
3 Làm rõ dữ liệu 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ạng bảng
Input: mean = apply (nha_may_dien, 2, mean)
# Tính trung bình của các biến trong dữ liệu nha_may_dien và lưu vào biến có tên là
“mean” median = apply (nha_may_dien, 2, median)
# Tính trung vị của các biến trong dữ liệu nha_may_dien và lưu vào biến có tên là
“median” sd = apply (nha_may_dien, 2, sd)
# Tính độ lệch chuẩn của các biến trong dữ liệu nha_may_dien và lưu vào biến có tên là “sd” max = apply (nha_may_dien, 2, max)
# Tính giá trị lớn nhất của các biến trong dữ liệu nha_may_dien và lưu vào biến có tên là “max” min = apply (nha_may_dien, 2, min)
# Tính giá trị nhỏ nhất của các biến trong dữ liệu nha_may_dien và lưu vào biến có tên là “min” descriptive = data.frame (mean, median, sd, max, min) descriptive
# Tạo bảng thể hiện các giá trị thống kê mô tả cho các biến, lưu vào biến descriptive
Output: mean median sd max min
PE 454.36501 451.550 17.066995 495.76 420.26 b) Hãy dùng hàm hist() để vẽ đồ thị phân phối của biến PE
Input: hist (nha_may_dien$PE, xlab = "PE", main = "Histogram of PE", labels = T)
# Vẽ biểu đồ historgram cho biến PE
• Đồ thị PE dường như phân bố không đều, tần số có xu hướng giảm khi PE tăng
• Dựa trên đồ thị, ta nhận thấy Sản lượng điện ròng hàng giờ PE tập trung nhiều nhất tại khoảng 435 – 445 MW và tập trung ít nhất ở 2 khoảng biên 420 – 425
MW, 495 – 500 MW c) Dùng lệnh pairs() vẽ phân phối của biến PE lần lượt theo các biến AT, V, AP, RH
Input: pairs (PE~AT, main = "Pairs of PE for AT", data = nha_may_dien)
# Vẽ phân phối của biến PE theo biến AT. pairs (PE~V, main = "Pairs of PE for V", data = nha_may_dien)
# Vẽ phân phối của biến PE theo biến V pairs (PE~AP, main = "Pairs of PE for AP", data = nha_may_dien)
# Vẽ phân phối của biến PE theo biến AP pairs (PE~RH, main = "Pairs of PE for RH", data = nha_may_dien)
# Vẽ phân phối của biến PE theo biến RH
Nhận xét: Từ các đồ thị phân tán của biến PE theo AT, V, AP, RH ta nhận thấy rõ các biến AT và V có quan hệ tuyến tính với PE, nói rõ hơn là quan hệ nghịch biến Ngoài ra, ta cũng có thể nhận thấy khi các biến AP và RH cũng có thể có quan hệ tuyến tính với PE (đồng biến), tuy nhiên chưa thực sự rõ rệt
4 Xây dựng các mô hình hồi quy tuyến tính (Fitting linear regression models) a) Xét mô hình hồi quy tuyến tính gồm biến PE là 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
Mô hình hồi quy M1 bao gồm:
Biến phụ thuộc : sản lượng điện ròng PE
Biến dự báo (độc lập) : AT,V,AP,RH lần lượt là nhiệt độ môi trường, áp suất hút chân không, áp suất môi trường và độ ẩm tỉ đối của môi trường
Mô hình được biểu diễn như sau :
Ta ước lượng các hệ số 𝛽 0 ,𝛽 1 ,… sử dụng lệnh lm()
M1 = lm(PE ~ AT + V + AP + RH, data = nha_may_dien) summary(M1)
# Xây dựng mô hình tuyến tính bội
# Thống kê kết quả tính toán khi xây dựng mô hình M1
Từ kết quả phân tích, ta thu được 𝛽 0 = 454.609274 , 𝛽 1 = -1.977513 , 𝛽 2 = -0.233916,
Như vậy đường thẳng hồi quy ước lượng cho bởi phương trình sau:
Hệ số 𝑅 2 hiệu chỉnh bằng 0.9287 nghĩa là 92.87% sự biến thiên trong sản lượng điện ròng PE được giải thích bởi các biến AT, V, AP, RH Để khoảng tin cậy cho hệ số hồi quy, ta sử dụng hàm confint():
Khoảng tin cậy 95% cho các hệ số hồi quy cho bởi:
435.5001≤ 𝛽 0 ≤ 473.7184 -2.0075 ≤ 𝛽 1 ≤ -1.9475 -0.2482≤ 𝛽 2 ≤ -0.2196 0.0435≤ 𝛽 3 ≤ 0.0806 -0.1662≤ 𝛽 4 ≤ -0.1499 b) Dựa vào kết quả hồi quy tuyến tính trên , những biến nào sẽ bị loại bỏ khỏi mô hình với mức tin cậy 5%?
H0: Các hệ số hồi quy không có ý nghĩa thống kê
H1: Các hệ số hồi quy có ý nghĩa thống kê
Nhận xét: Dựa vào kết quả của mô hình hồi quy, ta nhận thấy Pr(>|t|) của tất cả các biến đều < mức ý nghĩa 0,05 nên ta bác bỏ H0, chấp nhận H1 nên hệ số góc tương ứng với tất cả các biến (AT, V, AP, RH) đều có ý nghĩa thống kê Dó ta sẽ không loại bỏ biến nào cả ra khỏi mô hình c) Xét 2 mô hình tuyến tính cùng bao gồm biến PE 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 loại bỏ biến V khỏi mô hình M1
Hãy dùng lệnhh anova() để đề xuất mô hình hồi quy hợp lý hơn
Mô hình hồi quy M2 bao gồm:
Biến phụ thuộc : sản lượng điện ròng PE
Biến dự báo (độc lập) : AT,AP,RH lần lượt là nhiệt độ môi trường, áp suất môi trường và độ ẩm tỉ đối của môi trường
Mô hình được biểu diễn như sau :
Ta ước lượng các hệ số 𝛽 0 ,𝛽 1 ,… sử dụng lệnh lm()
M2 = lm(PE~AT+AP+RH, data = nha_may_dien) summary(M2)
# Xây dựng mô hình tuyến tính bội theo mô hình m2
# Thống kê kết quả tính toán khi xây dựng mô hình m2
Từ kết quả phân tích, ta thu được 𝛽 0 = 490.323746 , 𝛽 1 = -2.377708 , 𝛽 2 = 0.025372,
Như vậy đường thẳng hồi quy ước lượng cho bởi phương trình sau:
Hệ số 𝑅 2 hiệu chỉnh bằng 0.921 nghĩa là 92.1% sự biến thiên trong sản lượng điện ròng PE được giải thích bởi các biến AT, AP, RH
# Phân tích phương sai cho hai mô hình tuyến tính M1 và M2
H0: Hai mô hình hiệu quả như nhau
H1: Hai mô hình hiệu quả khác nhau
Nhận xét: Vì kết quả thu được trong bảng Anova cho 2 mô hình M1 và M2 là Pr(>F)
= 2,2.e -16 nhỏ hơn 0.05 nên ta bác bỏ H0, chấp nhận H1 Điều đó chỉ ra rằng 2 mô hình là khác nhau Do đó ta sẽ cân nhắc việc chọn mô hình M1 hay mô hình M2
Hệ số multiple 𝑅 2 (hệ số xác định) ở mô hình M1 = 0.9287 > hệ số muiltle R 2 (hệ số xác định) ở mô hình M2 = 0,921 Hơn nữa, mô hình M1 có nhiều hơn mô hình M2 một biến có ý nghĩa thống kê (V) nên chọn mô hình M1 sẽ hợp lý mô hình M2 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 sản lượng điện ròng theo thời gian:
Nhận xét: Dựa trên kết quả trên, ta nhận thấy các biến trong mô hình M1 đều có giá trị Pr (> t) rất nhỏ (***), nghĩa là khả năng bác bỏ H0 càng cao, tức các hệ số ứng với các biến trên có ý nghĩa thống kê cao, nghĩa là sự thay đổi của những biến này có ảnh hưởng nhiều đến sự thay đổi của sản lượng điện ròng
Xét từng biến cụ thệ ta thấy hệ số hồi quy ứng với AT = - 1.977513 thì ứng với nhiệt độ tăng 1 𝑜 thì ta có thể kì vọng sản lượng điện ròng giảm đi 1.977513 đơn vị tính theo đơn vị sản lượng ròng ( giả sử các biến dự báo còn lại không đổi ) Tương tự ta có thể xét với các biến còn lại ( V, AP , RH ) e) Từ mô hình hồi quy hợp lí nhất từ câu (c) hãy dùng lệnh plot để vẽ đồ thị biểu thị sai số hồi quy và giá trị dự báo Nêu ý nghĩa và nhận xét
# Vẽ đồ thị biểu thị sai số hồi quy (Residuals) và giá trị dự báo (Fitted values)
Nhận xét: Đồ thị trên vẽ các giá trị dự báo và các giá trị thặng dư (sai số) tương ứng Dựa vào đồ thị ta thấy, đường thẳng màu đó trên đồ thị gần như là đường thẳng nằm ngang, tức là mối quan hệ giữa các biến dự báo X và biến phụ thuộc Y được xem như là tuyến tính, thoả mản giả định tuyến tính của dữ liệu
Ngoài ra các giá trị thặng dư (sai số) phân tán tương đối đều xung quanh đường thẳng y= 0 (ngoài trừ một số giá trị là ngoại lai), chứng tỏ phương sai của các sai số là hằng số
*Các giả định cần kiểm tra của mô hình hồi quy:
1 Tính tuyến tính của dữ liệu: mối quan hệ giữa biến dự báo X và biến phụ thuộc Y được giả sử là tuyến tính
2 Sai số có phân phối chuẩn
3 Phương sai của các sai số là hằng số
4 Các sai số độc lập với nhau
Ta thực hiện vẽ thêm các biểu đồ để kiểm tra các giả định hồi quy này:
Input: plot(M1,which=1) plot(M1,which=2) plot(M1,which=3)
Output: Đồ thị 1: Kiểm định mối quan hệ tuyến tính của dữ liệu
Nhận xét: Đồ thị 1 vẽ các giá trị dự báo và các giá trị thặng dư (sai số) tương ứng
Dựa vào đồ thị ta thấy, đường thẳng màu đó trên đồ thị gần như là đường thẳng nằm ngang, tức là mối quan hệ giữa các biến dự báo X và biến phụ thuộc Y được xem như là tuyến tính, thoả mản giả định tuyến tính của dữ liệu