Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 49

HO CHI MINH

CITY
UNIVERSITY
OF
TECHNOLOGY

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


MÔN XÁC SUẤT THỐNG KÊ

GVHD: TS. Nguyễn Bá Thi

Thực hiện: Nguyễn Việt Ngân - 1914289

(Lớp: L11 – Nhóm: 04)


Mục lục

PHẦN CHUNG.........................................................................................................................3

BÀI 1......................................................................................................................................3

BÀI 2....................................................................................................................................16

PHẦN RIÊNG.........................................................................................................................33
PHẦN CHUNG
BÀI 1

Câu hỏi:

1. Đọc dữ liệu (Import data):

gia_nha <- read.csv("C:/Users/DELL/Desktop/gia_nha.csv")

Liệt kê các biến có trong giá nhà

names(gia_nha)
## [1] "X.2" "X.1" "X" "id"
## [5] "date" "price" "bedrooms"
"bathrooms"
## [9] "sqft_living" "sqft_lot" "floors"
"waterfront"
## [13] "view" "condition" "grade"
"sqft_above"
## [17] "sqft_basement" "yr_built" "yr_renovated"
"zipcode"
## [21] "lat" "long" "sqft_living15"
"sqft_lot15"

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.

new_DF=data.frame(gia_nha[,c(6,23,11,14,16,9)])
head(new_DF)
## price sqft_living15 floors condition sqft_above
sqft_living
## 1 221900 1340 1 3 1180
1180
## 2 538000 1690 2 3 2170
2570
## 3 180000 2720 1 3 770
770
## 4 604000 1360 1 5 1050
1960
## 5 510000 1800 1 3 1680
1680
## 6 1225000 4760 1 3 3890
5420

b) 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ày nếu có dữ liệu bị khuyết:

Kiểm tra và xuất ra vị trí dòng có giá trị khuyết:

apply(is.na(new_DF),2,which)
## $price
## [1] 26 54 151 174 236 352 375 419 544 557 561 585 594 638
702 718 749 823 939
## [20] 995
##
## $sqft_living15
## integer(0)
##
## $floors
## integer(0)
##
## $condition
## integer(0)
##
## $sqft_above
## integer(0)
##
## $sqft_living
## integer(0)

Thống kê các giá trị khuyết của new_DF:

colSums(is.na(new_DF))
## price sqft_living15 floors condition
sqft_above
## 20 0 0 0
0
## sqft_living
## 0

 Nhận xét: Dựa vào kết quả thu được ta nhận thấy có 20 giá trị khuyết
ở biến price. Do đó ta sẽ đưa ra phương pháp xử lý số liệu là như sau:
Do số quan sát chỉ chứa 20 giá trị khuyết chiếm rất thấp số với tổng
quan sát trên toàn bộ dữ liệu (20/2163 < 10%) vì vậy ta chọn phương
pháp xóa dữ liệu khuyết:
new_DF=na.omit(new_DF)

3. Làm rõ dữ liệu (Data visualization)

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 biến đổi dạng log.

new_DF[,c(1,2,5,6)]=log10(new_DF[,c(1,2,5,6)])
a) Tính các giá trị thống kê mô tả đối với các biến liên tục:
 Trung bình (mean)
mean=apply(new_DF[,c(1,2,5,6)],2,mean)

 Trung vị (median)
median=apply(new_DF[,c(1,2,5,6)],2,median)

 Độ lệch chuẩn (sd)


sd=apply(new_DF[,c(1,2,5,6)],2,sd)

 Giá trị lớn nhất (max)


max=apply(new_DF[,c(1,2,5,6)],2,max)

 Giá trị nhỏ nhất (min)


min=apply(new_DF[,c(1,2,5,6)],2,min)

 Xuất các giá trị vừa tìm được dưới dạng bảng
descriptive = data.frame(mean,median,sd,max,min)
descriptive
## mean median sd max min
## price 5.666605 5.653213 0.2286882 6.886491 4.875061
## sqft_living15 3.274340 3.264818 0.1422124 3.793092 2.600973
## sqft_above 3.211557 3.193125 0.1857231 3.973590 2.462398
## sqft_living 3.279066 3.281033 0.1844762 4.131619 2.462398

Bảng thông kê số lượng cho từng chủng loại đối với các biến phân loại

Bảng thống kê số lượng cho biến floors

table(new_DF$floors)
##
## 1 1.5 2 2.5 3 3.5
## 10672 1909 8230 161 613 8

Bảng thống kê số lượng cho biến condition

table(new_DF$condition)
##
## 1 2 3 4 5
## 30 172 14016 5677 1698

Dùng hàm hist() để vẽ đồ thị phân phối của biến price.

hist(new_DF$price,main="Histogram of
price",labels=T,col="pink")

 Nhận xét: Dựa vào đồ thị trên ta thấy với mức giá nhà phân bố tập
trung trong khoảng giữa của đồ thị. Và đồ thị cũng có dạng giống với
dạng phân phối chuẩn.

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 floor và biến condition.

boxplot(price~floors,main="Boxplot of house price for each


category of floor",data=new_DF,col="cyan")
boxplot(price~condition,main="Boxplot of house price for each
category of condition",data=new_DF,col="orange")

 Nhận xét: 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.
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.

* Vẽ phân phối biến price theo sqft_living15:

pairs(price~sqft_living15, main="price of house price for


sqft_living15", data=new_DF,col="violet")

* Vẽ phân phối biến price theo sqft_above:

pairs(price~sqft_above, main="price of house price for


sqft_above", data=new_DF,col="violet")
* Vẽ phân phối biến price theo sqft_living:

pairs(price~sqft_living, main="price of house price for


sqft_living", data=new_DF,col="violet")

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)

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.

Ta cần xét các biến chính trong việc xây dựng mô hình hồi quy.

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.

* Thay các biến phân loại thành biến nhân tố.

new_DF$floors=as.factor(new_DF$floors)
new_DF$condition=as.factor(new_DF$condition)

Price là một hàm số phụ thuộc vào năm biến còn lại. Các thông tin về mô hình
hồi quy tuyến tính sẽ được đưa vào một object có tên là m1.

m1=lm(price~sqft_living15 + sqft_above + sqft_living + floors +


condition, data=new_DF)
summary(m1)
##
## Call:
## lm(formula = price ~ sqft_living15 + sqft_above +
sqft_living +
## floors + condition, data = new_DF)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.55193 -0.11785 0.00346 0.10477 0.65127
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.308027 0.040474 57.025 < 2e-16 ***
## sqft_living15 0.462153 0.011947 38.684 < 2e-16 ***
## sqft_above -0.142451 0.014256 -9.992 < 2e-16 ***
## sqft_living 0.670249 0.013105 51.145 < 2e-16 ***
## floors1.5 0.078713 0.004116 19.122 < 2e-16 ***
## floors2 0.029366 0.003191 9.201 < 2e-16 ***
## floors2.5 0.162118 0.012961 12.509 < 2e-16 ***
## floors3 0.165894 0.006913 23.996 < 2e-16 ***
## floors3.5 0.215827 0.056680 3.808 0.000141 ***
## condition2 0.008113 0.031705 0.256 0.798040
## condition3 0.070449 0.029336 2.401 0.016336 *
## condition4 0.090356 0.029367 3.077 0.002095 **
## condition5 0.144105 0.029564 4.874 1.1e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' '
1
##
## Residual standard error: 0.1601 on 21580 degrees of freedom
## Multiple R-squared: 0.51, Adjusted R-squared: 0.5097
## F-statistic: 1872 on 12 and 21580 DF, p-value: < 2.2e-16

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%?

Với mức tin cậy α = 0.05

Giả thiết:

H: biến không có ý nghĩa thống kê.

H : biến có ý nghĩa thống kê.

Xét giá trị kiểm định t (Pr) của các biến độc lập:

 Pr (sqft_living15) < 2e-16 = 2*10-16 < 0.05 → bác bỏ giả thuyết H


 Pr (floors) có các giá trị đều nhỏ hơn 0.05 → bác bỏ giả thuyết H
 Pr (condition 2) có các giá trị lớn hơn 0.05 → chấp nhận giả thuyết H
 Pr (condition 3, condition 4, condition 5) < 0.05 → bác bỏ giả thuyết H
 Pr (sqft_above) = 2e-16 < 0.05 → bác bỏ giả thuyết H
 Pr (sqft_living) = 2e-16 < 0.05 → bác bỏ giả thuyết H
 Như vậy, với mức tin cậy 5%, ta sẽ loại bỏ biến “condition 2” khỏi mô
hình hồi quy tuyến tính trên.

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

m2=lm(price~sqft_living15 + sqft_above + sqft_living + floors,


data=new_DF)
summary(m2)
##
## Call:
## lm(formula = price ~ sqft_living15 + sqft_above +
sqft_living +
## floors, data = new_DF)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.5583 -0.1188 0.0035 0.1066 0.6410
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.391711 0.028386 84.257 < 2e-16 ***
## sqft_living15 0.451639 0.012023 37.563 < 2e-16 ***
## sqft_above -0.165249 0.014317 -11.543 < 2e-16 ***
## sqft_living 0.703102 0.013091 53.709 < 2e-16 ***
## floors1.5 0.084520 0.004136 20.437 < 2e-16 ***
## floors2 0.021291 0.003128 6.807 1.02e-11 ***
## floors2.5 0.161796 0.013061 12.388 < 2e-16 ***
## floors3 0.154575 0.006887 22.444 < 2e-16 ***
## floors3.5 0.212204 0.057134 3.714 0.000204 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' '
1
##
## Residual standard error: 0.1614 on 21584 degrees of freedom
## Multiple R-squared: 0.5019, Adjusted R-squared: 0.5017
## F-statistic: 2718 on 8 and 21584 DF, p-value: < 2.2e-16

Dùng lệnh anova() để đề xuất mô hình hồi quy hợp lý hơn.

anova(m1,m2)
## Analysis of Variance Table
##
## Model 1: price ~ sqft_living15 + sqft_above + sqft_living +
floors + condition
## Model 2: price ~ sqft_living15 + sqft_above + sqft_living +
floors
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 21580 553.32
## 2 21584 562.49 -4 -9.1665 89.376 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' '
1

Giả thuyết

 H: Hai mô hình tuyến tính như nhau


 H : Hai mô hình tuyến tính 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,2e-16 nhỏ hơn 0.05 nên ta bác bỏ H. Đ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ố Multiple R-squared (hệ số xác định) ở
mô hình m1 = 0,51 > hệ số Multiple R-squared (hệ số xác định) ở mô
hình m2 = 0,5019. 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. Hoặc ta so sánh RSS (tổng bình phương sai lệch giữa thực tế
và dự báo) của m1 < m2
Theo kết quả trên, mô hình M1 hợp lý hơn.

d) Chọn mô hình hợp lý hơn từ câu (c) hãy suy luận sự tác động của các
biến lên giá nhà.

Từ câu c, ta chọn mô hình m1 là mô hình hợp lý hơn.

Biến price là một biến phụ thuộc vào 5 biến độc lập: sqft_living15, floors,
condition, sqft_above, sqft_living. Dựa trên thông tin của mô hình m1, ta có
đường hồi quy tuyến tính mẫu như sau:
price = 2.308027 + 0.462153 (sqft_living15) + 0.078713 (floors1.5) +
0.029366 (floors2) + 0.162118 (floors2.5) + 0.165894 (floors3) + 0.215827
(floors3.5) + 0.008113 (condition2) + 0.070449 (condition3) + 0.090356
(condition4) + 0.144105 (condition5) -0.142451 (sqft_above) + 0.670249
(sqft_living)

Các giá trị β của bốn biến độc lập đều khác 0, cho thấy chúng đều có tác động
đến price. Mối liên hệ này có ý nghĩa thống kê.

Xét đạo hàm theo từng biến độc lập, ta thấy mức độ ảnh hưởng như sau:

 sqft_living15 tăng 1 đơn vị, price tăng 0.462153 đơn vị.


 sqft_above tăng 1 đơn vị, price giảm 0.142451 đơn vị.
 sqft_living tăng 1 đơn vị, price tăng 0.670249 đơn vị.

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 (residuals) và giá trị dự báo (fitted
values). Nêu ý nghĩa và nhận xét đồ thị.

plot(m1,which=1)
Ý nghĩa: đồ thị trên biểu thị sai số hồi quy và giá trị dự báo cho biến phụ
thuộc price.

Nhận xét: Các giá trị residuals và fitted values chủ yếu tập trung ở góc phần
tư thứ nhất và phần tư thứ tư, dao động đối xứng quanh đường y = 0.

- Đường thẳng chính giữa chính là đường 0 => sai số hồi quy (XSHQ)= 0

- Đường XSHQ đỏ càng gần đường 0 càng chính xác

Kết luận: Giá nhà khi đó được dự báo chính xác nhất do khoảng cách gần
đường 0 nhất.

5. Dự báo (Predictions)

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.

Khai báo biến

X1=data.frame(sqft_living15=mean(new_DF$sqft_living15),sqft_abo
ve=mean(new_DF$sqft_above),sqft_living=mean(new_DF$sqft_living)
,floors="2",condition="3")
X2=data.frame(sqft_living15=max(new_DF$sqft_living15),sqft_abov
e=max(new_DF$sqft_above),sqft_living=max(new_DF$sqft_living),fl
oors="2",condition="3")

Dự báo giá nhà tại thuộc tính X1:

predict_X1=predict(m1,X1,interval = "confidence")
predict_X1
## fit lwr upr
## 1 5.66139 5.657203 5.665577

Dự báo giá nhà tại thuộc tính X2:


predict_X2=predict(m1,X2,interval = "confidence")
predict_X2
## fit lwr upr
## 1 6.364003 6.353382 6.374624

So sánh khoảng tin cậy của hai dự báo của X1 và X2:

*Tạo bảng thể hiện dự báo giá nhà(có thể hiện độ dài khoảng tin cậy) của hai
biến X1 và X2:

pred=data.frame(rbind(predict_X1,predict_X2))
pred=data.frame(rbind(predict_X1,predict_X2))
row.names(pred)=c("X1","X2")
pred$range=pred$upr-pred$lwr
pred
## fit lwr upr range
## X1 5.661390 5.657203 5.665577 0.008374017
## X2 6.364003 6.353382 6.374624 0.021242160

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 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.
BÀI 2

Câu hỏi:

1. Đọc dữ liệu (Import data):

diem_so <- read.csv("C:/Users/DELL/Desktop/gia_nha.csv")


names(diem_so)
## [1] "X" "school" "sex" "age"
"address"
## [6] "famsize" "Pstatus" "Medu" "Fedu"
"Mjob"
## [11] "Fjob" "reason" "guardian" "traveltime"
"studytime"
## [16] "failures" "schoolsup" "famsup" "paid"
"activities"
## [21] "nursery" "higher" "internet" "romantic"
"famrel"
## [26] "freetime" "goout" "Dalc" "Walc"
"health"
## [31] "absences" "G1" "G2" "G3"
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. 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.

new_DF=data.frame(diem_so[,c(32,33,34,15,16,31,22,4)])
head(new_DF)
## G1 G2 G3 studytime failures absences higher age
## 1 5 6 6 2 0 6 yes 18
## 2 5 NA 6 2 0 4 yes 17
## 3 7 8 10 2 3 10 yes 15
## 4 15 14 15 3 0 2 yes 15
## 5 6 10 10 2 0 4 yes 16
## 6 15 NA 15 2 0 10 yes 16

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 này.

Kiểm tra và xuất ra vị trí dòng có giá trị khuyết:

apply(is.na(new_DF),2,which)
## $G1
## integer(0)
##
## $G2
## [1] 2 6 9 80 100
##
## $G3
## integer(0)
##
## $studytime
## integer(0)
##
## $failures
## integer(0)
##
## $absences
## integer(0)
##
## $higher
## integer(0)
##
## $age
## integer(0)

Thống kê các giá trị khuyết của new_DF:

colSums(is.na(new_DF))
## G1 G2 G3 studytime failures absences
higher age
## 0 5 0 0 0 0
0 0

Nhận xét: Dựa vào kết quả thu được ta nhận thấy có 5 giá trị khuyết ở biến
G2.Do đó ta sẽ đưa ra phương pháp xử lý số liệu là như sau: Do số quan sát
chỉ chứa 20 giá trị khuyết chiếm rất thấp số với tổng quan sát trên toàn bộ dữ
liệu (5/395 < 10%) vì vậy ta chọn phương pháp xóa dữ liệu khuyết:

new_DF=na.omit(new_DF)

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. (Hàm gợi ý: mean(), median(), sd(),
min(), max() , apply(), as.data.frame(), rownames())

mean=apply(new_DF[,c(1,2,3,6,8)],2,mean)
median=apply(new_DF[,c(1,2,3,6,8)],2,median)
sd=apply(new_DF[,c(1,2,3,6,8)],2,sd)
max=apply(new_DF[,c(1,2,3,6,8)],2,max)
min=apply(new_DF[,c(1,2,3,6,8)],2,min)
descriptive = data.frame(mean,median,sd,max,min)
descriptive
## mean median sd max min
## G1 10.925641 11 3.290886 19 3
## G2 10.717949 11 3.737868 19 0
## G3 10.412821 11 4.568962 20 0
## absences 5.715385 4 8.034215 75 0
## age 16.705128 17 1.279751 22 15

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 loại.

table(new_DF$studytime)
##
## 1 2 3 4
## 105 194 64 27
table(new_DF$failures)
##
## 0 1 2 3
## 307 50 17 16
table(new_DF$higher)
##
## no yes
## 20 370

c) Hãy dùng hàm hist() để vẽ đồ thị phân phối của biến G3.

hist(new_DF$G3,main = "histogram of G3",labels=T,col="cyan")


Nhận xét: Nhìn vào biểu đồ, ta nhận thấy điểm cuối khóa (biến G3) của sinh
viên phần lớn tập trung ở mức từ 6 – 16 điểm, cao nhất ở mức 8 – 10 điểm,
thấp nhất ở mức 2 – 4 điểm.
Đồ thị có cột đầu tiên bị lệch so với đồ thị phân phối chuẩn, có thể nói cột
đầu tiên là yếu tố ngoại lai nên nếu loại bỏ cột đầu tiên thì độ thị có dạng gần
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à biến higher.

boxplot(G3~studytime,main ="Boxplot of G3 for each category of


studytime",data=new_DF,col="red")
boxplot(G3~failures,main ="Boxplot of G3 for each category of
failures",data=new_DF,col="yellow")

boxplot(G3~higher,main ="Boxplot of G3 for each category of


higher",data=new_DF,col="green")
Nhận xét: Nhìn chung, nhóm học sinh có thời gian tự học nhiều hơn sẽ
có điểm cuối kì cao hơn.
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 G2, G1, age, và absences.

pairs(G3~G2, main="Phan phoi diem thi CK theo diem HK2",


data=new_DF)
pairs(G3~G1, main="Phan phoi diem thi CK theo diem HK1",
data=new_DF)

pairs(G3~age, main="Phan phoi diem thi CK theo tuoi",


data=new_DF)
pairs(G3~absences, main="Phan phoi diem thi CK theo so lan nghi
hoc", data=new_DF)

Nhậ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:

 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 khoá môn Toán của các em học sinh.

Ta cần xét các biến chính trong việc xây dựng mô hình hồi quy.

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 quy tuyến tính bội.

* Thay các biến phân loại thành biến nhân tố


new_DF[,4]=as.factor(new_DF[,4])
new_DF[,5]=as.factor(new_DF[,5])
new_DF[,7]=as.factor(new_DF[,7])

* G3 là một hàm số phụ thuộc vào năm biến còn lại. Các thông tin về mô hình
hồi quy tuyến tính sẽ được đưa vào một object có tên là m1.

m1=lm(G3~G1 + G2 + age + absences + studytime + failures +


higher, data=new_DF)
summary(m1)
##
## Call:
## lm(formula = G3 ~ G1 + G2 + age + absences + studytime +
failures +
## higher, data = new_DF)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.2493 -0.4532 0.2306 1.0373 3.8269
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.43931 1.50833 0.291 0.771017
## G1 0.15673 0.05683 2.758 0.006096 **
## G2 0.96595 0.04972 19.427 < 2e-16 ***
## age -0.13891 0.08198 -1.694 0.090998 .
## absences 0.04711 0.01235 3.815 0.000159 ***
## studytime2 -0.21260 0.23346 -0.911 0.363062
## studytime3 -0.05159 0.31197 -0.165 0.868730
## studytime4 -0.86105 0.41637 -2.068 0.039323 *
## failures1 -0.89426 0.31109 -2.875 0.004275 **
## failures2 -0.75338 0.48838 -1.543 0.123766
## failures3 0.09257 0.53673 0.172 0.863165
## higheryes 0.29191 0.47432 0.615 0.538637
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' '
1
##
## Residual standard error: 1.896 on 378 degrees of freedom
## Multiple R-squared: 0.8327, Adjusted R-squared: 0.8279
## F-statistic: 171.1 on 11 and 378 DF, p-value: < 2.2e-16

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% và 1%?

*Với mức tin cậy α = 0.05

Giả thiết:

 H: biến không có ý nghĩa thống kê.


 H : biến có ý nghĩa thống kê.

Xét giá trị kiểm định t (Pr) của các biến độc lập:

 Pr (G1) = 0,006096 < 0.05 → bác bỏ giả thuyết H.


 Pr (G2) < 2e-16 = 2.10-16 < 0.05 → bác bỏ giả thuyết H.
 Pr (studytime4) < 0.05 → bác bỏ giả thuyết H.
 Pr (studytime2), Pr (studytime3) > 0.05 → chấp nhận giả thuyết H
 Pr (failures1) < 0.05 → bác bỏ giả thuyết H.
 Pr (failures2), Pr (failures3) > 0.05 → chấp nhận giả thuyết H
 Pr (higher) > 0.05 → chấp nhận giả thuyết H.
 Pr (absences) < 0.05 → bác bỏ giả thuyết H
 Pr (age) > 0.05 → chấp nhận giả thuyết H.

Như vậy, với mức tin cậy 5%, ta sẽ loại bỏ biến “studytime2”, “studytime3”,
“failures 2”, “failures3”, “higher” và “age” khỏi mô hình hồi quy tuyến tính
trên.

*Với mức tin cậy α = 0.01

Giả thiết:

 H: biến không có ý nghĩa thống kê.


 H : biến có ý nghĩa thống kê.

Xét giá trị kiểm định t (Pr) của các biến độc lập:

 Pr (G1) = 0,006096 < 0.01 → bác bỏ giả thuyết H.


 Pr (G2) < 2e-16 = 2.10-16 < 0.01 → bác bỏ giả thuyết H.
 Pr (studytime) > 0.01 → chấp nhận giả thuyết H.
 Pr (failures1) < 0.01 → bác bỏ giả thuyết H.
 Pr (higher) > 0.01 → chấp nhận giả thuyết H.
 Pr (absences) < 0.01 → bác bỏ giả thuyết H
 Pr (age) > 0.01 → chấp nhận giả thuyết H.

Như vậy, với mức tin cậy 1%, ta sẽ loại bỏ biến “studytime”, “failures2”,
“failures3”, “higher” và “age” khỏi mô hình hồi quy tuyến tính trên.

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 failure từ M2.

Dùng lệnhh anova() để đề xuất mô hình hồi quy hợp lý hơn.

m2=lm(G3~G1 + G2 + age + absences + studytime + failures,


data=new_DF)
summary(m2)
##
## Call:
## lm(formula = G3 ~ G1 + G2 + age + absences + studytime +
failures,
## data = new_DF)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.2397 -0.4506 0.2356 1.0436 3.8565
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.81744 1.37638 0.594 0.552930
## G1 0.15774 0.05676 2.779 0.005719 **
## G2 0.96650 0.04967 19.457 < 2e-16 ***
## age -0.14646 0.08099 -1.808 0.071345 .
## absences 0.04695 0.01234 3.806 0.000164 ***
## studytime2 -0.19531 0.23158 -0.843 0.399541
## studytime3 -0.02619 0.30897 -0.085 0.932505
## studytime4 -0.84169 0.41484 -2.029 0.043165 *
## failures1 -0.90951 0.30985 -2.935 0.003535 **
## failures2 -0.75346 0.48798 -1.544 0.123418
## failures3 0.01197 0.52008 0.023 0.981648
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' '
1
##
## Residual standard error: 1.894 on 379 degrees of freedom
## Multiple R-squared: 0.8326, Adjusted R-squared: 0.8282
## F-statistic: 188.5 on 10 and 379 DF, p-value: < 2.2e-16
m3=lm(G3~G1 + G2 + age + absences + studytime, data=new_DF)
summary(m3)
##
## Call:
## lm(formula = G3 ~ G1 + G2 + age + absences + studytime, data
= new_DF)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.0363 -0.4352 0.3016 1.0349 3.5001
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.29973 1.37085 0.948 0.343668
## G1 0.17298 0.05668 3.052 0.002433 **
## G2 0.97190 0.04991 19.472 < 2e-16 ***
## age -0.19726 0.07864 -2.508 0.012539 *
## absences 0.04143 0.01231 3.365 0.000842 ***
## studytime2 -0.16160 0.23189 -0.697 0.486295
## studytime3 -0.01635 0.30933 -0.053 0.957885
## studytime4 -0.75313 0.41608 -1.810 0.071073 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' '
1
##
## Residual standard error: 1.912 on 382 degrees of freedom
## Multiple R-squared: 0.828, Adjusted R-squared: 0.8249
## F-statistic: 262.7 on 7 and 382 DF, p-value: < 2.2e-16
anova(m1,m2)
## Analysis of Variance Table
##
## Model 1: G3 ~ G1 + G2 + age + absences + studytime +
failures + higher
## Model 2: G3 ~ G1 + G2 + age + absences + studytime +
failures
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 378 1358.3
## 2 379 1359.6 -1 -1.361 0.3788 0.5386

Nhận xét:

 Giả thiết H: Mô hình M1 và M2 giống nhau.


 Giả thiết H : 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 H → mô hình M1 và M2 giống nhau. Mặt khác, biến higher được loại bỏ
trong mô hình M2 không có ý nghĩa thống kê → chọn mô hình M2 sẽ tốt hơn
mô hình M1.

anova(m1,m3)
## Analysis of Variance Table
##
## Model 1: G3 ~ G1 + G2 + age + absences + studytime +
failures + higher
## Model 2: G3 ~ G1 + G2 + age + absences + studytime
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 378 1358.3
## 2 382 1396.7 -4 -38.389 2.6709 0.03194 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' '
1

Nhận xét:

 Giả thiết H: Mô hình M2 và M3 giống 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ả thiết
H, chấp nhận giả thiết H → 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.

* Vẽ đồ thị sai số hồi quy và sai số dự báo của mô hình M2.

plot(m2,which=1)

* Vẽ đồ thị sai số hồi quy và sai số dự báo của mô hình M3.

plot(m3,which=1)
Nhận xét: Nhìn vào 2 đồ thị của mô hình M2 và M3, ta nhận thấy đường màu
đỏ của mô hình M2 dao động gần đường y = 0 hơn so với M3, có thể nói mức
độ tập trung của các sai số của mô hình M2 là gần 0 hơn. Vì vậy, chọn mô
hình M2 là tốt hơn M3. Tóm lại, mô hình M2 là tốt nhất trong cả 3 mô hình.

Hoặc ta có thể nhận xét thông qua Adjusted R-squared của 2 mô hình M2 và
M3 thì thấy Adjusted R-Squared của M2 > M3 nên M2 là tốt nhất.

d) Từ mô hình hồi quy hợp lý nhất từ câu (c) hãy suy luận sự tác động
của các biến điểm thi cuối kì.

Từ câu (c), ta chọn mô hình M3 là mô hình hợp lý hơn.

Biến G3 là một biến phụ thuộc vào 4 biến độc lập: “G1”, “G2”, “studytime”,
“absences” và “age”. Dựa trên thông tin của mô hình M3, ta có đường hồi
quy tuyến tính mẫu như sau:

G3 = 1,29973 + 0,17298 (G1) + 0.97190 (G2) - 0.75313 (studytime) + 0.04143


(absences) - 0.19726 (age)

Các giá trị β của năm biến độc lập đều khác 0, cho thấy chúng đều có tác
động đến G3. Mối liên hệ này có ý nghĩa thống kê.
Xét đạo hàm theo từng biến độc lập, ta thấy mức độ ảnh hưởng như sau:

 G1 tăng 1 đơn vị, G3 tăng 0,17298 đơn vị.


 G2 tăng 1 đơn vị, G3 tăng 0,97190 đơn vị.
 studytime tăng 1 đơn vị, G3 giảm 0,75313 đơn vị.
 absences tăng 1 đơn vị, G3 tăng 0,04143 đơn vị.
 age tăng 1 đơn vị, G3 giảm 0,19726 đơn vị.

Từ kết quả trên, ta thấy biến G2 tác động nhiều nhất đến G3, điều này hợp lý
với thực tế.

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

plot(m2,which=1)

Ý nghĩa: đồ thị trên biểu thị sai số hồi quy và giá trị dự báo cho biến phụ
thuộc G3.

Nhận xét: Đồ thị vẽ sai số (phần dư) epiloni và giá trị dự báo cho G3. Từ đồ
thị cho thấy các giá trị phần dư tập trung quanh đường y=0, nên giả định của
phân tích hồi qui (epsilon có giá trị trung bình bằng 0) là có thể chấp nhận
được.
5. Dự báo (Predictions)

a) Trong dữ liệu của bạn, hãy tạo thêm biến đặt tên là evaluate, biến này
biểu diễn tỷ lệ đạt (G3 >= 10) hoặc không đạt (G3 < 10) của sinh viên
trong điểm thi cuối kì. Hãy thống kê tỷ lệ đạt/không đạt (Hàm gợi ý:
cbind() ).

evaluate=prop.table(table(new_DF$G3<10))
evaluate
##
## FALSE TRUE
## 0.674359 0.325641

b) Xét mô hình hồi quy hợp lý nhất mà bạn đã chọn trong câu 4(c). Hãy
lập một bảng số liệu mới đặt tên là new_X bao gồm toàn bộ các biến
độc lập trong mô hình này, và dùng lênh predict() để đưa ra số liệu dự
báo cho biến G3 phụ thuộc vào new_X. Gọi kết quả dự báo này là biến
pred_G3.

new_X=data.frame(new_DF[,c(1,2,4,5,6,7,8)])
new_X$pred_G3=predict(m2,new_X)
head(new_X)
## G1 G2 studytime failures absences higher age pred_G3
## 1 5 6 2 0 6 yes 18 4.855294
## 3 7 8 2 3 10 yes 15 7.742938
## 4 15 14 3 0 2 yes 15 14.585389
## 5 6 10 2 0 4 yes 16 9.078049
## 7 12 12 2 0 0 yes 16 11.769677
## 8 6 5 2 0 6 yes 17 4.192993

c) Khảo sát độ chính xác trong kết quả dự báo của câu trên bằng cách
lập một bảng so sánh kết quả dự báo pred_G3 với kết quả thực tế của
biến G3.

evaluate1 = prop.table(table(new_X$pred_G3>=10))
evaluate1
##
## FALSE TRUE
## 0.4717949 0.5282051
Ket_qua = data.frame(cbind(evaluate,evaluate1))
colnames(Ket_qua)=c("Quan sat","Du bao")
rownames(Ket_qua)=c("Khong dat", "Dat")
t(Ket_qua)
## Khong dat Dat
## Quan sat 0.6743590 0.3256410
## Du bao 0.4717949 0.5282051
PHẦN RIÊNG

Đề bài: Tập dữ liệu “Wine_data.csv” chứa thông tin về rượu vang trắng gồm
4898 mẫu được sản xuất ở Bồ Đào Nha. Dữ liệu gồm 12 đặc tính khác nhau
của rượu vang trắng, trong đó quality là dữ liệu dựa trên cảm quan, và là biến
rời rạc được xếp thứ tự từ 1 (tệ) đến 10 (tốt). Phần còn lại là về tính chất hóa
học của rượu và đều là biến liên tục. Dữ liệu gốc được cung cấp bởi:
https://online.stat.psu.edu/stat508/lesson/analysis-wine-quality-data?
fbclid=IwAR0HG40PF2YK8Sios0COmeT6gPAOSNLLS3yQPk-
BKjSx11xgyIyXONwM8rY

• fixed.acidity: độ chua cố định

• volatile.acidity: nồng độ acid dễ bay hơi

• citric.acid: nồng độ citric acid • residual.sugar: lượng đường dư •


free.sulfur.dioxide: lượng SO2 tự do

• density: khối lượng riêng

• pH: pH của rượu

• alcohol: độ cồn

• quality: chất lượng rượu

1. Đọc dữ liệu:

Wine_data=read.csv("C:/Users/DELL/Desktop/Wine_data.csv")

2. Làm sạch dữ liệu:


a) Trích ra dữ liệu con đặt tên là ruou chỉ bao gồm các biến chính trong phần
giới thiệu dữ liệu. Từ câu này trở về sau mọi yêu cầu đều xử lý dựa trên tập
dữ liệu con ruou.

ruou=data.frame(Wine_data[,c(1,2,3,4,6,8,9,11,12)])
#trich_xuat_du_lieu_can_quan_tam
head(ruou) #doc_du_lieu_voi_ten_la_ruou
## fixed.acidity volatile.acidity citric.acid residual.sugar
free.sulfur.dioxide
## 1 7.0 0.27 0.36 20.7
45
## 2 6.3 0.30 0.34 1.6
14
## 3 8.1 0.28 0.40 6.9
30
## 4 7.2 0.23 0.32 8.5
47
## 5 7.2 0.23 0.32 8.5
47
## 6 8.1 0.28 0.40 6.9
30
## density pH alcohol quality
## 1 1.0010 3.00 8.8 6
## 2 0.9940 3.30 9.5 6
## 3 0.9951 3.26 10.1 6
## 4 0.9956 3.19 9.9 6
## 5 0.9956 3.19 9.9 6
## 6 0.9951 3.26 10.1 6

b) 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 khuyết đó.

apply(is.na(ruou),2,which)
## integer(0)

Nhận xét: Không có dữ liệu khuyết trong tập tin ruou

3. Làm rõ dữ liệu:

a) Tính các giá trị: trung bình, trung vị, giá trị nhỏ nhất, giá trị lớn nhất và độ
lệch chuẩn, cho các biến liên tục. Sau đó xuất các kết quả tính được dưới
dạng bảng.
mean=apply(ruou[,c(1,2,3,4,5,6,7,8,9)],2,mean)
#tim_trung_binh_cua_du_lieu_duoc_trich
median=apply(ruou[,c(1,2,3,4,5,6,7,8,9)],2,median)
#tim_trung_vi_cua_du_lieu_duoc_trich
min=apply(ruou[,c(1,2,3,4,5,6,7,8,9)],2,min)
#tim_min_cua_du_lieu_duoc_trich
max=apply(ruou[,c(1,2,3,4,5,6,7,8,9)],2,max)
#tim_max_cua_du_lieu_duoc_trich
sd=apply(ruou[,c(1,2,3,4,5,6,7,8,9)],2,sd)
#tim_do_lech_chuan_cua_du_lieu_duoc_trich
gia_tri_tinh_duoc=data.frame(mean,median,max,min,sd)
#bang_tong_hop_du_lieu_tim_duoc
gia_tri_tinh_duoc #xuat_bang_tong_hop_du_lieu
## mean median max min
sd
## fixed.acidity 6.8547877 6.80000 14.20000 3.80000
0.843868228
## volatile.acidity 0.2782411 0.26000 1.10000 0.08000
0.100794548
## citric.acid 0.3341915 0.32000 1.66000 0.00000
0.121019804
## residual.sugar 6.3914149 5.20000 65.80000 0.60000
5.072057784
## free.sulfur.dioxide 35.3080849 34.00000 289.00000 2.00000
17.007137325
## density 0.9940274 0.99374 1.03898 0.98711
0.002990907
## pH 3.1882666 3.18000 3.82000 2.72000
0.151000600
## alcohol 10.5142670 10.40000 14.20000 8.00000
1.230620568
## quality 5.8779094 6.00000 9.00000 3.00000
0.885638575

b) Vẽ đồ thị phân phối của biến quality

Thống kê số lượng của biến quality:

table(ruou$quality)
##
## 3 4 5 6 7 8 9
## 20 163 1457 2198 880 175 5

Vẽ đồ thị phân phối của biến quality:


hist(ruou$quality,labels = T)

c) Dùng lệnh pairs() vẽ các phân phối của biến alcohol theo fixed.acidity,
volatile.acidity, citric.acid, residual.sugar,density, pH, free.sulfur.doxide.
Các biểu đồ được đặt tên từ 1 đến 7

pairs(alcohol~fixed.acidity, main="1",data=ruou)
#bieu_do_phan_phoi_alcohol_theo_fixed.acidity
pairs(alcohol~volatile.acidity,main="2",data=ruou)
#bieu_do_phan_phoi_alcohol_theo_volatile.acidity

pairs(alcohol~citric.acid,main="3",data=ruou)
#bieu_do_phan_phoi_alcohol_theo_citric.acid
pairs(alcohol~residual.sugar,main="4",data=ruou)
#bieu_do_phan_phoi_alcohol_theo_residual.sugar

pairs(alcohol~density,main="5",data=ruou)
#bieu_do_phan_phoi_alcohol_theo_density
pairs(alcohol~pH,main="6",data=ruou)
#bieu_do_phan_phoi_alcohol_theo_pH

pairs(alcohol~free.sulfur.dioxide,main="7",data=ruou)
#bieu_do_phan_phoi_alcohol_theo_free.sulfur.dioxide
Nhận xét: Biểu đồ 5,7 ta thấy có quan hệ tuyến tính khá rõ rệt giữa alcohol
với các biến density,free.sulfur.dioxide, cụ thể là quan hệ nghịch biến. Các
biến còn lại phân tán khá ổn định theo đường thẳng tuy nhiên vẫn chưa đủ
cơ sở để ta chỉ dựa vào quan sát để kết luận là đồng biến hay nghịch biến.

4. Xây dựng mô hình hồi quy tuyến tính:

Khi tung ra sản phẩm rượu vang ra thị trường nhà sản xuất cần quan tâm đến
quy định về độ cồn được quy định ở thị trường đó. Đồng thời đứng về phía
người tiêu dùng độ cồn có trong sản phẩm cũng là một trong những yếu tố
được quan tâm khi chọn sản phẩm vì nó sẽ liên quan đến thị hiếu, sức khỏe,…
của khách hàng. Do đó ta sẽ tìm hiểu những nhân tố hóa học nào tác động
đến độ cồn của rượu vang trắng.

a) Xét mô hình hồi quy tuyến tính bao gồm biến alcohol là một biến phụ
thuộc, và tất cả các biến thuộc về tính chất hóa học còn lại 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.

m1=lm(alcohol~ fixed.acidity + volatile.acidity + citric.acid +


residual.sugar + density + pH + free.sulfur.dioxide, data=ruou)
summary(m1)
##
## Call:
## lm(formula = alcohol ~ fixed.acidity + volatile.acidity +
citric.acid +
## residual.sugar + density + pH + free.sulfur.dioxide,
data = ruou)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.3157 -0.2622 -0.0329 0.2305 16.0732
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.754e+02 4.461e+00 151.395 < 2e-16
***
## fixed.acidity 5.168e-01 9.892e-03 52.247 < 2e-16
***
## volatile.acidity 8.759e-01 6.645e-02 13.181 < 2e-16
***
## citric.acid 4.433e-01 5.768e-02 7.685 1.83e-14
***
## residual.sugar 2.357e-01 2.647e-03 89.057 < 2e-16
***
## density -6.825e+02 4.584e+00 -148.887 < 2e-16
***
## pH 2.568e+00 5.160e-02 49.766 < 2e-16
***
## free.sulfur.dioxide -2.323e-03 4.123e-04 -5.634 1.86e-08
***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' '
1
##
## Residual standard error: 0.4587 on 4890 degrees of freedom
## Multiple R-squared: 0.8613, Adjusted R-squared: 0.8611
## F-statistic: 4338 on 7 and 4890 DF, p-value: < 2.2e-16

b) Dựa vào mô hình hồi quy tuyến tính trên, những biến nào sẽ bị loại khỏi
mô hình với mức ý nghĩa là 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 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
(fixed.acidity,volatile.acidity,citric.acid,residual.sugar,density,pH,free.sulfur.di
oxide) đều có ý nghĩa thống kê. Do đó ta sẽ không loại bỏ biến nào cả ra khỏi
mô hình.

c) Từ mô hình vừa được thành lập hãy suy luận ảnh sự ảnh hưởng của các
biến lên độ cồn.

Nhận xét: Dựa vào kết quả của mô hình hồi quy m1 ta nhận thấy các
biến fixed.acidity,volatile.acidity,residual.sugar,density,pH đề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 độ cồn. Tiếp đến các biến citric.acid có
Pr(>|t|) = 1.83e-14 và free.sulfur.dioxide có Pr(>|t|) = 1.86e-08 cũng rất thấp
cũng ảnh hưởng nhiều đến độ cồn nhưng sẽ ít hơn những biến còn lại.Mặt
khác các hệ số hồi quy của 1 biến dự báo cũng được xem như ảnh hưởng
trung bình lên biến phụ thuộc là độ cồn khi tăng hoặc giả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. Ví dụ: hệ số hồi quy
của biến pH là 2.568e+00 vậy nếu pH tăng lên 1 đơn vị (giả sử các biến dự
báo còn lại không đổi) ta có thể kì vọng độ rượu tăng thêm 2.568 đơn vị.
Tương tự hệ số hồi quy của biến free.sulfur.dioxide là -2.323e-03 vậy khi
free.sulfur.dioxide tăng lên 1 đơn vị ta có thể kì vọng độ rượu giảm đi
0.002323 đơn vị.

d) Hãy vẽ đồ thị biểu thị sai số hồi quy (residuals) và giá trị dự báo (fitted
values)

plot(m1,which = 1)
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
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ố.

5. Dự báo:

Từ mô hình bạn chọn trong câu 4, hãy dùng lệnh predict() để dự báo độ
cồn:

X1: fixed.acidity = mean(fixed.acidity), volatile.acidity = mean(volatile.acidity),


citric.acid = mean(citric.acid), residual.sugar = mean(residual.sugar), density =
mean(density), pH = mean (pH), pH = mean(pH), free.sulfur.dioxide =
mean(free.sulfur.dioxide)

X2: fixed.acidity = max(fixed.acidity), volatile.acidity = max(volatile.acidity),


citric.acid = max(citric.acid), residual.sugar = max(residual.sugar), density =
max(density), pH = mean(pH), pH = max(pH), free.sulfur.dioxide =
max(free.sulfur.dioxide)

#Tạo thuộc tính X1 và dự báo:


X1=data.frame(fixed.acidity=mean(ruou$fixed.acidity),
volatile.acidity=mean(ruou$volatile.acidity),
citric.acid=mean(ruou$citric.acid),
residual.sugar=mean(ruou$residual.sugar),
density=mean(ruou$density), pH=mean(ruou$pH),
free.sulfur.dioxide=mean(ruou$free.sulfur.dioxide))
predict_X1=predict(m1,X1,interval="confidence")
predict_X1
## fit lwr upr
## 1 10.51427 10.50142 10.52712

#Tạo thuộc tính X2 và dự báo:

X2=data.frame(fixed.acidity=max(ruou$fixed.acidity),
volatile.acidity=max(ruou$volatile.acidity),
citric.acid=max(ruou$citric.acid),
residual.sugar=max(ruou$residual.sugar),
density=max(ruou$density), pH=max(ruou$pH),
free.sulfur.dioxide=max(ruou$free.sulfur.dioxide))
predict_X2= predict(m1,X2,interval="confidence")
predict_X2
## fit lwr upr
## 1 -0.02581995 -0.3509751 0.2993352

So sánh khoảng tin cậy của hai dự báo trên:

#Tạo bảng thể hiện độ cồn ở hai thuộc tính X1 và X2:

pred=data.frame(rbind(predict_X1,predict_X2))

#Đổi tên dòng thành X1 và X2

rownames(pred) = c("X1","X2")

#Tính khoảng tin cậy của mỗi thuộc tính X1 và X2, sau đó xuất kết quả dưới
dạng bảng thống kê:

pred$range =pred$upr - pred$lwr


pred
## fit lwr upr range
## X1 10.51426705 10.5014189 10.5271151 0.0256962
## X2 -0.02581995 -0.3509751 0.2993352 0.6503102
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.

You might also like