ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
BÀI TẬP LỚN
MƠN HỌC XÁC SUẤT THỐNG KÊ
NHĨM GT.07 – ĐỀ TÀI 01 – HỌC KỲ 211
KHOA KỸ THUẬT GIAO THÔNG
NGÀY NỘP :
GVHD :
STT
21/11/2021
ThS. Nguyễn Kiều Dung
TÊN SINH VIÊN
MSSV
Tổ
Ngành học
01
Huỳnh Gia Hịa
2012244
L09-A
GT-THK
02
Văn Viết Duy
2011582
L09-B
GT-THK
03
Đồn Tấn Thành
2014489
L09-C
GT-THK
04
Phạm Minh Tín
2014753
L09-C
GT-THK
Thành phố Hồ Chí Minh, 2021
1
Ký tên
MỤC LỤC
– PHẦN 1 – CƠ SỞ LÝ THUYẾT .................................................................... 1
1.
Khái niệm ................................................................................................................. 1
2.
Giả định của các sai số ngẫu nhiên .......................................................................... 1
3.
Ước lượng các hệ số hồi quy trong mơ hình hồi quy tuyến tính đơn ....................... 1
4.
Độ đo sự biến thiên của dữ liệu ................................................................................ 2
5.
Hệ số xác định .......................................................................................................... 3
6.
Phân tích tương quan ................................................................................................ 4
7.
Khoảng tin cậy cho các hệ số hồi quy ...................................................................... 4
– PHẦN 2 – BÀI TẬP ỨNG DỤNG ................................................................. 5
I.
Phần chung .................................................................................................................... 5
1.
Đọc dữ liệu (Import Data): ....................................................................................... 5
2.
Làm sạch dữ liệu (Data Cleaning): .......................................................................... 5
(a)
Trích xuất dữ liệu ................................................................................................. 6
(b)
Kiểm tra dữ liệu khuyết ........................................................................................ 6
3.
Làm rõ dữ liệu (Data Visualization) ........................................................................ 7
(a)
Chuyển đổi biến .................................................................................................... 7
(b)
Thống kê mô tả : Thống kê mẫu ........................................................................... 7
(c)
Thống kê mô tả : Dùng đồ thị ............................................................................. 10
4.
Xây dựng mơ hình hồi quy tuyến tính.................................................................... 14
5.
Dự báo (Prediction) ................................................................................................ 17
II.
Phần riêng .................................................................................................................... 18
1.
Đọc dữ liệu (Import Data): ..................................................................................... 18
2.
Làm sạch dữ liệu (Data Cleaning): ........................................................................ 18
3.
Làm rõ dữ liệu (Data Visualization) ...................................................................... 19
(a)
Thống kê biến liên tục ........................................................................................ 19
2
(b)
Thống kê biến phân loại ..................................................................................... 19
(c)
Vẽ đồ thị phân phối ............................................................................................ 20
4.
Xây dựng mơ hình hồi quy tuyến tính.................................................................... 23
5.
Dự báo (Prediction) ................................................................................................ 26
3
CƠ SỞ LÝ THUYẾT
– PHẦN 1 –
Lý thuyết hồi quy tuyến tính đơn
1. Khái niệm
Một mơ hình thống kê tuyến tính đơn (Simple linear regression model) liên quan đến một
biến ngẫu nhiên Y và một biến giải thích X là phương trình có dạng:
Y = 0 + 1 X +
Trong đó:
+ 0 , 1 là các tham số chưa biết, gọi là các hệ số hồi quy.
+ X là biến độc lập, giải thích cho Y .
+ là thành phần sai số, được giả sử có phân phối chuẩn với E ( ) = 0 và Var ( ) = 2
.Với ( x1 , y1 ) ,..., ( xn , yn ) là n cặp giá trị quan trắc của một mẫu ngẫu nhiên kích thước n ,
từ phương trình ta có:
yi = 0 + 1 xi + i (*)
2. Giả định của các sai số ngẫu nhiên
Các sai số ngẫu nhiên i , i = 1, 2,3,..., n trong mơ hình (*) được giả sử thỏa các điều kiện
sau:
+ Các sai số i độc lập với nhau.
+ E ( i ) = 0 và Var ( i ) = 2 .
+ Các sai số có phân phối chuẩn: i
N ( 0, 2 ) với phương sai không đổi. Với quan trắc
X đã biết, E (Y | X ) = 0 + 1 X , từ đó suy ra Y
N ( 0 + 1 X , 2 ) .
3. Ước lượng các hệ số hồi quy trong mơ hình hồi quy tuyến tính đơn
Phương trình hồi quy tuyến tính Y theo X với các hệ số ước lượng (fitted regression line)
có dạng:
yˆ = ˆ0 + ˆ1 x
Trong đó: ˆ0 và ˆ1 là các hệ số ước lượng cho 0 và 1 , được tìm từ phương pháp bình
phương cực tiểu (method of least squares). Đây là đường thằng hồi quy mẫu, xấp xỉ tốt
1
nhất có thể đi qua các điểm dữ liệu. Dựa vào phương pháp bình phương cực tiểu, các hệ
số ước lượng được tính như sau:
ˆ1 =
S xy ˆ
; 0 = y − ˆ1 x
S xx
Với S xx và S xy xác định bởi:
n
S xx = ( xi − x )
i =1
2
n
xi
n
2
= xi − i =1
n
i =1
2
n n
xi yi
n
n
S xy = ( xi − x )( yi − y ) = xi yi − i =1 i =1
n
i =1
i =1
Các ước lượng ˆ0 và ˆ1 tìm được gọi là các ước lượng bình phương bé nhất. Phương
trình hồi quy Yˆ = ˆ0 + ˆ1 X gọi là đường thẳng bình phương bé nhất, thỏa các tính chất
sau:
n
2
+ SSE = ( yi − yˆi ) đạt giá trị bé nhất, với SSE là tổng bình phương sai số (Sum of
i =1
Squares for Errors).
n
n
i =1
i =1
+ SE = ( yi − yˆi ) = ei = 0 , với SE là tổng các sai số (Sum of Errors).
Cách trình bày khác của bài tốn ước lượng các hệ số hồi quy trong mơ hình hồi quy tuyến
tính đơn
Phương trình hồi quy mẫu Y theo X có dạng:
yˆ = ˆ0 + ˆ1 x
Trong đó:
n
xy − x . y ˆ
ˆ1 =
; 0 = y − ˆ1 x với xy =
sˆx 2
x y
i
i =1
i
n
4. Độ đo sự biến thiên của dữ liệu
Tổng bình phương tồn phần (Total Sum of Squares), kí hiệu SST .
n
SST = ( yi − y )
i =1
2
2
Ý nghĩa: Đo sự biến thiên của các giá trị yi xung quanh giá trị trung tâm của dữ liệu y .
Tổng bình phương hồi quy (Regression Sum of Squares), kí hiệu SSR .
n
SSR = ( yˆi − y )
2
i =1
Ý nghĩa: Giải thích sự biến thiên liên quan đến mối quan hệ tuyến tính của X và Y .
Tổng bình phương sai số (Error Sum of Squares), kí hiệu SSE .
n
SSE = ( yi − yˆi )
2
i =1
Ý nghĩa: Giải thích sự biến thiên của các yếu tố khác (khơng liên quan đến mối quan hệ
tuyến tính của X và Y . Ta có: SST = SSR + SSE .
5. Hệ số xác định
3
Hệ số xác định (coefficient of determination) là tỷ lệ của tổng sự biến thiên trong biến phụ
thuộc gây ra bởi sự biến thiên của các biến độc lập (biến giải thích) so với tổng sự biến
thiên tồn phần. Hệ số xác định thường được gọi là R - bình phương (R-squared), ký hiệu
là R 2 .
Cơng thức tính: R 2 =
SSR
SST
Hệ số xác định của một mơ hình hồi quy cho phép ta đánh giá mơ hình tìm được có giải
thích tốt cho mối liên hệ giữa biến phụ thuộc Y và biến phụ thuộc X hay không?
6. Phân tích tương quan
Phân tích tương quan (Correlation Analysis) dùng để đo độ mạnh của mối liên hệ tuyến
tính giữa hai biến ngẫu nhiên. Ta thường sử dụng: hiệp phương sai và hệ số tương quan
để phân tích tương quan. Xét hai biến ngẫu nhiên X , Y , hiệp phương sai (Covariance)
của X và Y , ký hiệu là Cov ( X , Y ) , được định nghĩa như sau:
Cov ( X , Y
) = E ( XY ) − E ( X ) .E (Y )
Và hệ số tương quan (Correlation coefficient) của hai biến ngẫu nhiên X và Y , ký hiệu
XY , được xác định như sau: XY =
Cov ( X , Y )
Var ( x ) .Var (Y )
.
Với mẫu ngẫu nhiên cỡ n : ( X i , Yi ) , i = 1, ..., n. Hệ số tương quan mẫu, ký hiệu rXY , được
xác định như sau: rXY =
S XY
.
S XX .SYY
Hệ số xác định R 2 của mơ hình hồi quy tuyến tính đơn bằng với bình phương của hệ số
2
tương quan mẫu: R 2 = rXY
.
7. Khoảng tin cậy cho các hệ số hồi quy
(
)
Khoảng tin cậy cho hệ số chặn 0 : ˆ0 − 0 ; ˆ0 + 0 . Trong đó: 0 = tn − 2 .
2
(
)
Khoảng tin cậy cho hệ số góc 1 : ˆ1 − 1 ; ˆ1 + 1 . Trong đó: 1 = tn − 2 .
2
4
SSE.x 2
sˆX . n ( n − 2 )
SSE
sˆX . n ( n − 2 )
BÀI TẬP ỨNG DỤNG
– PHẦN 2 –
I. Phần chung
Tập tin "gia_nha.csv" chứa thông tin về giá bán ra thị trường (đơn vị đô la) của 21613 ngôi
nhà ở quận King nước Mỹ trong khoảng thời gian từ tháng 5/2014 đến 5/2015. Bên cạnh giá
nhà, dữ liệu còn bao gồm các thuộc tính mơ tả chất lượng ngơi nhà. Dữ liệu gốc được cung
cấp tại: />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 khn viên nhà.
• sqft_basement: Diện tích tầng hầm.
Câu hỏi:
1. Đọc dữ liệu (Import Data):
Dùng lệnh gia_nha <- read.csv("C:/Users/gia_nha.csv") để đọc tệp tin gia_nha.csv và gán
cho tệp tin được được có tên là gia_nha.
2. Làm sạch dữ liệu (Data Cleaning):
5
(a) Trích xuất dữ liệu
Trích dữ liệu đến tệp con mới 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.
• Sử dụng lệnh names(gia_nha) để đọc tên các cột từ 1 đến 24.
• Sử dụng lệnh new_DF <- data.frame(gia_nha[,c(6,11,14,13,16,23,17)]) để chọn các
cột 6, 11, 14, 13, 16, 9, 17 tương ứng với các biến chính price, floors, condition, view,
sqft_above, sqft_living, sqft_basemant.
(b) Kiểm tra dữ liệu khuyết
• Sử dụng lệnh apply(is.na(new_DF),2,which) để kiểm tra và xuất ra giá trị khuyết của
các biến có trong dữ liệu new_DF.
• Sử dụng lệnh colSums(is.na(new_DF)) để đếm số lượng giá trị khuyết.
Nhận xét: Có 20 dữ liệu khuyết ở biến price. Vì lượng dữ liệu khuyết thấp (dưới 10% so
với các quan sát của cả dữ liệu nên sẽ xử lý dữ liệu khuyết bằng cách xóa các quan sát
chứa dữ liệu khuyết.
6
• Sử dụng lệnh new_DF <- na.omit(new_DF) để xóa các dữ liệu khuyết trong tệp
new_DF.
3. Làm rõ dữ liệu (Data Visualization)
(a) Chuyển đổi biến
• Chuyển đổi các biến price, sqft_above, sqft_living lần lượt thành log(price), log(sqft_
above), và log(sqft_living).
• Dùng lệnh log() để đổi dữ liệu sang log. Kí hiệu new_DF$ là trích lấy biến thuộc tập
new_DF.
• Dùng lệnh new_DF <- data.frame(price.log, sqft_above.log, sqft_living.log,
condition, floors, sqft_basement, view) để chuyển các dữ liệu đã chuyển đổi sang tệp
mới tên new_DF thay cho dữ liệu cũ.
(b) Thống kê mô tả : Thống kê mẫu
Đối với những biến liên tục, 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()).
• Sử dụng hàm mean = apply(new_DF [,c(1,2,3,6)],2,mean) để tính trung bình của các
biến liên tục (price.log, sqft_above.log, sqft_living.log, sqft_basement) và lưu vào
biến c tên là mean.
7
• Sử dụng hàm median = apply(new_DF [,c(1,2,3,6)],2,median) để tính trung vị của các
biến liên tục (price.log, sqft_above.log, sqft_living.log, sqft_basement) và lưu vào
biến c tên là median.
• Sử dụng hàm sd = apply(new_DF [,c(1,2,3,6)],2,sd) để tính độ lệch chuẩn của các biến
liên tục (price.log, sqft_above.log, sqft_living.log, sqft_basement) và lưu vào biến c
tên là sd.
• Sử dụng hàm max = apply(new_DF [,c(1,2,3,6)],2,max) để tính giá trị lớn nhất của các
biến liên tục (price.log, sqft_above.log, sqft_living.log, sqft_basement) và lưu vào
biến c tên là max.
• Sử dụng hàm min = apply(new_DF [,c(1,2,3,6)],2,min) để tính giá trị nhỏ nhất của các
biến liên tục (price.log, sqft_above.log, sqft_living.log, sqft_basement) và lưu vào
biến c tên là min.
• Sử dụng lệnh descriptive_statistics <- data.frame (mean,median,sd,max,min) để tạo
matrix thể hiện các giá trị thống kê mô tả cho biến liên tục, lưu vào biến
descriptive_statistics.
• Sử dụng lệnh as.data.frame(descriptive_statistics) để chuyển matrix thành dạng bảng
dữ liệu.
Đối với các biến phân loại, (view, floors, condition) sẽ lập bảng thống kê số lượng cho
từng loại.
• Sử dụng hàm table(new_DF$condition) để tạo bảng thống kê số lượng cho biến
condition.
8
• Sử dụng hàm table(new_DF$floors) để tạo bảng thống kê số lượng cho biến floors.
• Sử dụng hàm table(new_DF$view) để tạo bảng thống kê số lượng cho biến view.
Dựa vào kết quả ta thấy,
condition, có
30 ngơi nhà được đánh giá là rất tệ trong dữ liệu new_DF;
172 ngôi nhà được đánh giá là tệ trong dữ liệu new_DF;
14016 ngôi nhà được đánh giá trung bình trong dữ liệu new_DF;
5677 ngơi nhà được đánh giá là tốt trong dữ liệu new_DF;
1698 ngôi nhà được đánh giá là rất tốt trong dữ liệu new_DF.
floors, có
10672 ngơi nhà được phân loại 1 tầng trong dữ liệu new_DF;
1909 ngôi nhà được phân loại 1.5 tầng trong dữ liệu new_DF;
8230 ngôi nhà được phân loại 2 tầng trong dữ liệu new_DF;
161 ngôi nhà được phân loại 2.5 tầng trong dữ liệu new_DF;
613 ngôi nhà được phân loại 3 tầng trong dữ liệu new_DF;
8 ngôi nhà được phân loại 3.5 tầng trong dữ liệu new_DF.
view, có
19472 ngơi nhà được có cảnh quan là rất thấp trong dữ liệu new_DF;
331 ngơi nhà được có cảnh quan là thấp trong dữ liệu new_DF;
962 ngơi nhà được có cảnh quan là trung bình trong dữ liệu new_DF;
509 ngơi nhà được có cảnh quan là cao trong dữ liệu new_DF;
319 ngơi nhà được có cảnh quan là rất cao trong dữ liệu new_DF.
9
(c) Thống kê mơ tả : Dùng đồ thị
• Dùng hàm hist(new_DF$price.log, xlab = "Gia_nha", ylab = "So_luong", main =
"Do thi phan phoi gia nha", ylim = c(0,8000)) để vẽ đồ thị phân phối của biến
price.log.
Nhận xét: Dựa trên đồ thị, ta nhận thấy phân khúc nhà có giá trị (price.log) từ 12.5 đến
13.5 rất được ưa chuộng, và được ưa chuộng nhất là 12.5 – 13; đồ thị giãn ra ở hai đầu
11.5 – 12 và 14.5 – 15 cho thấy xu hướng chọn nhà và ít được ưa chuộng.
• 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 condition, floors và view.
o Lệnh boxplot(price.log~condition, main = "Boxplot of price for each category of
conditon", data = new_DF) vẽ phân phối biến price cho từng nhóm phân loại của
biến condition.
10
Nhận xét:
▪ Đồ thị boxplot thể hiện sự phân bố dữ liệu. Thể hiện được giới hạn của dữ liệu
và phân tích dữ liệu tập trung nhiều trong box.
▪ Nhìn chung giới hạn price.log từ 11 đến 15.
▪ Đường gạch đen giữa thể hiện trung vị . Ở condition 3, 4, 5 đường trung vị của
price ở mức cao tầm 13, trung vị nằm gần chính giữa chứng tỏ condition càng
cao thì price.log tăng theo tương ứng với mức độ condition.
▪ Ở các condition cao 3, 4, 5 thì xuất hiện các dữ liệu ngồi biên giới hạn, cịn ở
condition 1, 2 ít xuất hiện, dường như khơng có. Điều này thể hiện rằng ở mức
condition 3, 4, 5 có nhiều biến động, nhìn chung người giao dịch có thể đưa giá
cao hơn mức trung bình cho khách hàng mà khách hàng vẫn hài lòng chấp nhận.
Ở mức condition 1, 2 ít biến động, dữ liệu phân bố đều trong box.
o Lệnh boxplot(price.log~condition, main = "Boxplot of price for each category of
conditon", data = new_DF) vẽ phân phối biến price cho từng nhóm phân loại của
biến condition.
11
Nhận xét:
▪ Nhìn chung , giới hạn price.log từ 11 đến 15.
▪ Dựa vào mức trung vị , nhìn chung thể hiện rằng dữ liệu phân bố không đều.
Không thể kết luận price.log sẽ tăng phụ thuộc theo floors.
▪ Ở mức floors 1,2,3 có nhiều dữ liệu nằm ngồi vùng giới hạn. thể hiện rằng ở
đây có khá nhiều biến động, nhìn chung price.log sẽ khơng ổn định.
o Lệnh boxplot(price.log~condition, main = "Boxplot of price for each category of
conditon", data = new_DF) vẽ phân phối biến price cho từng nhóm phân loại của
biến condition.
12
Nhận xét:
▪ Giới hạn price.log từ 11 đến 16.
▪ Đường gạch đen trung vị chứng tỏ view càng cao thì giá nhà sẽ cao hơn.
Chứng tỏ giá nhà sẽ tăng theo view.
▪ Ở các view 1 , 2 ,3 có kha khá dữ liệu nằm ngoài vùng giới hạn , nhất là tại
view 0 có rất nhiều dữ liệu nằm ngồi. Điều này chứng tỏ với các view thấp
thì mức giá nhà có nhiều biến động, ít phụ thuộc vào view . Người ra giá nhà
có thể đưa ra giá cao hơn mà khách hàng vẫn chấp nhận.
▪ Ở các view 3, 4 giá nhà cao và có độ ổn định.
• Dùng lệnh pairs() vẽ các phân phối biến price lần lượt theo các biến
sqft_basement, sqft_above và sqft_living.
o Lệnh pairs(price.log~sqft_basement, main="Pairs of price for sqft_ basement",
data = new_DF) vẽ các phân phối của biến price theo biến sqft_basement.
o Lệnh pairs(price.log~sqft_above, main="Pairs of price for sqft_ above", data =
new_DF) vẽ các phân phối của biến price theo biến sqft_above.
13
o Lệnh pairs(price.log~sqft_living, main="Pairs of price for sqft_ living", data =
new_DF) vẽ các phân phối của biến price theo biến sqft_living.
4. Xây dựng mơ hình hồi quy tuyến tính
• Mơ hình M1 gồm price phụ thuộc vào các biến độc lập với câu lệnh
M1 = lm(price.log~., data = new_DF)
14
Nhận xét: Kết quả trên cho chúng ta thông tin về hệ số góc của các biến độc lập và chúng
tác động đên biến price.log như thế nào . Xét dòng Signif.codes, ta thấy rằng R đánh giá
mức ý nghĩa 19 của từng biến độc lập là *** (Quy đổi tức là mức ý nghĩa đó bằng 0 hoặc
gần bằng 0 và tất nhiên nhỏ hơn 5% theo yêu cầu của đề bài).
Kết luận: Các hệ số hồi quy khác 0 và đáng kể, có ảnh hưởng đến biến price.log, nên
khơng loại biến nào khỏi mơ hình. Có thể hiểu Signif.codes như mức độ quan trọng của
từng biến. Biến đó được đánh giá càng cao thì càng quan trọng và không thể bỏ qua sai
số tiêu chuẩn (Residuals standard error) là 0.3698.
Từ đó ta có thể suy ra phương trình hồi quy tuyến tính của biến Price như sau:
price.log = 7.427 + 0.0002004*sqft_basement + 0.3144*sqft_above.log +
0.3702*sqft_ living.log + 0.117 *floors + 0.06996*condition + 0.1224*view
Nhóm sẽ xây dựng thêm mơ hình M2 dựa trên các biến độc lập như M1 nhưng khơng xét
đến biến condition.
• Mơ hình M2 với câu lệnh M2 = lm(price.log~sqft_basement + floors + sqft_
above.log + sqft_living.log).
15
• Sử dụng lệnh anova() để xuất mơ hình hồi quy hợp lý hơn từ mơ hình M1 và M2.
Giả thiết:
H 0 : M1 và M2 có hiệu quả như nhau;
H 1 : M1 và M2 có hiệu quả khác nhau.
Nhận thấy giá trị Pr( F ) 2.2−16 5% , suy ra M1 và M2 có hiệu quả khác nhau.
Nhận xét: Từ bảng summary (M1), ta biết được các hệ số hồi quy ứng với các biến của
mô hình M1 đều có ý nghĩa thống kê, tức là các biến đều ảnh hưởng đến giá trị giá nhà.
Nhận thấy R-squared của mơ hình M1 là 0.5069 lớn hơn R-squared của mơ hình M2 là
0.5. Có nghĩa là mơ hình M1 giúp giải thích được khoảng 50.69% sự biến động của biến
price.log, trong khi đó mơ hình M2 giải thích được khoảng 50% sự biến động của
price.log. Do đó ta chọn mơ hình M1 là mơ hình hợp lí hơn.
16
Như kết luận ở trên thì mơ hình M1 cho biết nhiều yếu tố tác động lên giá nhà. Vì vậy mơ
hình M2 loại bỏ biến condition nên sẽ gây ra sai số lên giá nhà.
Kết luận: Mơ hình M1 hợp lý hơn.
5. Dự báo (Prediction)
• Thực hiện khai báo biến x1, x2 và dự báo price.log tại giá trị trung bình và giá trị cao
nhất của các biến.
• Dùng lệnh predict() để thực hiện dự đoán.
So sánh khoảng tin cậy, có các nhận xét sau:
o Với thuộc tính x1, giá trị dự đoán giá nhà là 13.53946 với khoảng tin cậy là
(13.51234; 13.56658).
o Với thuộc tính x2, giá trị dự đoán giá nhà là 15.72536 với khoảng tin cậy là
(15.06636; 15.84435).
o Độ dài tin cậy của x2 (upr-lwr) là 0.23799 lớn hơn x1 (upr-lwr) là 0.05424. Sự
chênh lệch này quá lớn nên thuộc tính x1 đáng tin cậy hơn.
17
II. Phần riêng
Tập tin "airfoil_self_noise.csv" chứa thông tin về tiếng ồn phát ra từ cánh máy bay. Dữ liệu
gốc được cung cấp tại: />Các biến chính trong bộ dữ liệu:
• frequency: Tần số dao động (Hz).
• angle of attack: Góc tấn (độ).
• chord length: Độ dài hợp âm (m).
• free-stream velocity: Vận tốc gió (m/s).
• suction side displacement thickness: Độ dày dịch chuyển phía bên hút (m).
• scaled sound pressure level: Mức áp suất âm thanh được chia tỉ lệ (dB).
Câu hỏi:
1. Đọc dữ liệu (Import Data):
• Dùng lệnh airfoil_ self_noise <- read.csv("C:/Users/gia_nha.csv") để đọc tệp tin
gia_nha.csv và gán cho tệp tin được được có tên là airfoil_self_noise.
• Dùng lệnh colnames(airfoil_self_noise)[c(1:6)] <- c(“freq”, “angle”, "chordlength",
"velocity", "thickness" và "SPL") để gán tương ứng tên các cột của bảng dữ liệu.
2. Làm sạch dữ liệu (Data Cleaning):
Kiểm tra dữ liệu khuyết
18
• Sử dụng lệnh apply(is.na(airfoil_self_noise),2,which) để kiểm tra và xuất ra giá trị
khuyết của các biến có trong dữ liệu airfoil_self_noise.
• Sử dụng lệnh colSums(is.na(airfoil_self_noise)) để đếm số lượng giá trị khuyết.
Nhận xét: Khơng có dữ liệu khuyết ở tệp dữ liệu airfoil_self_noise.
3. Làm rõ dữ liệu (Data Visualization)
(a) Thống kê biến liên tục
• Sử dụng hàm mean = apply [airfoil_self_noise,c(1,2,5,6)],2,mean) để tính trung bình
của các biến liên tục (freq, angle, thickness, SPL) và lưu vào biến c tên là mean.
• Sử dụng hàm median = apply(airfoil_self_noise,c(1,2,5,6)],2,median) để tính trung vị
của các biến liên tục (freq, angle, thickness, SPL) và lưu vào biến c tên là median.
• Sử dụng hàm sd = apply(airfoil_self_noise,c(1,2,5,6)],2,sd) để tính độ lệch chuẩn của
các biến liên tục (freq, angle, thickness, SPL) và lưu vào biến c tên là sd.
• Sử dụng hàm max = apply(airfoil_self_noise,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 (freq, angle, thickness, SPL) và lưu vào biến c tên là max.
(b) Thống kê biến phân loại
• Sử dụng hàm table(airfoil_self_noise$chordlength) để tạo bảng thống kê số lượng cho
biến chordlength.
19
• Sử dụng hàm table(airfoil_self_noise$velocity) để tạo bảng thống kê số lượng cho biến
velocity.
Dựa vào kết quả, ta thấy
chordlength, có
278 cánh có chiều dài hợp âm là 0.0254m trong dữ liệu airfoil_self_noise;
237 cánh có chiều dài hợp âm cánh là 0.0508m trong dữ liệu airfoil_self_noise;
263 cánh có chiều dài hợp âm là 0.1016m trong dữ liệu airfoil_self_noise;
271 cánh có chiều dài hợp âm là 0.1524m trong dữ liệu airfoil_self_noise;
266 cánh có chiều dài hợp âm là 0.2286m trong dữ liệu airfoil_self_noise;
188 cánh có chiều dài hợp âm là 0.3048m trong dữ liệu airfoil_self_noise.
velocity, có
281 giá trị vận tốc đạt 31.7m/s trong dữ liệu airfoil_self_noise;
480 giá trị vận tốc đạt 39.67m/s trong dữ liệu airfoil_self_noise;
277 giá trị vận tốc đạt 55.5m/s trong dữ liệu airfoil_self_noise;
465 giá trị vận tốc đạt 71.3m/s trong dữ liệu airfoil_self_noise;
(c) Vẽ đồ thị phân phối
• Dùng hàm hist(airfoil_self_noise$SPL, xlab = "SPL", main = "Do thi phan phoi
SPL", ylim = c(0,500)) để vẽ đồ thị phân phối của biến SPL.
20
Nhận xét:
▪ Tần suất cao nhất của SPL trong khoảng giá trị 125 đến 130.
▪ Tần số thấp nhất xấp xỉ 0 tại các giá trị lớn hơn 140.
▪ Tần suất của SPL tăng đều từ khoảng giá trị thấp nhất(100-105) cho đến khoảng
giá trị cao nhất(125-130) sau đó giảm nhanh.
▪ Mức áp suất âm thanh phân bố tương đối giống với phân phối chuẩn, tuy nhiên,
giữa 2 bên giá trị trung bình vẫn chưa thực sự đồng đều.
• Dùng hàm boxplot() vẽ phân phối của biến SPL cho từng nhóm phân loại của biến
chordlength và velocity.
o Lệnh boxplot(SPL~chordlength, main = "Boxplot of SPL for each category of
chordlength", data = airfoil_self_noise) vẽ phân phối biến SPL cho từng nhóm
phân loại của biến chordlength.
Nhận xét:
▪ Nhìn chung các giá trị của SPL phân bố đều trong box.
▪ Theo giá trị chordlength tăng lên thì những đường gạch đen trung vị giảm dần 1
cách không đều. Điều này cho thấy chordlength càng cao thì SPL sẽ có xu hướng
giảm dần 1 cách khơng đều.
▪ Ở giá trị chordlength 0.0508 có xuất hiện một số giá trị SPL nằm ngoài và khá
chênh lệch với các giá trị SPL còn lại.
21
o Lệnh boxplot(SPL~velocity, main = "Boxplot of SPL for each category of
velocity", data = airfoil_self_noise) vẽ phân phối biến SPL cho từng nhóm phân
loại của biến velocity.
Nhận xét:
▪ Các giá trị SPL phân bố đều trong box.
▪ Đường gạch đen trung vị khá đều nhau và tăng nhẹ khi velocity tăng lên.
▪ Ở giá trị velocity 71.3 có xuất hiện 1 giá trị SPL nằm ngoai box khá xa.
• Dùng lệnh pairs() vẽ các phân phối biến SPL lần lượt theo các biến freq, angle và
thickness.
o Lệnh pairs(SPL~freq, main = "Pairs of SPL for frequency", data =
airfoil_self_noise) vẽ các phân phối của biến SPL theo biến freq.
22