Professional Documents
Culture Documents
BTL2 - Nguyễn Việt Ngân - 1914289 1
BTL2 - Nguyễn Việt Ngân - 1914289 1
CITY
UNIVERSITY
OF
TECHNOLOGY
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:
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"
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:
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)
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)
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)
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
table(new_DF$floors)
##
## 1 1.5 2 2.5 3 3.5
## 10672 1909 8230 161 613 8
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.
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.
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.
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.
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%?
Giả thiết:
Xét giá trị kiểm định t (Pr) của các biến độc lập:
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
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
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à.
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:
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
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=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")
predict_X1=predict(m1,X1,interval = "confidence")
predict_X1
## fit lwr upr
## 1 5.66139 5.657203 5.665577
*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:
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.
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)
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)
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.
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.
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:
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.
* 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.
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%?
Giả thiết:
Xét giá trị kiểm định t (Pr) của các biến độc lập:
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.
Giả thiết:
Xét giá trị kiểm định t (Pr) của các biến độc lập:
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.
Nhận xét:
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:
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.
plot(m2,which=1)
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ì.
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:
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:
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
• alcohol: độ cồn
1. Đọc dữ liệu:
Wine_data=read.csv("C:/Users/DELL/Desktop/Wine_data.csv")
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)
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
table(ruou$quality)
##
## 3 4 5 6 7 8 9
## 20 163 1457 2198 880 175 5
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.
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.
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%?
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:
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
pred=data.frame(rbind(predict_X1,predict_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ê: