You are on page 1of 48

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC BÁCH KHOA




BÁO CÁO BÀI TẬP LỚN


MÔN XÁC XUẤT THỐNG KÊ HỌC KÌ 211
GVHD: Nguyễn Đình Huy
Nhóm: L13
Nhóm sinh viên thực hiện:

STT HỌ VÀ TÊN MSSV LỚP NGÀNH KÝ


TÊN

1 Vũ Mai Hoài Nam 1914260 L13

2 Nguyễn Thái Uyên Vy 1912478 L13

3 Trần Nguyễn Diễm Thi 1915266 L13

4 Nguyễn Ngọc Hải Hà 1913211 L13

5 Phạm Thanh Thảo Nguyên 1914396 L13

Thành phố Hồ Chí Minh – 2021

1
MỤC LỤC

A. PHẦN CHUNG
BÀI TẬP SỐ 1 .............................................................................................................. 3
1. Đọc dữ liệu (Import data): ........................................................................... 3
2. Làm sạch dữ liệu (Data cleaning): .............................................................. 3
3. Làm rõ dữ liệu.............................................................................................7
4. Xây dựng các mô hình hồi quy tuyến tính (Fitting linear regression
models):.........................................................................................................19
5. Dự báo (Predictions).................................................................................26
B. PHẦN RIÊNG
LÝ DO CHỌN ĐỀ TÀI ............................................................................................. 28
ĐỀ BÀI ....................................................................................................................... 28
XỬ LÝ SỐ LIỆU ........................................................................................................ 29
1. Đọc dữ liệu. ...................................................................................................... 29
2. Làm sạch dữ liệu (Data cleaning) .................................................................... 30
3. Làm rõ dữ liệu (Data visualization): ................................................................ 30
4. Xây dựng các mô hình hồi quy tuyến tính (Fitting linear regression
models):................................................................................................................41
5. Dự báo (Predictions) ........................................................................................ 46
6. Kết luận: ........................................................................................................... 48

A. PHẦN CHUNG

Đề 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ừ tháng 5/2014 đến 5/2015. Bên

2
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.
Các biến chính trong bộ dữ liệu:
 price: Giá nhà được bán ra.
 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.
 view: Đánh giá cảnh quan xung quanh nhà theo mức độ từ thấp đến cao: 0-4
 sqft_above: Diện tích ngôi nhà.
 sqft_living: Diện tích khuôn viên nhà.
 sqft_basement: Diện tích tầng hầm.
1. Đọc dữ liệu (Import data):
Dùng lệnh read.csv() để đọc tệp tin.
Input:
house_price = read.csv("C:/Users/Asus/Desktop/XSTK-211/gia_nha.csv")
# Đọc tệp tin và lưu dữ liệu với tên là house_price Output

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:
names(house_price)
# Liệt kê tất cả các biến có trong house_price

3
Output:

[1] "X.2" "X.1" "X"

[4] "id" "date" "price"

[7] "bedrooms" "bathrooms" "sqft_living"

[10] "sqft_lot" "floors" "waterfront"

[13] "view" "condition" "grade"

[16] "sqft_above" "sqft_basement" "yr_built"

[19] "yr_renovated" "zipcode" "lat"

[22] "long" "sqft_living15" "sqft_lot15"

Input:
new_DF = data.frame(house_price[,c(6,23,11,14,16,9,17)])
# Trích ra dữ liệu con đặt tên là new_DF bao gồm các biến chính.
Output:

Input:

4
head(new_DF)
Output:
price sqft_living15 floors condition sqft_above sqft_living sqft_living sqft_basement
1 221900 1340 1 3 1180 1180 1180 0
2 538000 1690 2 3 2170 2570 2570 400
3 180000 2720 1 3 770 770 770 0
4 604000 1360 1 5 1050 1960 1960 910
5 510000 1800 1 3 1680 1680 1680 0
6 1225000 4760 1 3 3890 5420 5420 1530

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
Output:

Input:
colSums(is.na(new_DF))

5
# Thống kê số lượng giá trị khuyết trong new_DF
Output:

price spft_living15 floors condition sqft_above sqft_living sqft_basement

20 0 0 0 0 0 0

Input:
colMeans(is.na(new_DF))
# Tính tỉ lệ giá trị khuyết trong dữ liệu.
Output:
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.

Output

6
3. 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:

7
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()).

8
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
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 liên tục, lưu vào biến
descriptive
Output:

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

9
table(new_DF$floors)
# Tạo bảng thống kê số lượng cho biến floors.
table(new_DF$condition)
# Tạo bảng thống kê số lượng cho biến conditon.
Output:

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.
Output:

10
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$
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:

11
Nhận xét:
• 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$

12
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$

13
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ấy nhó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.
Ouput:

Nhận xét:
• 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$

14
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$
15
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.
Output:

16
17
18
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.

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 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
= new_DF)
summary(m1)
# 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

19
Output:

Từ kết quả phân tích, ta thu được: 𝛽0 =5.451345, 𝛽1=0.429764, 𝛽2 =0.13687,


𝛽3=0.085407, 𝛽4= – 0.178314, 𝛽5 = 0.685977.
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ố R2 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%?
Ta đặt giả thiết:
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 2𝑒 −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)

20
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
Output:

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ố R2 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.
Input:
anova(m1,m2)
# Phân tích phương sai cho hai mô hình tuyến tính m1 và m2

21
Output:

Ta đặt giả thiết:


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.𝑒 −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 R2 (hệ số xác định) ở mô hình M1 = 0,4984 >
hệ số multiple R2 (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 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ị.
Input:
plot(m1,which = 1)
# Vẽ đồ thị biểu thị sai số hồi quy (residuals) và giá trị dự báo (fitted values)
Output:

22
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)
Output:
Đồ thị 1:

23
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.

24
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ố.

25
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.
5. 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
Tạo biến x chứa 2 vector thuộc tính X1 và X2

26
Input:

x<- data.frame( condition = c(3, 3), floors = c(2,2), sqft_living15 =


c(mean(new_DF$sqft_living15), max(new_DF$sqft_living15)),

sqft_above= c(mean(new_DF$sqft_above), max(new_DF$sqft_above)),

sqft_living = c(mean(new_DF$sqft_living), max(new_DF$sqft_living)))

x
Output:

Dự báo và đưa ra khoảng tin cậy


Input:
y<- predict(M1, x, interval = "confidence")
y

Output:
So sánh khoảng tin cậy của hai giá trị dự báo
Input:
(y[2, 3] - y[2, 2])/(y[1, 3] - y[1, 2])

Output:

[1] 2.536675
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 nhỏ hơn X2, ta có thể kết luận dùng tập dữ liệu thuộc tính X1 để dự báo giá
nhà sẽ chính xác hơn so với dung X2.

27
LÝ DO CHỌN ĐỀ TÀI
Protein có vai trò vô cùng quan trọng trong sinh học. Protein giúp cấu tạo, duy trì và phát
triển cơ thể, hình thành những chất cơ bản phục vụ cho hoạt động sống. Protein cấu trúc
tạo nên khung tế bào, tạo các khung đỡ giúp duy trì hình dáng tế bào. Là thành phần thiết
yếu của cơ thể sinh vật, tham gia vào mọi quá trình bên trong tế bào. Nó là một polyme
hữu cơ cần thiết được tạo ra từ các phân tử amino acid. Cấu trúc không gian ba chiều và
hoạt tính sinh học của protein phụ thuộc vào tính chất hoá lý của amino acid. Để thực hiện
nhiều chức năng sinh học khác nhau, quá trình dịch mã chuỗi protein thành dạng bậc ba là
điều cần phải có. Do đó việc nghiên cứu cấu trúc protein là một trong những thách thức rất
lớn và là một công việc có ý nghĩa trong việc tính toán sinh học. Khi hình thành cấu trúc
bậc 3, một phần lớn đầu không phân cực của nó trở nên không thể tiếp cận được với dung
môi (phần cặn). Việc chôn vùi diện tích bề mặt không phân cực trong phần bên trong
protein là một quá trình thuận lợi về mặt năng lượng và động lực kỵ nước là một trong
những yếu tố quan trọng nhất quyết định đến cấu trúc và sự ổn định của protein. Do đó
nhóm em chọn thực hiện đề tài này nhằm thông qua các yếu tố tính chất vật lý từ F1-F9
xem xét có sự tác động như thế nào đến biến RMSD (kích thước của phần cặn) đồng thời
đề ra phương án tối ưu dự đoán kích thước của phần cặn.
PHẦN RIÊNG
ĐỀ BÀI: Tệp tin “CASP” cho ta dữ liệu về Tính chất hóa lý của cấu trúc bậc 3 của protein.
Bộ dữ liệu được lấy từ CASP 5-9. Có 45730 mồi nhử và kích thước thay đổi từ 0-21
armstrong. Dữ liệu được cung cấp tại: Physicochemical Properties of Protein Tertiary
Structure
Các biến chính gồm:
1. RMSD - Size of the residue: kích thước của phần cặn (hay phần kỵ nước)
2. F1 - Total surface area: tổng diện tích bề mặt
3. F2 - Non polar exposed area: diện tích phần lộ ra không phân cực
4. F3 - Fractional area of exposed non polar residue - Diện tích phân đoạn của phần cặn
không phân cực tiếp xúc
5. F4 - Fractional area of exposed non polar part of residue - diện tích phân đoạn của một
phần cặn tiếp xúc không phân cực
6. F5 - Molecular mass - weighted exposed area - diện tích tiếp xúc theo khối lượng phân
tử
7. F6 - Average deviation from standard exposed area of residue - Độ lệch trung bình so
với diện tích tiếp xúc tiêu chuẩn của phần cặn
8. F7 - Euclidian distance - khoảng cách Euclid
9. F8 - Secondary structure penalty - Phế phẩm của cấu trúc thứ cấp
10. F9 - Spacial Distribution constraints (N, K Value) - Sự liên kết phân phối không gian.
28
CÂU HỎI:
1. Đọc dữ liệu: Hãy dùng lênh read.csv() để đọc 3 tệp tin.
2. Làm sạch dữ liệu (Data cleaning)
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ạng bảng.
b) Dùng hàm hist( ) để vẽ đồ thị phân phối của biến RMSD
c) Dùng lệnh pairs( ) vẽ các phân phối của biến RMSD lần lượt theo các biến F1, F2, F3,
F4, F5, F6, F8, F9.
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 bao gồm biến RSMD 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.
b) Dựa vào kết quả của mô hình hồi quy tuyến tính trên, ta sẽ có những biến phải loại bỏ
khỏi mô hình tương ứng với mức tin cậy 5%?
c) Từ mô hình hồi quy tuyến tính trên ta có kết luận gì về sự tác động của các yếu tố tính
chất vật lý đến kích thước của phần cặn?
d) Từ mô hình hồi quy trên hãy 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.
5. Dự báo (Predictions)
a) Từ mô hình trên dùng lệnh predict( ) để dự báo kích thước của phần cặn tại 2 thuộc tính
như sau:
X1: F1 = mean(df$F1), F2 = mean(df$F2), F3 = mean(df$F3),F4 = mean(df$F4),F5 =
mean(df$F5),F6 = mean(df$F6),F7 = mean(df$F7),F8 = mean(df$F8),F9 = mean(df$F9)
X2: F1 = max(df$F1), F2 = max(df$F2), F3 = max(df$F3),F4 = max(df$F4),F5 =
max(df$F5),F6 = max(df$F6),F7 = max(df$F7),F8 = max(df$F8),F9 = max(df$F9)
b) So sánh khoảng tin cậy cho 2 giá trị dự báo này.
XỬ LÝ SỐ LIỆU
1. Đọc dữ liệu: Hãy dùng lênh read.csv() để đọc 3 tệp tin.
- Input:
df<- read.csv("D:/CASP.csv")
head(df)
Giải thích: Đọc tệp tin và lưu dữ liệu với tên là df.
- Output:

29
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. 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(df), 2, which)
Giải thích: Kiểm tra và xuất ra vị trí dòng chứa giá trị khuyết của biến trong “df”.
- Output:

Nhận xét: không có giá trị khuyết trong tập tin.


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ạng
bảng.
- Input:
mean=apply(df,2,mean)
median=apply(df,2,median)
sd=apply(df,2,sd)
max=apply(df,2,max)
min=apply(df,2,min)
Giải thích: Tính trung bình (mean), trung vị (median), độ lệch chuẩn (sd), giá trị lớn nhất
(max), giá trị nhỏ nhất (min) của tất cả biến liên tục và lần lượt lưu vào biến có tên là
mean, median, sd, max, min.
- Output:

30
- Input:
descriptive_statistics<-data.frame(mean,median,sd,max,min)
Giải thích: 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 lại với
tên là “descriptive_statistics”.
- Output:

b) Dùng hàm hist( ) để vẽ đồ thị phân phối của biến RMSD
- Input:
hist(df$RMSD, xlab ="RMSD", main = "Histogram of RMSD", labels = T)
Giải thích: vẽ biểu đồ historgram cho biến RMSD.
- Output:

31
Nhận xét: dựa trên đồ thị ta thấy kích thước của phần cặn lớn nhất nằm trong khoảng 1-3
A0 và thấp nhất là 21 A0.
c) Dùng lệnh pairs ( ) vẽ các phân phối của biến RMSD lần lượt theo các biến F1, F2,
F3, F4, F5, F6, F8, F9.
- Input:
pairs(RMSD ~ F1,main = "pairs of RMSD for F1",data=df)
Giải thích: vẽ phân phối của biến RMSD theo biến F1.
- Input:
pairs(RMSD ~ F2,main = "pairs of RMSD for F2",data=df)
Giải thích: vẽ phân phối của biến RMSD theo biến F2.
- Input:
pairs(RMSD ~ F3,main = "pairs of RMSD for F3",data=df)
Giải thích: vẽ phân phối của biến RMSD theo biến F3.
- Input:
pairs(RMSD ~ F4,main = "pairs of RMSD for F4",data=df)
Giải thích: vẽ phân phối của biến RMSD theo biến F4.
- Input:
pairs(RMSD ~ F5,main = "pairs of RMSD for F5",data=df)
Giải thích: vẽ phân phối của biến RMSD theo biến F5.

32
- Input:
pairs(RMSD ~ F6,main = "pairs of RMSD for F6",data=df)
Giải thích: vẽ phân phối của biến RMSD theo biến F6.
- Input:
pairs(RMSD ~ F7,main = "pairs of RMSD for F7",data=df)
Giải thích: vẽ phân phối của biến RMSD theo biến F7.
- Input:
pairs(RMSD ~ F8,main = "pairs of RMSD for F8",data=df)
Giải thích: vẽ phân phối của biến RMSD theo biến F8.
- Input:
pairs(RMSD ~ F9,main = "pairs of RMSD for F9",data=df)
Giải thích: vẽ phân phối của biến RMSD theo biến F9.
- Output:

33
34
35
36
37
38
39
40
Nhận xét: Dựa trên các đồ thị phân tán, ta nhận thấy RMSD có vẻ không có mối quan hệ
tuyến tính với các biến F1, F2, F3, F4, F5, F6, F7, F8, F9. Để xác định ta xây dựng mô
hình hồi quy tuyến tính.
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 biết rằng có những yếu tố nào và tác động như thế nào đến kích thước phần
cặn.
a) Xét mô hình hồi quy tuyến tính bao gồm biến RSMD 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:
protein <- lm(RMSD ~ F1 + F2 + F3 + F4 + F5 + F6 + F7 + F8 + F9, data=df)
summary(protein)
Giải thích: xây dựng mô hình hồi quy tuyến tính bội protein.
- Output:

41
b) Dựa vào kết quả của mô hình hồi quy tuyến tính trên, ta sẽ có những biến phải loại
bỏ khỏi mô hình tương ứng với mức tin cậy 5%?
Đặt giả thiết:
- H0: Hệ số hồi quy không có ý nghĩa thống kê.
- H1: Hệ số hồi quy có ý nghĩa thống kê.
Phương pháp kiểm định bằng Pvalue (Pr(>|t|)):
Pr(>|t|) > mức ý nghĩa  => Chưa bác bỏ được giả thiết H0, tức hệ số hồi quy tương ứng
với các biến không có ý nghĩa thống kê, ta sẽ loại các biến đó ra khỏi mô hình.
Dựa vào kết quả, ta có: Pr(>|t|) của các hệ số ứng với các biến đều nhỏ hơn mức ý nghĩa
5% nên ta bác bỏ giả thiết H0, chấp nhận giả thiết H1. Do đó các hệ số ứng với các biến đều
có ý nghĩa thống kê. Vì vậy, ta không cần loại bỏ biến nào ra khỏi mô hình.
c) Từ mô hình hồi quy tuyến tính trên ta có kết luận gì về sự tác động của các yếu tố
tính chất vật lý đến kích thước của phần cặn?
Để đánh giá sự tác động của các biến lên kích thước của phần cặn, ta quan tâm các hệ số
hồi quy P-value tương ứng. Ta thấy rằng P-value tương ứng với F1, F2, F3, F4, F5, F6, F7,
F8, F9 < 2.10-6, điều này nói lên rằng ảnh hưởng của các biến này có ý nghĩa rất lớn lên
biến kích thước phần cặn RMSD. Biến F5 cũng có ảnh hưởng lớn đến biến RMSD nhưng
ít hơn so với các biến còn lại.

42
Mặt khác, các hệ số hồi quy của một biến dự báo cũng được xem như ảnh hưởng trung
bình lên biến phụ thuộc là kích thước phần cặn khi tăng thêm 1 đơn vị của biến dự báo đó,
giả sử khi các biến dự báo khác không đổi.
Cụ thể hơn, hệ số hồi quy tương ứng với F1 = 1,572.10-3 thì tương ứng với F1 tăng 1 đơn
vị Ao thì ta có thể kỳ vọng kích thước phần cặn có thể tăng 1,572.10-3 Ao (giả sử rằng các
biến dự báo còn lại không đổi). Tương tự với các biến còn lại.
d) Từ mô hình hồi quy trên hãy 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.
- Input:
plot (protein, which = 1)
Giải thích: Vẽ đồ thị sai số hồi quy và sai số dự báo.
- Output:

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 màu đỏ trên đồ thị là đường cong, 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ư chưa tuyến tính, chưa thỏa 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 không đều xung quang đường thẳng y=0
(ngoại trừ một số điểm ngoại lai), chứng tỏ phương sai của các sai số không là hằng số, vi
phạm giả định trong mô hình hồi quy.
- Các giả định trong mô hình hồi quy tuyến 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 phải
được giả định là tuyến tính.
43
+ Sai số phải có phân phối chuẩn
+ Phương sai các sai số là hằng số.
+ Các sai số phải độc lập với nhau
Ta có thể vẽ thêm các biểu đồ để kiểm tra các giả định của mô hình hồi quy:
- Input:
plot(protein)
Giải thích: vẽ các đồ thị để kiểm tra giả định của mô hình hồi quy.
- Output:

Nhận xét: nhận xét như hình 1, mối quan hệ của x và y chưa được xem là tuyến tính.

44
Đồ thị 2: đồ thị kiểm tra giá trị 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 một đường thẳng thì điều kiện về phân phối chuẩn được thỏa mãn.
Ta nhận thấy các giá trị thặng dư tập trung theo những đường thẳng, ở khoảng đầu và cuối
có vài giá trị lệch ra khỏi đường thẳng. Tuy nhiên, không đáng kể, ta xem như giả định
phân phối chuẩn của các sai số vẫn đáp ứng.

Đồ thị 3: vẽ căn bậc 2 của các giá trị thặng dư được chuẩn hóa bởi các giá trị dự báo, được

45
dùng để kiểm tra giả định thứ 3 (phương sai của các sai số là hằng số- tương tự đò thị 1).
Nếu đường màu đỏ trên đồ thị là đường thẳng nằm ngang và các giá trị thặng dư phân tán
đều quanh đường thẳng này thì giả định 3 được thỏa mãn. Nếu đường màu đỏ có độ dốc
(hoặc cong) hoặc các điểm thặng dư phân tán không đều xung quanh đường thẳng này thì
giả định thứ 3 bị vi phạm.
Dựa vào đồ thị ta thấy đường màu đỏ trên đồ thị là đường cong và các giá trị thặng dư
không phân tán đều. Đồ thị cho ta thấy rằng giả định tính đồng nhất về phương sai bị vi
phạm.

Đồ thị 4: cho phép xác định được những ảnh hưởng cao, nếu chúng có hiện diện trong dữ
liệu. Những điểm ảnh hưởng cao này có thể là các điểm outlines, là những điểm gây nhiễu
gây ảnh hưởng nhiều nhất trong việc phân tích. Nếu như ta thấy đường màu đỏ đứt nét
(Cook’s distance) và có một số điểm vượt qua đường khoảng cách này, nghĩa là các điểm
đó có ảnh hưởng cao. Nếu như không có điểm nào vượt qua nó, nghĩa là không có điểm
nào thực sự có ảnh hưởng cao.
Dựa vào đồ thị, ta thấy quan trắc thứ 36240, 23637, 41818 có thể là những điểm có ảnh
hưởng cao trong bộ dữ liệu. Tuy nhiên các điểm chưa vượt qua đường khoảng cách Cook.
Do đó các điểm này chưa thật sự ảnh hưởng cao, do đó ta không cần loại bỏ chúng khi
phân tích.
5. Dự báo (Predictions)

46
a) Từ mô hình trên dùng lệnh predict( ) để dự báo kích thước của phần cặn tại 2 thuộc
tính như sau:
X1: F1 = mean(df$F1), F2 = mean(df$F2), F3 = mean(df$F3),F4 = mean(df$F4),F5 =
mean(df$F5),F6 = mean(df$F6),F7 = mean(df$F7),F8 = mean(df$F8),F9 =
mean(df$F9)
X2: F1 = max(df$F1), F2 = max(df$F2), F3 = max(df$F3),F4 = max(df$F4),F5 =
max(df$F5),F6 = max(df$F6),F7 = max(df$F7),F8 = max(df$F8),F9 = max(df$F9)
- Input:
X1 = data.frame(F1 = mean(df$F1), F2 = mean(df$F2), F3 = mean(df$F3),F4 =
mean(df$F4),F5 = mean(df$F5),F6 = mean(df$F6),F7 = mean(df$F7),F8 =
mean(df$F8),F9 = mean(df$F9))
Giải thích: tạo thuộc tính X1
- Input:
predict_X1 = predict(protein, X1, interval = "confidence")
predict_X1
Giải thích: dự báo kích thước phần cặn tại thuộc tính X1
- Output:

- Input:
X2 = data.frame(F1 = max(df$F1), F2 = max(df$F2), F3 = max(df$F3),F4 =
max(df$F4),F5 = max(df$F5),F6 = max(df$F6),F7 = max(df$F7),F8 = max(df$F8),F9 =
max(df$F9))
Giải thích: tạo thuộc tính X2
predict_X2 = predict(protein, X2, interval = "confidence")
predict_X2
Giải thích: dự báo kích thước phần cặn tại thuộc tính X2
- Output:

47
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))
Giải thích: Tạo bảng thể hiện dự báo giá nhà ở 2 thuộc tính X1,X2.
- Input:
rownames(pred) = c("X1","X2")
Giải thích: đổi tên dòng thành X1, X2.
- Input:
pred$range=pred$upr-pred$lwr
pred
- Output:

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 X1, ta có thể thu được một giá trị dự báo
chính xác hơn so với X2.
6. Kết luận:
Từ mục (4) ta thấy mô hình ta xây dựng chưa thực sự phù hợp ngoài việc vi phạm nhiều
giả định hồi quy, hệ số R-Squared = 0,2823 cũng quá bé nên sự thay đổi của biến RMSD
được giải thích bởi biến độc lập quá ít. Do đó mô hình ta xây dựng chưa thực sự phù hợp
để dự đoán cho RMSD. Có thể khi phân tích bài toán ta nhận thấy các biến F1, F2, F3, F4,
F5, F6, F7, F8, F9 đều ảnh hưởng lớn đến biến RMSD, dù vậy khi xây dựng mô hình hồi
quy chưa thật sự tốt dẫn đến kết quả dự báo sẽ không chính xác.

48

You might also like