You are on page 1of 65

DANH SÁCH THÀNH VIÊN

STT Họ tên MSSV Phân công Đóng góp

1 2012018 Viết code và sơ lược nội dung hoạt 20%

Trần Minh Tân động 1, thuyết trình, làm slide


Powerpoint

2 Vũ Mai Hoài Nam 1914260 Viết hoàn chỉnh nội dung hoạt động 1 20%

3 Nguyễn Hòa An 2010821 20%


Viết nội dung và chỉnh sửa code hoạt
(NT) động 2, tổng hợp file Word

4 2012908 Viết code hoạt động 2, làm slide 20%


Bùi Quốc Đạt
Powerpoint

5 2010103 20%
Viết nội dung cơ sở lí thuyết và nội
Nguyễn Quốc An
dung hoạt động 2

MỤC LỤC

DANH SÁCH HÌNH ẢNH .................................................................................


iii

I. Cơ sở lý
thuyết ................................................................................................... 1

1.1 Giới thiệu mô hình hồi quy tuyến tính bội ............................................... 1

1.2 Ước lượng các tham số của mô hình hồi quy tuyến tính bội .................. 1

II. Phần tính toán ..................................................................................................


6

2.1. Hoạt động 1: ............................................................................................... 6

2.2. Hoạt động 2 ............................................................................................... 20

i
PHỤ LỤC A – HOẠT ĐỘNG 1 ...........................................................................
1

PHỤ LỤC B – HOẠT ĐỘNG 2 ...........................................................................


1

ii
DANH SÁCH HÌNH ẢNH

Hình 1. 1 Biểu đồ histogram thể hiện phân phối của biến price trước khi chuyển
sang dạng log(x+1) ..........................................................................................................
9

Hình 1. 2 Biểu đồ histogram thể hiện phân phối của biến price sau khi chuyển
sang
dạng log(x+1) ..................................................................................................................
9

Hình 1. 3 Biểu đồ boxplot thể hiển phân phối chuẩn của biến price theo từng
phân
loại của biến floors. .......................................................................................................
10

Hình 1. 4 Biểu đồ boxplot thể hiển phân phối chuẩn của biến log(price +1) theo
từng phân loại của biến floors. ......................................................................................
10

Hình 1. 5 Biểu đồ boxplot thể hiển phân phối chuẩn của biến price theo từng
phân
loại của biến condition. ..................................................................................................
11

Hình 1. 6 Biểu đồ boxplot thể hiển phân phối chuẩn của biến log(price +1) theo
từng phân loại của biến condition. ................................................................................
11

Hình 1. 7 Biểu đồ boxplot thể hiển phân phối chuẩn của biến price theo từng
phân
loại của biến view. .........................................................................................................
12

Hình 1. 8 Biểu đồ boxplot thể hiển phân phối chuẩn của biến log(price +1) theo
từng phân loại của biến view. ........................................................................................
12

iii
Hình 1. 9 Đồ thị plot thể hiện độ phân tán của biến price theo biến sqft_above
trước và sau khi chuyển hai biến này sang dạng
log(x+1). ..................................................... 13

Hình 1. 10 Đồ thị plot thể hiện độ phân tán của biến price theo biến sqft_living
trước và sau khi chuyển hai biến này sang dạng log(x+1) ............................................
14

Hình 1. 11 Đồ thị plot thể hiện độ phân tán của biến price theo biến
sqft_basement trước và sau khi chuyển hai biến này sang dạng
log(x+1) ............................................ 14 Hình 1. 12 Đồ thị Residuals vs
Fitted ................................................................... 17

Hình 1. 13 Đồ thị Normal Q-Q .............................................................................


17

Hình 1. 14 Đồ thị Scale-Location .........................................................................


18

Hình 1. 15 Đồ thị Residuals vs Leverage .............................................................


18

Hình 2. 1 Đồ thị phân phối của biến roughness ...................................................


24

Hình 2. 2 Biểu đồ Boxplot của biến roughness cho từng nhóm phân loại của biến
infill_pattern. .................................................................................................................
25

Hình 2. 3 Biểu đồ Boxplot của biến roughness cho từng nhóm phân loại của biến
material ..........................................................................................................................
26

Hình 2. 4 Phân phối của biến roughness theo biến Print Speed. .........................
27

iv
Hình 2. 5 Phân phối của biến roughness theo biến Bed Temperature .................
27

Hình 2. 6 Phân phối của biến roughness theo biến Nozzle Temperature ............
27

Hình 2. 7 Phân phối của biến roughness theo biến Layer Height .......................
27

Hình 2. 8 Đồ thị biểu thị sai số hồi quy và giá trị dự báo ....................................
31

Hình 2. 9 Biểu đồ kiểm định giả định về phân phối chuẩn của các sai số ..........
32

Hình 2. 10 Biểu đồ kiểm tra sự đồng nhất của phương sai. .................................
32

Hình 2. 11 Biểu đồ xác định những điểm có ảnh hưởng cao của mô hình. .........
33

v
I. Cơ sở lý thuyết

1.1 Giới thiệu mô hình hồi quy tuyến tính bội

Mô hình hồi quy tuyến tính bội có dạng tổng quát như sau:

Y = β1 + β2X2 + β3X3 + … + βkXk + 𝜀

Trong đó:

o Y: biến phụ thuộc o Xi: biến độc lập o β1: hệ số


tự do (hệ số chặn)
o βi: hệ số hồi quy riêng. βi đo lường tác động riêng
phần của biến Xi lên Y với điều kiện các biến số
khác trong mô hình không đổi. Cụ thể hơn, nếu
các biến khác trong mô hình không đổi, giá trị kỳ
vọng của Y sẽ tăng βi đơn vị nếu Xi tăng 1 đơn vị
𝜀: sai số ngẫu nhiên.
Như vậy, "Hồi quy tuyến tính" là một phương pháp để dự đoán giá trị biến phụ
thuộc (Y) dựa trên giá trị của biến độc lập (X). Nó có thể được sử dụng cho các trường
hợp chúng ta muốn dự đoán một số lượng liên tục. Ví dụ: dự đoán thời gian người
dùng dừng lại một trang nào đó hoặc số người đã truy cập vào một website nào đó
v.v... Bằng dữ liệu thu thập được, ta đi ước lượng hàm hồi quy của tổng thể, đó là ước
lượng các tham số của tổng thể: β1, β2, …, βk.

1.2 Ước lượng các tham số của mô hình hồi quy tuyến tính bội

1.2.1. Hàm hồi quy

Do không biết tổng thể, nên chúng ta không biết giá trị trung bình tổng thể của
biến phụ thuộc là đúng ở mức độ nào. Do vậy chúng ta phải dựa vào dữ liệu mẫu để
ước lượng.

Trên một mẫu có n cá thể, gọi 𝑌̂= 𝐹̂(X2, X3,…, Xk) là hồi quy mẫu.

1
Với một cá thể mẫu Yi ≠ 𝐹̂ (X2,i, X3,i,…, Xk,i) sinh ra ei = Yi – 𝐹̂(X2, X3,…, Xk); ei
gọi là phần dư SRF.

Ta có hàm hồi quy mẫu tổng quát được viết dưới dạng như sau:

Phần dư sinh ra: ei = yi – ŷi

Ký hiệu: 𝛽̂m là ước lượng của βm. Chúng ta trông đợi 𝛽̂m là ước lượng không chênh
lệch nhiều của βm, hơn nữa phải là một ước lượng hiệu quả.

1.2.2. Phương pháp bình phương nhỏ nhất (Ordinary Least Squares)

Phương pháp bình phương nhỏ nhất được đưa ra bởi nhà Toán học Đức Carl
Friedrich Gauss. Tư tưởng của phương pháp này là cực tiểu tổng bình phương của các
phần dư ei = yi – ŷi. Các giả thiết của phương pháp bình phương nhỏ nhất cho mô hình
hồi quy tuyến tính bội như sau:

a. Hàm hồi quy là tuyến tính theo các tham số.

Điều này có nghĩa là quá trình hồi quy trên thực tế được miêu tả bởi mối quan hệ
dưới dạng y = β1 + β2x2 + β3x3 + β4x4 + … + βkxk + 𝜀, hoặc mối quan hệ thực tế có thể
được viết lại ví dụ như dưới dạng lấy loga cả hai vế.

b. E(𝜀i) = 0: Kỳ vọng của các yếu tố ngẫu nhiên 𝜺i bằng 0.

Trung bình tổng thể sai số là bằng 0. Điều này có nghĩa là có một số giá trị sai số
mang dấu dương và một số sai số mang dấu âm. Do hàm xem như là đường trung bình
nên có thể giả định rằng các sai số ngẫu nhiên trên sẽ bị loại trừ nhau, ở mức trung
bình, trong tổng thể.

c. Cov(𝜀i, 𝜀j) = 0: Không có sự tương quan giữa các 𝜀i.

Không có sự tương quan giữa các quan sát của yếu tố sai số. Nếu ta xem xét các
chuỗi số liệu thời gian (dữ liệu được thu thập từ một nguồn trong nhiều khoảng thời

2
gian khác nhau), yếu tố sai số 𝜀i trong khoảng thời gian này không có bất kỳ một
tương quan nào với yếu tố sai số trong khoảng thời gian trước đó.

d. Var(𝜀i) = σ2: Phương sai bằng nhau và thuần nhất với mọi 𝜀i.

Tất cả giá trị 𝜀 được phân phối giống nhau với cùng phương sai σ2, sao cho:

Var(𝜀i) = E(𝜀i2) = σ2

f. 𝜀i có phân phối chuẩn.

Điều này rất quan trọng khi phát sinh khoảng tin cậy và thực hiện kiểm định giả
thuyết trong những phạm vi mẫu là nhỏ. Nhưng phạm vi mẫu lớn hơn, điều này trở
nên không mấy quan trọng.

g. Giữa các x2, x3,…, xk không có quan hệ tuyến tính.

Nếu x2, x3,…, xk có quan hệ tuyến tính thì người ta nói rằng có hiện tượng đa cộng
tuyến.

1.2.3. Độ phù hợp của mô hình

Để có thể biết mô hình giải thích được như thế nào hay bao nhiêu % sự biến thiên
của dữ liệu, người ta sử dụng R2 Ta

có thể viết SST = SSE + SSR

Ý nghĩa của các thành phần:

- SST là tổng bình phương của tất cả các sai lệch giữa các giá trị quan sát
Yi và giá trị trung bình.
- SSE là tổng bình phương của tất cả các sai lệch giữa các giá trị của
biến phụ thuộc Y nhận được từ hàm hồi quy mẫu và giá trị trung bình
của chúng. Phần này đo độ chính xác của hàm hồi quy.
- SSR là tổng bình phương của tất cả các sai lệch giữa các giá trị quan
sát Y và các giá trị nhận được từ hàm hồi quy.

3
- SST được chia thành 2 phần: một phần do SSE và một phần do SSR
gây ra.

Ta có: 0≤R2≤1, R2 cao nghĩa là mô hình ước lượng được giải thích được một mức
độ cao sự biến thiên của dữ liệu.

• Nếu R2 = 1, nghĩa là đường hồi quy giải thích 100% thay đổi của y.

• Nếu R2 = 0, nghĩa là mô hình không đưa ra thông tin nào về sự thay đổi của
biến phụ thuộc y.

Trong mô hình hồi quy 2 biến thì R2 đo độ thích hợp của hàm hồi quy. Nó chính là
tỷ lệ của toàn bộ sự biến đổi của biến phụ thuộc y do biến giải thích x gây ra.

Trong mô hình hồi quy đa biến tỷ lệ của toàn bộ sự khác biệt của biến y do tất cả
các biến x2 và x3 gây ra được gọi là hệ số xác định bội, ký hiệu là R2:

1.2.4. Kiểm định giả thuyết đối với 𝜷𝒋

Kiểm định ý nghĩa thống kê của các hệ số hồi quy có ý nghĩa hay không: kiểm
định rằng biến giải thích có thực sự ảnh hưởng đến biến phụ thuộc hay không. Nói
cách khác là hệ số hồi quy có ý nghĩa thống kê hay không.

Có thể đưa ra giả thiết nào đó đối với βj, chẳng hạn βj = βj*.

Ta có bảng sau:
Loại giả thuyết Giả thuyết H0 Giả thuyết đối H1 Miền bác bỏ

Hai phía 𝛽𝑖 = 𝛽𝑖* 𝛽𝑖 ≠ 𝛽𝑖*


|t| > 𝑡𝛼/2(𝑛−𝑘)

Phía trái 𝛽𝑖 ≤ 𝛽𝑖* 𝛽𝑖 > 𝛽𝑖*


t > 𝑡𝛼(𝑛−𝑘)

Phía phải 𝛽𝑖 ≥ 𝛽 𝑖* 𝛽𝑖 < 𝛽𝑖*


t <−𝑡𝛼(𝑛−𝑘)
Ta có thể sử dụng giá trị P-value: P-value < mức ý nghĩa thì bác bỏ giả thiết H0

4
Đặt giả thuyết kiểm định βj:

• H0: βj = 0 ⇔ xj không tác động


• H1: βj ≠ 0 ⇔ xj có tác động

1.2.5. Kiểm định ý nghĩa của mô hình

Trong mô hình hồi quy đa biến, giả thuyết “không” cho rằng mô hình không có ý
nghĩa được hiểu là tất cả các hệ số hồi quy riêng đều bằng 0.

Ứng dụng kiểm định Wald (thường được gọi là kiểm định F) được tiến hành cụ thể
như sau:

• Bước 1:

Giả thuyết “không” là H0: β2 = β3 = … = βk = 0.

Giả thuyết đối là H1: “có ít nhất một trong những giá trị β khác không”.

• Bước 2: Trước tiên hồi quy Y theo một số hạng không đổi và X 2, X3, …,
Xk, sau đó tính tổng bình phương sai số SSR R, SSRu. Phân phối F là tỷ số của hai
biến ngẫu nhiên phân phối khi bình phương độc lập. Điều này cho ta trị thống kê:

Fc = [ 𝑆𝑆𝑅𝑆𝑆𝑅𝑅−𝑆𝑆𝑅/(𝑈𝑛]−/(𝑘𝑘)−𝑚) ~ F(𝛼, 𝑘 − 𝑚, 𝑛 − 𝑘)
=𝑅 1𝑈2−−𝑅𝑅2𝑅2// ((𝑛𝑘−−𝑘𝑚))
𝑈 𝑈

Vì H0: β2 = β3 = … = βk = 0, nhận thấy rằng trị thống kê kiểm định đối với giả
𝑆𝑆𝐸/(𝑘−1)
thuyết này sẽ là: Fc = ~ F(𝛼, 𝑘 − 1, 𝑛 − 𝑘)
𝑆𝑆𝑅/(𝑛−𝑘)

• Bước 3: Tra số liệu trong bảng F tương ứng với bậc tự do (k – 1) cho tử
số và (n– k) cho mẫu số, và với mức ý nghĩa α cho trước.

• Bước 4: Bác bỏ giả thuyết H 0 ở mức ý nghĩa α nếu Fc > F(α, 𝑘 − 1, 𝑛 −


𝑘). Đối với phương pháp giá trị p-value, tính giá trị p= P(F>F c | H0) và bác bỏ H0
nếu p<mức α.

5
II. Phần tính toán

2.1. Hoạt động 1:

2.1.1 Đề bài

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

Các bước thực hiện:

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

2. Làm sạch dữ liệu (Data cleaning): NA (dữ liệu khuyết)

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

(a) Chuyển đổi biến (nếu cần thiết).

(b) Thống kê mô tả: dùng thống kê mẫu và dùng đồ thị.

6
4. Xây dựng mô hình hồi quy tuyến tính để đánh giá các nhân tố có thể ảnh
hưởng đến giá nhà ở quận King.

5. Thực hiện dự báo cho giá nhà quận King.

2.1.2 Thực hiện:

Câu 1: Đọc dữ liệu (Import data): house_price.csv

Code R và kết quả khi đọc dữ liệu và xem 10 dòng đầu tiên của dữ liệu (Xem code
phụ lục A)

Câu 2: Làm sạch dữ liệu (Data cleaning)

Tạo một dữ liệu mới chỉ bao gồm các biến chính mà ta quan tâm, lưu với tên là
new_GiaNha, sau đó xuất ra 10 dòng đầu tiên. (Xem code phụ lục A)

Kiểm tra dữ liệu khuyết trong new_GiaNha (Xem code phụ lục A)

Thống kê số lượng dòng chứa dữ liệu khuyết trong các biến. (Xem code phụ lục
A)

Thống kê tỉ lệ dữ liệu khuyết trong các biến. (Xem code phụ lục A)

Nhận xét: Thông qua việc kiểm tra dữ liệu khuyết trong new_GiaNha, ta nhận
thấy có 20 dữ liệu khuyết trong biến price. Tiếp theo ta sẽ xử lý các dữ liệu khuyết đó.
Phương pháp xử lí được đề xuất là thay thế giá trị trung bình ở các quan sát còn lại của
biến price tại vị trí chứa dữ liệu khuyết.

Thay thế giá trị trung bình của biến “price” ở các quan sát còn lại ở vị trí chứa dữ
liệu khuyết. (Xem code phụ lục A)

Kiểm tra lại xem đã xử lý hết dữ liệu khuyết chưa. (Xem code phụ lục A)

Nhận xét: Sau khi xử lý dữ liệu, ta nhận thấy không còn dữ liệu khuyết

Câu 3: Làm rõ dữ liệu: (Data visualization)

Tạo một data mới tên là new_GiaNha2 (gồm các biến như new_GiaNha đã làm
sạch dữ liệu) và chuyển đổi các biến price, sqft_above, sqft_living, sqft_basement lần

7
lượt thành log(price+1), log(sqft_above+1), log(sqft_living+1) và
log(sqft_basement+1).

Đầu tiên, ta tạo một data mới tên là new_GiaNha2 từ new_GiaNha. (Xem code
phụ lục A)

Sau đó, ta chuyển các biến có trong data này sang dạng log(X+1). (Xem code phụ
lục A)

Giải thích lý do chuyển sang dạng log(x+1):

• Cải thiện sự phù hợp của mô hình: giả định khi ta xây dựng mô hình hồi
quy thì các sai số hồi quy (phần dư) phải có phân phối chuẩn, do đó trong trường
hợp sai số hồi quy (phần dư) không có phân phối chuẩn thì việc lấy log của một
biến giúp thay đổi tỉ lệ và làm cho biến đó có phân phối chuẩn. Ngoài ra, trong
trường hợp phần dư (phương sai thay đổi) do các biến độc lập gây ra, ta cũng có
thể chuyển đổi các biến đó sang dạng log.
• Diễn giải: đây là lý do giúp ta có thể diễn giải mối quan hệ giữa hai biến
thuận tiện hơn. Nếu ta lấy log của biến phụ thuộc Y và biến độc lập X, khi đó hệ
số hồi quy β sẽ là hệ số co giãn và diễn giải sẽ như sau: X tăng 1% sẽ dẫn đến tăng
việc ta sẽ kỳ vọng Y tăng lên β% (về mặt trung bình của Y).
• Ước lượng mô hình phi tuyến: việc lấy log cho phép ta ước lượng các mô
hình này bằng hồi quy tuyến tính.
• Ngoài ra, việc chuyển sang dạng log(x+1) thay vì log(x) bởi do trong biến
sqft_basement có nhiều giá trị = 0 (do một số ngôi nhà không có tầng hầm). Nếu
chuyển sang dạng log thì sẽ nhận được giá trị infty. Do đó ta sẽ chuyển các biến
sang log(x+1) thay vì log(x).
Tính các giá trị thống kê mô tả (mean, median, max, min, sd) của biến trước khi
chuyển sang dạng log(X+1). (Xem code phụ lục A)

Tính các giá trị thống kê mô tả (mean, min, max, sd, median) của biến sau khi
chuyển sang dạng log(X+1), sau đó xuất ra bảng. (Xem code phụ lục A)

8
Xuất ra bảng các giá trị thống kê mô tả. (Xem code phụ lục A)

Vẽ biểu đồ histogram thể hiện phân phối của biến price trước và sau khi chuyển
sang dạng log(x+1)

• price

Hình 1. 1 Biểu đồ histogram thể hiện phân phối của biến price trước khi chuyển sang dạng log(x+1)

• log(price + 1):

9
Hình 1. 2 Biểu đồ histogram thể hiện phân phối của biến price sau khi chuyển sang dạng log(x+1)

Nhận xét: Dựa trên biểu đồ histogram của biến price, ta nhận thấy phân phối của
biến price có xu hướng lệch phải, cho thấy phần lớn ngôi nhà có giá tiền gần như nhau,
và chỉ có số ít ngôi nhà có giá trị cao hơn. Trong khi với biểu đồ của biến log(price+1)
có hình dạng phân phối chuẩn, phần lớn tập trung trong khoảng từ 12 tới 14 và thấp
dần ở hai đầu.

Sau biểu đồ Histogram, ta vẽ biểu đồ boxplot cho biến price và log(price +1) theo
các biến định tính.

Vẽ biểu đồ boxplot thể hiển phân phối chuẩn của biến price và log(price +1) theo
từng phân loại của biến floors.

• price

10
Hình 1. 3 Biểu đồ boxplot thể hiển phân phối chuẩn của biến price theo từng phân loại của biến floors.

• log(price +1)

Hình 1. 4 Biểu đồ boxplot thể hiển phân phối chuẩn của biến log(price +1) theo từng phân loại của biến floors.

11
Nhận xét: Đối v y phân phối của
log(price+1) khác biệ
ới biểu đồ log(price+1) theo floors, ta thấ t đối với những ngôi
nhà có số tầng khác nhau. Ta dự đoán floors
là một nhân tố ảnh hưởng đến log(price+1).

Sau đó là theo biến condition.

Vẽ biểu đồ boxplot thể hiển phân phối chuẩn của biến price và log(price +1)
theo từng phân loại của biến condition.

• price

Hình 1. 5 Biểu đồ boxplot thể hiển phân phối chuẩn của biến price theo từng phân loại của biến condition.

• log(price +1)

12
Nhận xét: Đối v y phân phối của
log(price+1) khác biệ

Hình 1. 6 Biểu đồ boxplot thể hiển phân phối chuẩn của biến log(price +1) theo từng phân loại của biến condition.
ới biểu đồ log(price+1) theo condition, ta thấ t đối với những
ngôi nhà có điều kiện khác nhau. Ta dự đoán
condition là một nhân tố ảnh hưởng đến log(price+1).

Sau đó là theo biến view

Vẽ biểu đồ boxplot thể hiển phân phối chuẩn của biến price và log(price +1)
theo từng phân loại của biến view.

• price

13
Nhận xét: Đối v y phân phối của
log(price+1) khác biệ

Hình 1. 7 Biểu đồ boxplot thể hiển phân phối chuẩn của biến price theo từng phân loại của biến view.

• log(price +1)

Hình 1. 8 Biểu đồ boxplot thể hiển phân phối chuẩn của biến log(price +1) theo từng phân loại của biến view.
ới biểu đồ log(price+1) theo view, ta thấ t đối với những ngôi
nhà có khung cảnh khác nhau. Ta dự đoán
view là một nhân tố ảnh hưởng đến log(price+1).

Vẽ đồ thị plot thể hiện độ phân tán của biến price theo biến sqft_above trước và
sau khi chuyển hai biến này sang dạng log(x+1). (Xem code ở phần phụ lục A)

14
Nhận xét: Đối v y phân phối của
log(price+1) khác biệ

Hình 1. 9 Đồ thị plot thể hiện độ phân tán của biến price theo biến sqft_above trước và sau khi chuyển hai biến này
sang dạng log(x+1).

Nhận xét: Dựa trên đồ thị phân tán của biến price và sqft_above, ta chưa nhận
thấy rõ mối quan hệ tuyến tính giữa 2 biến. Tuy nhiên với đồ thị phân tán của biến
log(price+1) và log(sqft_above +1) ta nhận thấy rõ hơn về mối quan hệ tuyến tính
giữa 2 biến này, cụ thể là quan hệ đồng biến.

Vẽ đồ thị plot thể hiện độ phân tán của biến price theo biến sqft_living trước và
sau khi chuyển hai biến này sang dạng log(x+1). (Xem code phụ lục A)

15
Hình 1. 10 Đồ thị plot thể hiện độ phân tán của biến price theo biến sqft_living trước và sau khi chuyển hai biến này
sang dạng log(x+1)

Nhận xét: Dựa trên đồ thị phân tán của biến price và sqft_living, ta chưa nhận
thấy rõ mối quan hệ tuyến tính giữa 2 biến. Tuy nhiên với đồ thị phân tán của biến
log(price+1) và log(sqft_living +1) ta nhận thấy rõ hơn về mối quan hệ tuyến tính
giữa 2 biến này, cụ thể là quan hệ đồng biến.

Vẽ đồ thị plot thể hiện độ phân tán của biến price theo biến sqft_basement trước và
sau khi chuyển hai biến này sang dạng log(x+1). (Xem code phụ lục A)

16
Hình 1. 11 Đồ thị plot thể hiện độ phân tán của biến price theo biến sqft_basement trước và sau khi chuyển hai biến
này sang dạng log(x+1)

Nhận xét: Dựa trên đồ thị phân tán của biến price và sqft_basement, ta chưa
nhận thấy rõ mối quan hệ tuyến tính giữa 2 biến. Tuy nhiên với đồ thị phân tán của
biến log(price+1) và log(sqft_basement+1) ta nhận thấy rõ hơn về mối quan hệ tuyến
tính giữa 2 biến này, cụ thể là quan hệ đồng biến.

Tóm lại, dựa vào các đồ thị trên, ta nhận thấy việc chuyển đổi các biến sang dạng
log(x+1) sẽ hiệu quả trong việc phân tích mối quan hệ tuyến tính giữa các biến độc lập với
biến phụ thuộc (price).

Câu hỏi đặt ra lúc này là mối quan hệ giữa các biến với giá nhà là ngẫu nhiên hay
thực sự có mối quan hệ tuyến tính giữa các biến với giá nhà. Mô hình hồi quy tuyến
tính sẽ giúp ta kiểm tra điều này thông qua các khoảng tin cậy và các phép kiểm định.
Hơn nữa, nó còn cho phép ta ước lượng giá trị của biến phụ thuộc (price) theo các
biến độc lập (floors, condition, sqft_above,…).

Câu 4: Xâ y dự ng mô hình hồ i quy tuyến tính để đá nh giá cá c nhâ n tố có thể ả nh


hưở ng đến giá nhà ở quậ n King

Xét mô hình hồi quy tuyến tính bao gồm:

• Biến phụ thuộc: log(price+1)


• Biến độc lập: floors, condition, view, log(sqft_above+1), log(sqft_living+1) và
log(sqft_basement+1)
Mô hình được biểu diễn như sau:

log(price + 1) = β0 + β1 × floors + β2 × condition + β3 × view + β4 × log(sqft_above


+ 1) + β5 × log(sqft_living + 1) + β6 × log(sqft_basement +1) + 𝜀

Ta thự c hiện ướ c lượ ng cá c hệ số βi, i=0,…,6 dựa trên tệp tin new_GiaNha2. (Xem
code phụ lục A)

Nhận xét: Từ kết quả phân tích, ta thu được:

𝛽̂0 = 7.168351; 𝛽̂1 = 0.102574; 𝛽̂2= 0.075131; 𝛽̂3 = 0.125203

17
𝛽̂4= 0.544601; 𝛽̂5 = 0.172785; 𝛽̂6= 0.042919
Như vậy, đường thẳng hồi quy ước lượng cho bởi phương trình sau:
𝑙𝑜𝑔(pricê + 1) = 7.168351 + 0.102574 × floors + 0.075131 × condition + 0.125203 ×
view + 0.544601 × log(sqft_above + 1) + 0.172785 × log(sqft_living + 1) + 0.042919
× log(sqft_basement + 1)

Residuals (sai số hồi quy): là khoảng chênh lệch giữa giá trị thực tế và giá trị dự
báo tìm được từ phương trình hồi quy. Ta lấy lần lượt các giá trị thực nghiệm của các
biến độc lập thay vào phương trình hồi quy để tính được giá trị log(price+1) dự báo.
Tiếp theo ta lấy giá trị log(price+1) thực tế trừ đi giá trị log(price+1) dự báo ở từng
quan sát sẽ thu được sai số hồi quy. Dựa vào dữ liệu thống kê, ta thấy có tổng cộng
21613 quan sát nên sẽ có 21613 sai số hồi quy ứng với mỗi quan sát.

Kiểm định các hệ số hồi quy:

Giả thuyết 𝐻0: βi = 0 i=0,…,6 (Hệ số hồi quy không có ý nghĩa thống kê).

Giả thuyết 𝐻1: βi ≠ 0 i=0,…,6 (Hệ số hồi quy có ý nghĩa thống kê).

Ta thấy Pr(> |t|) của các hệ số ứng với các biến đều bé hơn mức ý nghĩa α = 0.05
nên ta bác bỏ giả thuyết 𝐻0, chấp nhận H1. Do đó hệ số ứng với các biến này đều có ý
nghĩa với mô hình hồi quy ta xây dựng.

R2 và R2 hiệu chỉnh:

R2 = 0,5136; R2 hiệu chỉnh = 0,5134 đều có cùng ý nghĩa giải thích sự biến thiên
của một biến phụ thuộc bởi bao nhiêu % từ sự biến thiên các biến độc lập. Từ kết quả
phân tích ta thấy giá trị R2 hiệu chỉnh bằng 0,5134. Nghĩa là trong 100% sự biến thiên
của biến log(price+1) thì có 51,34% nguyên nhân là do các biến độc lập (floors,
condition, view,…) gây nên. Và 48,66% còn lại là do các yếu tố như sai số hồi quy
hoặc các biến độc lập khác chưa đưa vào mô hình. Kiểm tra các giả định của mô
hình

Nhắc lại các giả định của mô hình hồi quy: 𝑌𝑖 = 𝛽0 + 𝛽1.𝑋1 + ...𝛽𝑖 .𝑋𝑖+ 𝜀𝑖, i = 1, ...n.

18
• Tính tuyến tính của dữ liệu: mối quan hệ giữa biến dự báo X và biến phụ thuộc
Y được giả sử là tuyến tính.

• Sai số có kì vọng = 0 (𝜇 = 0).


• Sai số có phân phối chuẩn 𝜀𝑖 ∼ N (0, 𝜎2).
• Phương sai của các sai số là hằng số (𝜎2 = 𝑐𝑜𝑛𝑠𝑡).
• Các sai số 𝜀1, ..., 𝜀𝑛 độc lập với nhau.
Ta thực hiện phân tích để kiểm tra các giả định của mô hình:

Vẽ các đồ thị phần dư để kiểm tra các giả định:

plot(lm_model_1)

Hình 1. 12 Đồ thị Residuals vs Fitted

19
Hình 1. 13 Đồ thị Normal Q-Q

Hình 1. 14 Đồ thị Scale-Location

20
Hình 1. 15 Đồ thị Residuals vs Leverage

Nhận xét:

Đồ thị thứ 1 (Residuals vs Fitted) vẽ các giá trị sai số hồi quy tương ứng với các
giá trị dự báo, dùng để kiểm tra 3 giả định: tính tuyến tính của dữ liệu (giả định 1), các
sai số có kì vọng bằng 0 (giả định 2) và phương sai các sai số là hằng số (giả định 3).
Nhìn đồ thị ta thấy đường màu đỏ là đường cong, không phải đường nằm ngang nên Y
không có quan hệ tuyến tính với các biến độc lập. Đường màu đỏ chưa nằm sát đường
Y=0 nên không thỏa mãn giả định các sai số có kì vọng bằng 0. Các điểm sai số hầu
như tập trung ở phần chính giữa đồ thị, không phân bố ngẫu nhiên nên giả định
phương sai các sai số là hằng số cũng không thỏa mãn.

Đồ thị thứ 2 (Normal Q-Q) vẽ các sai số hồi quy đã được chuẩn hóa dùng để
kiểm tra giả định phân phối chuẩn của các sai số hồi quy. Ta thấy hầu hết các điểm sai
số đều nằm trên đường kì vọng phân phối chuẩn, chỉ một ít điểm nằm ngoài nên thỏa
mãn giả định các sai số có phân phối chuẩn.

Đồ thị thứ 3 (Scale - Location) vẽ căn bậc hai của các giá trị sai số đã được
chuẩn hóa được dùng để kiểm tra giả định phương sai các sai số là hằng số. Đồ thị cho
thấy các điểm sai số hầu như tập trung ở phần chính giữa đồ thị, không phân bố ngẫu
nhiên nên giả định phương sai các sai số là hằng số không thỏa mãn.

Đồ thị thứ 4 (Residuals vs Leverage) cho phép xác định những điểm có ảnh
hưởng cao trong bộ dữ liệu. Những điểm ảnh hưởng cao này có thể là các điểm
outliers (những điểm gây nhiễu gây ảnh hưởng nhiều nhất trong việc phân tích dữ
liệu). Nếu như ta thấy Cook’s distance (đường màu đỏ đứt nét) và có một số điểm vượt
qua đường thẳng này, nghĩa là các điểm đó có ảnh hưởng cao. Ta thấy không có điểm
nào vượt qua Cook’s distance, nghĩa là không có điểm nào có ảnh hưởng cao. Do đó ta
không cần phải loại bỏ chúng khi phân tích.

Câu 5: Thực hiện dự báo cho giá nhà quận King.

Dựa trên mô hình hồi quy ta xây dựng, hãy dự báo giá một ngôi nhà có:

21
• 2 tầng, điều kiện kiến trúc ngôi nhà: 3.
• Đánh giá quang cảnh ngôi nhà: 0; Diện tích ngôi nhà: 580 m2.
• Diện tích khuôn viên nhà 1080 m2; Diện tích tầng hầm 500 m2.
Xây dựng thuộc tính ngôi nhà cần dự báo: Dùng hàm predict() để dự báo, sau đó
lưu kết quả thu được vào biến “predict_GiaNha. (Xem code phụ lục A) Chuyển
log(price + 1) dự báo thành “price” dự báo. (Xem code phụ lục A) Nhận xét: Dựa vào kết

quả dự báo, ta nhận được:

• Giá nhà dự báo trung bình là 251800.


• Khoảng tin cậy so với giá trị dự báo (247201; 256484).
Ta nhận thấy giá nhà quan sát ở thuộc tính trên (331000) không thuộc khoảng tin
cậy vừa tìm được, chứng tỏ mô hình hồi quy ta xây dựng chưa thực sự tốt.

2.2. Hoạt động 2

2.2.1 Đề bài

Tập tin “data.csv” chứa bộ dữ liệu của nhóm nghiên cứu khoa Cơ khí Đại học
Selcuk. Mục đích của nghiên cứu là xác định mức độ ảnh hưởng của các thông số điều
chỉnh trong máy in 3D đến chất lượng in, độ chính xác và độ giãn của bản in. Trong đó
có 9 thông số cài đặt và 3 thông số đầu ra được đo lường. Dữ liệu gốc được cung cấp
tại: https://www.kaggle.com/datasets/afumetto/3dprinter.

Các biến chính trong bộ dữ liệu gồm:

• layer_height (mm): Độ cao mỗi lớp in.


• infill_pattern: Dạng lưới bên trong chi tiết.
• nozzle_temperature (oC): Nhiệt độ của mũi in.
• bed_temperature (oC): Nhiệt độ bàn in.
• print_speed (mm/s): Tốc độ in.
• material: Chất liệu (pla hoặc abs).

Thông số đầu ra (đã được đo lường) gồm:

• roughness (μm): Độ nhám.

22
(infill_pattern, material là biến phân loại, còn lại là biến liên tục).

(Lấy biến roughness làm biến chính để nghiên cứu mối quan hệ giữa biến roughness
với các biến còn lại).

Yêu cầu

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

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_data chỉ bao gồm các biến
chính ta cần quan tâm như đã trình bày ở 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 được thực hiện trên new_data này.

(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 bị khuyết này.

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

(a) Đối với các biến liên tục, tính các giá trị thống kê của tất cả các biến.
Xuất kết quả dưới dạng bảng.

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

(c) Vẽ đồ thị phân phối của biến roughness.

(d) Vẽ phân phối của biến roughness cho từng nhóm phân loại của biến:
infill_pattern, material.

(e) Vẽ các phân phối của biến roughness lần lượt theo các biến
layer_height, nozzle_temperature, bed_temperature, print_sp.

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 roughness 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 thực thi mô hình hồi quy tuyến tính bội.

(b) Dựa vào kết quả mô hình hồi quy tuyến tính trên, những biến nào bạn sẽ loại
khỏi mô hình tương ứng với các mức tin cậy 5%.

23
(c) Xét 2 mô hình tuyến tính đều bao gồm biến roughness 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 infill_pattern từ M1.

Sử dụng Anova đề xuất mô hình hồi quy hợp lí hơn.

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

(e) Từ mô hình hồi quy hợp lý nhất từ câu (c) 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.

1. Dự báo (Predictions)

Từ mô hình bạn chọn trong câu 4 (c), hãy dự báo roughness (độ nhám) tại 2 thuộc
tính như sau:

X1: layer_height = max(layer_height), nozzle_temperature =


max(nozzle_temperature), bed_temperature = max(bed_temperature), print_speed =
max(print_speed), material = “abs”.

X2: layer_height = mean(layer_height), nozzle_temperature =


mean(nozzle_temperature), bed_temperature = mean(bed_temperature), print_speed =
mean(print_speed), material = “abs”

So sánh khoảng tin cậy cho 2 giá trị dự báo này.

24
2.2.2 Thực hiện

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

Kết quả (Xem code phụ lục B)

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_data chỉ bao gồm các biến
chính ta cần quan tâm như đã trình bày ở 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 được thực hiện trên new_data này.

Kết quả (Xem code phụ lục B)

(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 bị khuyết này.

(Xem code phụ lục B)

Do đó: Từ kết quả trên, ta biết được dữ liệu new_data không có giá trị bị khuyết.

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

(a) Đối với các biến liên tục, tính các giá trị thống kê của tất cả các biến.
Xuất kết quả dưới dạng bảng.

Tính trung bình, trung vị, độ lệch chuẩn, giá trị nhỏ nhất, giá trị lớn nhất của các
biến liên tục (layer_height, nozzle_temperature, bed_temperature, print_speed,
roughness) và lần lượt lưu vào biến có tên mean, median, sd, max, min. (Xem code
phụ lục B)

Tạo bảng giá trị thống kê của tất cả các biến. (Xem code phụ lục B)

Tính thống kê mô tả cho biến “roughness” theo từng loại của biến “infill_pattern”.
(Xem code phụ lục B)

Tính thống kê mô tả cho biến “roughness” theo từng loại của biến “material”.
(Xem code phụ lục B)

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

• Biến infill_pattern

Kết quả
## Var1 Freq

## 1 grid 25

## 2 honeycomb 25

• Biến material

Kết quả

## Var1 Freq

## 1 abs 25

## 2 pla 25

(c) Vẽ đồ thị phân phối của biến roughness. (Xem code phụ lục B)

Hình 2. 1 Đồ thị phân phối của biến roughness

Nhận xét: Ta thấy đồ thị lệch phải, độ nhám bề mặt tập trung phần lớn ở mức 0
μm đến 300 μm, cao nhất ở mức 50 μm đến 100 μm và mức 150 μm đến 200 μm, thấp
nhất ở mức 300 μm đến 400 μm.

(d) Vẽ phân phối của biến roughness cho từng nhóm phân loại của biến:
infill_pattern, material.

26
• infill_pattern:

Vẽ biểu đồ Boxplot của biến roughness cho từng nhóm phân loại của biến
infill_pattern. (Xem code phụ lục B)

Hình 2. 2 Biểu đồ Boxplot của biến roughness cho từng nhóm phân loại của biến infill_pattern.

Nhận xét: Độ nhám của grid so với độ nhám của honeycomb không chênh lệch nhiều,
không có ngoại lai. Kết hợp kết quả các giá trị thống kê ở Câu 3a, ta có:

● Với mẫu dạng hình lưới:

Độ nhám cao nhất 368.


Độ nhám thấp nhất 24.
Có 25% mẫu dạng hình lưới có độ nhám 92.
Có 50% mẫu dạng hình lưới có độ nhám 172.
Có 75% mẫu dạng hình lưới có độ nhám 244.

● Với mẫu dạng hình tổ ong:

Độ nhám cao nhất 360.


Độ nhám thấp nhất 21.
Có 25% mẫu dạng hình tổ ong có độ nhám 88.
Có 50% mẫu dạng hình tổ ong có độ nhám 154.

27
Có 75% mẫu dạng hình tổ ong có độ nhám 220.

• material

Vẽ biểu đồ Boxplot của biến roughness cho từng nhóm phân loại của biến material.
(Xem code phụ lục B)

Hình 2. 3 Biểu đồ Boxplot của biến roughness cho từng nhóm phân loại của biến material

Nhận xét: Độ nhám của abs tương đối cao so với độ nhám của pla, không có ngoại
lai. Kết hợp kết quả các giá trị thống kê ở Câu 3a, ta có:

● Với nhóm chất liệu abs:

Độ nhám cao nhất 368.


Độ nhám thấp nhất 25.
Có 25% nhóm chất liệu abs có độ nhám 92.
Có 50% nhóm chất liệu abs có độ nhám 200.
Có 75% nhóm chất liệu abs có độ nhám 289.

● Với nhóm chất liệu pla:

Độ nhám cao nhất 321.


Độ nhám thấp nhất 21.
Có 25% nhóm chất liệu pla có độ nhám 88.
Có 50% nhóm chất liệu pla có độ nhám 145.

28
Có 75% nhóm chất liệu pla có độ nhám 192.

(e) Vẽ các phân phối của biến roughness lần lượt theo các biến Layer Height,
Nozzle Temperature, Bed Temperature, Print Speed. (Xem code phụ lục B)

Hình 2. 7 Phân phối của biến roughness theo biến Print Speed. Hình 2. 5 Phân phối của biến roughness theo biến Bed Temperature

Hình 2. 6 Phân phối của biến roughness theo biến Nozzle Temperature Hình 2. 4 Phân phối của biến roughness theo biến Layer Height

Nhận xét: Từ các đồ thị phân tán của biến roughness theo biến layer_height,
nozzle_temperature, bed_temperature, print_speed. Ta nhận thấy:

• Các chấm màu đỏ gần như phân bố theo một đường xiên đi lên, nên biến
layer_height có quan hệ tuyến tính với roughness (quan hệ đồng biến vì
layer_height tăng thì roughness cũng tăng theo.

29
• Trong khi đó biến nozzle_temperature, bed_temperature và print_speed không
có quan hệ tuyến tính với roughness vì các chấm màu đỏ phân bố không theo
đường xiên lên hoặc đường xiên xuống nào.

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

Kiểm tra sự tương quan giữa các biến layer_height, nozzle_temperature,


bed_temperature, print_speed đối với biến roughness. (Xem code phụ lục B)

Nhìn vào kết quả, ta thấy không xảy ra hiện tượng đa cộng tuyến, nghĩa là các hệ số
tương quan không quá gần 1, trừ trường hợp so sánh với chính nó.

Ta xây dựng mô hình hồi quy bội M1 bao gồm:

• Biến phụ thuộc: roughness.


• Biến dự báo (biến độc lập): layer_height, nozzle_temperature, bed_temperature,
print_speed, infill_pattern, material.

Mô hình được biểu diễn như sau: roughness = 𝛽 0 + 𝛽 1 × layer_height +


𝛽 2 × nozzle_temperature + 𝛽 3 × bed_temperature + 𝛽 4 × print_speed + 𝛽 5 ×
infill_patternhoneycomb + 𝛽 6 × infill_patterngrid + 𝛽 7 × materialpla +
𝛽8×materialabs + 𝜀

Ta thực hiện ước lượng các hệ số 𝜷i với i = 0; 1; 2; …; 8 (Xem code phụ lục B)

Nhận xét: Từ kết quả phân tích, ta thu được

• 𝛽̂0= -2316.6207; 𝛽̂1= 1246.5353; 𝛽̂2= 14.8131; 𝛽̂3= -15.8524; 𝛽̂4= 0.5538; 𝛽̂5=
1.7388; 𝛽̂7= 294.6336
• layer_height, nozzle_temperature, bed_temperature, print_speed,
infill_patternhoneycomb, materialpla là các biến độc lập vì không có giá trị 𝛽̂ tương
ứng nào mang giá trị NA.

30
Như vậy, đường thẳng hồi quy ước lượng được cho bởi phương trình sau:
roughnesŝ = -2316.6207 + 1246.5353 × layer_height + 14.8131 × nozzle_temperature
- 15.8524 × bed_temperature +....+ 294.6336 × materialpla

(b) Dựa vào kết quả mô hình hồi quy tuyến tính trên, những biến nào
bạn sẽ loại khỏi mô hình tương ứng với các mức tin cậy 5%.

Kiểm định các hệ số hồi quy

Giả thuyết H0: 𝛽i= 0 với i = 0; 1; 2; …; 5; 7 (Hệ số hồi quy không có ý nghĩa thống
kê).

Giả thuyết H1: 𝛽i≠ 0 với i = 0; 1; 2; …; 5; 7 (Hệ số hồi quy có ý nghĩa thống kê).

Phương pháp kiểm định bằng Pvalue (Pr(>|t|)):

• Quan sát ở phần Coefficients, các giá trị (Pr(>|t|)) chính là P value, lần lượt xét từng giá
trị.
• Xét mức ý nghĩa 5%
Ta có Pr(>|t|) của biến infill_pattern lớn hơn mức ý nghĩa 5% nên chưa thể
bác bỏ giả thuyết H0. Do đó hệ số ứng với biến infill_pattern không có ý
nghĩa thống kê, ta sẽ loại biến này ra khỏi mô hình.
Các biến độc lập còn lại có Pr(>|t|) đều nhỏ hơn mức ý nghĩa 5%. Vì vậy
bác bỏ H0, chấp nhận H1. Vậy ta kết luận hệ số tương ứng với các biến độc
lập còn lại có ý nghĩa thống kê.

(b) Xét 2 mô hình tuyến tính đều bao gồm biến roughness 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 infill_pattern từ M1.

Sử dụng Anova đề xuất mô hình hồi quy hợp lí hơn. (Xem code phụ lục B)

Phân tích phương sai cho hai mô hình tuyến tính M1 và M2: (Xem code phụ lục
B)

31
Ta đặt giả thuyết

• Giả thuyết H0: Hai mô hình M1 và M2 hiệu quả giống nhau.


• Giả thuyết H1: Hai mô hình M1 và M2 hiệu quả khác nhau.

Vì Pvalue = 0,8749 lớn hơn mức ý nghĩa 5% nên chưa thể bác bỏ giả thuyết H 0. Do đó
2 mô hình M1 và M2 hiệu quả như nhau.

Kết luận: Vậy 2 mô hình M1 và M2 có hiệu quả như nhau. Do đó để chọn mô hình
hợp lý hơn, ta dựa vào R2 hiệu chỉnh ở 2 mô hình. Ta có:

• R2 hiệu chỉnh ở M2 (0.8571) lớn hơn R 2 hiệu chỉnh của M1 (0.8539) (cho thấy sự
thay đổi của các biến độc lập ảnh hưởng đến biến roughness ở M2 lớn hơn M1).
• Số biến ở mô hình M2 ít hơn M1.

Vậy: Ta sẽ chọn mô hình 2 hợp lý hơn.

(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 lên biến roughness.

Để đánh giá sự tác động của các biến lên Roughness, ta quan tâm các hệ số P value
tương ứng. Ta thấy rằng Pvalue tương ứng với layer_height, nozzle_temperature,
bed_temperature, material lên roughness lần lượt là 2.10-6, 1.95.10-7, 6.55.10-6,
4.38.10-6, bé hơn mức ý nghĩa 0.05, điều này nói lên rằng ảnh hưởng của layer_height,
nozzle_temperature, bed_temperature và material có ý nghĩa rất lớn lên biến độ nhám
roughness.

Giả sử khi các biến dự báo khác không đổi, các hệ số hồi quy của 1 biến dự báo

sẽ ảnh hưởng trung bình lên biến roughness 1 đơn vị của biến dự báo đó, Ví dụ:

• Hệ số hồi quy ứng với layer_height = 1246.5353 thì ứng với độ cao mỗi lớp in
tăng 1 mm thì ta có thể kỳ vọng độ nhám có thể tăng 1246.5353 μm về mặt trung
bình (giả sử rằng các biến dự báo còn lại không đổi).

32
• Hệ số hồi quy ứng với bed_temperature = -15.8087 thì ứng với nhiệt độ bàn in
tăng 1oC thì ta có thể kỳ vọng độ nhám giảm 15.8087 μm (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.

(e) Từ mô hình hồi quy hợp lý nhất từ câu (c) 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.

Các giả định của mô hình hồi quy: Y = β0 + β1X1+ β2X2 + ... + βiXi + 𝜀i, với
i=1, ...,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
được giả sử là tuyến tính.
• Sai số có kì vọng = 0 (𝜇 = 0).
• Sai số có phân phối chuẩn 𝜀𝑖 ∼ N (0, 𝜎2).
• Phương sai của các sai số là hằng số (𝜎2 = 𝑐𝑜𝑛𝑠𝑡).
• Các sai số 𝜀1, ..., 𝜀𝑛 độc lập với nhau

plot(M2, which=1)

#Vẽ đồ thị giá trị dự báo và sai số hồi quy.

Nhận xét:

• Đồ thị “Residuals vs
Fitted” vẽ các giá trị dự
báo và các hồi quy sai số
tương ứng dùng để kiểm
tra tính tuyến tính của dữ
liệu (giả định 1), các sai số
có kì vọng bằng 0
(giả định 2) và phương sai các sai số là hằng số (giả Hình 2. 8 Đồ thị biểu thị sai số hồi quy

và giá trị dự báo định 3). Nếu như giả định về tuyến tính của dữ liệu không thoả, ta

33
sẽ quan sát thấy các điểm phần dư (residuals) trên đồ thị sẽ phân bố theo một
hình (pattern) nào đó.
• Dựa vào đồ thị ta thấy, đường màu đỏ trên đồ thị là đường gấp khúc. Do đó giả
định tuyến tính giữa các biến dự báo X và biến phụ thuộc Y chưa thực sự thỏa mãn.
Đường màu đỏ chưa nằm sát đường Y=0 nên không thỏa mãn giả định các sai số
có kì vọng bằng 0.

• Ngoài ra các sai số hồi quy phân tán không đều xung quanh đường thẳng y = 0
(ngoài trừ một số giá trị là ngoại lai), chứng tỏ giả định phương sai của các sai số là
hằng số bị vi phạm. Bên cạnh đó, 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:

plot(M2, which=2)

#Vẽ biểu đồ kiểm định giả định về phân phối chuẩn của các sai số.

Nhận xét: Đồ thị “Normal Q-Q” kiểm tra giả định về phân phối chuẩn của các
sai số. Nếu các điểm sai số
nằm trên cùng một đường kì
vọng phân phối chuẩn thì
điều kiện phân phối chuẩn
được thoả. Ta thấy rằng các
sai số hồi quy tập trung theo
đường thẳng, ở khoảng đầu
và cuối có có vài giá trị lệch
ra khỏi đường thẳng không Hình 2. 9 Bi ểu đồ kiểm đị nh giả đị nh về phân phối chuẩn của các sai
số
đáng kể. Ta xem như giả
định phân phối chuẩn của các sai số vẫn đúng

plot(M2, which=3)

#Vẽ biểu đồ kiểm tra sự đồng nhất của phương sai.

34
Nhận xét: Đồ thị “Scale-
Location” vẽ căn bậc hai của các
sai số được chuẩn hoá bởi các giá
trị dự báo, được dùng để kiểm tra
giả định thứ 3 (phương sai của
các sai số là hằng số). Nếu đường
màu đỏ trên đồ thị là đường thẳng
nằm ngang và các sai số hồi quy phân Hình 2. 10 Biểu đồ kiểm tra sự đồng nhất của phương sai. tán
đều quanh đường thẳng này thì giả định 3 được thoả. Nếu như đường màu đỏ có
độ dốc (hoặc cong) hoặc các điểm hồi quy sai số 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 trên đồ thị ta thấy đường màu
đỏ trên đồ thị là đường cong có độ dốc và các sai số hồi quy phân tán không đều
quanh đường thẳng. Đồ thị cho ta thấy rằng giả định tính đồng nhất về phương sai
bị vi phạm. Do đó giả định thứ 3 không thỏa.

plot(M2, which=5)

#Vẽ biểu đồ xác định những điểm có ảnh hưởng cao của mô hình.

35
Hình 2. 11 Biểu đồ xác định những điểm có ảnh hưởng cao của mô hình.

Nhận xét: Đồ thị “Residuals vs Leverage” cho phép xác định được những ảnh
hưởng cao (influential observatios), 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 outliers (những điểm gây nhiễu gây ảnh hưởng
nhiều nhất trong việc phân tích dữ liệu). Nếu như ta thấy Cook’s distance (đường màu
đỏ đứt nét) và có một số điểm vượt qua đường thẳng này, nghĩa là các điểm đó có ảnh
hưởng cao. Ta thấy đường thẳng ở góc của đồ thị không có điểm nào vượt qua Cook’s
distance, nghĩa là không có điểm nào có ảnh hưởng cao. Dựa vào đồ thị, ta nhận thấy
điểm thứ 5, 25, 23 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 Cook’s distance, do vậy các điểm này không phải là các điểm
có ảnh hưởng cao trong bộ dữ liệu. Do đó ta không cần phải 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 4 (c), hãy dự báo roughness (độ nhám) tại 2
thuộc tính như sau:

X1: layer_height = max(layer_height), nozzle_temperature =


max(nozzle_temperature), bed_temperature = max(bed_temperature), print_speed =
max(print_speed), material = “abs”

36
X2: layer_height = mean(layer_height), nozzle_temperature =
mean(nozzle_temperature), bed_temperature = mean(bed_temperature), print_speed =
mean(print_speed), material = “abs”

Tạo thuộc tính X1 (Xem code phụ lục B)

Dự báo độ nhám Roughness tại thuộc tính X1 (Xem code phụ lục B)

Tạo thuộc tính X2 (Xem code phụ lục B)

Dự báo độ nhám Roughness tại thuộc tính X2 (Xem code phụ lục B)

(b) So sánh khoảng tin cậy cho 2 giá trị dự báo này. (Xem code phụ lục B)

Với fit là kết quả dự đoán, (lwr, upr) là khoảng tin cậy.

Nhận xét: Với khoảng tin như kết quả, ta thấy được độ dài khoảng tin cậy giá trị
dự báo của X1 < X2 (cả 2 đều nằm trong khoảng tin cậy) nên ta có thể kết luận dữ liệu
từ X1 thu được giá trị dự báo chính xác hơn so với X2.

37
PHỤ LỤC A – HOẠT ĐỘNG 1

GiaNha <- read.csv("C:\\Users\\Admin\\Downloads\\BTL XSTK\\gia_nha.csv")

head(GiaNha,10)

## X.2 X.1 X id date price bedrooms bathrooms sqft_living

## 1 1 1 1 7129300520 20141013T000000 221900 3 1.00 1180

## 2 2 2 2 6414100192 20141209T000000 538000 3 2.25 2570

## 3 3 3 3 5631500400 20150225T000000 180000 2 1.00 770

## 4 4 4 4 2487200875 20141209T000000 604000 4 3.00 1960

## 5 5 5 5 1954400510 20150218T000000 510000 3 2.00 1680

## 6 6 6 6 7237550310 20140512T000000 1225000 4 4.50 5420

## 7 7 7 7 1321400060 20140627T000000 257500 3 2.25 1715

## 8 8 8 8 2008000270 20150115T000000 291850 3 1.50 1060

## 9 9 9 9 2414600126 20150415T000000 229500 3 1.00 1780

## 10 10 10 10 3793500160 20150312T000000 323000 3 2.50 1890

## sqft_lot floors waterfront view condition grade sqft_above sqft_basement

## 1 5650 1 0 0 3 7 1180 0

## 2 7242 2 0 0 3 7 2170 400

## 3 10000 1 0 0 3 6 770 0

## 4 5000 1 0 0 5 7 1050 910

## 5 8080 1 0 0 3 8 1680 0

## 6 101930 1 0 0 3 11 3890 1530

## 7 6819 2 0 0 3 7 1715 0

## 8 9711 1 0 0 3 7 1060 0

## 9 7470 1 0 0 3 7 1050 730

## 10 6560 2 0 0 3 7 1890 0

## yr_built yr_renovated zipcode lat long sqft_living15 sqft_lot15

## 1 1955 0 98178 47.5112 -122.257 1340 5650

## 2 1951 1991 98125 47.7210 -122.319 1690 7639

## 3 1933 0 98028 47.7379 -122.233 2720 8062

A1
## 4 1965 0 98136 47.5208 -122.393 1360 5000

## 5 1987 0 98074 47.6168 -122.045 1800 7503

## 6 2001 0 98053 47.6561 -122.005 4760 101930

## 7 1995 0 98003 47.3097 -122.327 2238 6819

## 8 1963 0 98198 47.4095 -122.315 1650 9711

## 9 1960 0 98146 47.5123 -122.337 1780 8113

## 10 2003 0 98038 47.3684 -122.031 2390 7570

Phụ lục A 1 Code R và kết quả khi đọc dữ liệu và xem 10 dòng đầu tiên của dữ liệu

"condition", "view",
new_GiaNha <- GiaNha[, c("price", "floors",
"sqft_above", "sqft_living", "sqft_basement") ]
head(new_GiaNha,10)

## price floors condition view sqft_above sqft_living sqft_basement

## 1 221900 1 3 0 1180 1180 0

## 2 538000 2 3 0 2170 2570 400

## 3 180000 1 3 0 770 770 0

## 4 604000 1 5 0 1050 1960 910

## 5 510000 1 3 0 1680 1680 0

## 6 1225000 1 3 0 3890 5420 1530

## 7 257500 2 3 0 1715 1715 0

## 8 291850 1 3 0 1060 1060 0

## 9 229500 1 3 0 1050 1780 730

## 10 323000 2 3 0 1890 1890 0

Phụ lục A 2 Tạo một dữ liệu mới chỉ bao gồm các biến chính mà ta quan tâm, lưu với tên là new_GiaNha, sau đó
xuất ra 10 dòng đầu tiên.

apply(is.na(new_GiaNha),2,which)

## $price
## [1] 26 54 151 174 236 352 375 419 544 557 561 585 594 638 702 718 749

A2
823 939

## [20] 995

##

## $floors

## integer(0) ##

## $condition

## integer(0)

##

## $view

## integer(0)

##

## $sqft_above

## integer(0)

##

## $sqft_living

## integer(0)

##

## $sqft_basement

## integer(0)

Phụ lục A 3 Kiểm tra dữ liệu khuyết trong new_GiaNha

apply(is.na(new_GiaNha),2,sum)

Kết quả:
## price floors condition view sqft_above

## 20 0 0 0 0

## sqft_living sqft_basement

## 0 0

Phụ lục A 4 Thống kê số lượng dòng chứa dữ liệu khuyết trong các biến.

A3
apply(is.na(new_GiaNha),2,mean)

Kết quả:
## price floors condition view sqft_above

## 0.000925369 0.000000000 0.000000000 0.000000000 0.000000000

## sqft_living sqft_basement

## 0.000000000 0.000000000

Phụ lục A 5 Thống kê tỉ lệ dữ liệu khuyết trong các biến. (Xem code phụ lục A)

new_GiaNha$price[is.na(new_GiaNha$price)] = mean (new_GiaNha$price, na.rm =


T)

Phụ lục A 6 Thay thế giá trị trung bình của biến “price” ở các quan sát còn lại ở vị trí chứa dữ liệu khuyết

apply(is.na(new_GiaNha),2,which)

Kết quả:

## integer(0)

Phụ lục A 7 Kiểm tra lại xem đã xử lý hết dữ liệu khuyết chưa

new_GiaNha2 <- new_GiaNha

Phụ lục A 8 Tạo một data mới tên là new_GiaNha2 từ new_GiaNha

new_GiaNha2[,c("price", "sqft_above", "sqft_living", "sqft_basement")]<-


log(new_GiaNha2[,c("price", "sqft_above", "sqft_living",
"sqft_basement")]+1)

Phụ lục A 9 Chuyển các biến có trong data này sang dạng log(X+1).
mean <- apply(new_GiaNha[,c("price", "sqft_above", "sqft_living",
"sqft_basement")],2,mean) min <-

apply(new_GiaNha[,c("price", "sqft_above", "sqft_living",

"sqft_basement")],2,min)
max <- apply(new_GiaNha[,c("price", "sqft_above", "sqft_living",
"sqft_basement")],2,max) sd <-
apply(new_GiaNha[,c("price",
"sqft_above", "sqft_living",

A4
"sqft_basement")],2,sd) median <- "sqft_above", "sqft_living",

apply(new_GiaNha[,c("price",

"sqft_basement")],2,median)
data.frame(mean,min,max,sd,median)

Kết quả:
## mean min max sd median

## price 540067.607 75000 7700000 366904.3447 450000

## sqft_above 1788.391 290 9410 828.0910 1560

## sqft_living 2079.900 290 13540 918.4409 1910

## sqft_basement 291.509 0 4820 442.5750 0

Phụ lục A 10 Tính các giá trị thống kê mô tả (mean, median, max, min, sd) của biến trước khi chuyển sang dạng
log(X+1)
mean <- apply(new_GiaNha2[,c("price", "sqft_above", "sqft_living",

"sqft_basement")],2,mean) min <-


apply(new_GiaNha2[,c("price",
"sqft_above", "sqft_living",

"sqft_basement")],2,min) max <

apply(new_GiaNha2[,c("price", "sqft_above", "sqft_living",

"sqft_basement")],2,max)

Kết quả:
## price sqft_above sqft_living sqft_basement

## FALSE FALSE FALSE FALSE

Phụ lục A 11 Tính các giá trị thống kê mô tả (mean, min, max, sd, median) của biến sau khi chuyển sang dạng
log(X+1), sau đó xuất ra bảng
sd <- apply(new_GiaNha2[,c("price", "sqft_above", "sqft_living",

"sqft_basement")],2,sd) median <-

apply(new_GiaNha2[,c("price", "sqft_above", "sqft_living",

"sqft_basement")],2,median)
data.frame(mean,sd,min,max,median)

Kết quả:
## mean sd min max median

## price 13.047983 0.5263493 11.225257 7700000 13.017005

A5
## sqft_above 7.395548 0.4273613 5.673323 9410 7.353082

## sqft_living 7.550910 0.4245612 5.673323 13540 7.555382

## sqft_basement 2.529293 3.1706229 0.000000 4820 0.000000

Phụ lục A 12 Xuất ra bảng các giá trị thống kê mô tả

hist(new_GiaNha[,"price"], xlab = "price", main = "Histogram of price",


ylim=c(0,13000),labels=T, col=2) hist(new_GiaNha2[,"price"], xlab =
"log(price+1)", main = "Histogram of price", ylim = c(0,7800), labels = T,
col = 2)

Phụ lục A 13 Vẽ biểu đồ histogram thể hiện phân phối của biến price trước và sau khi chuyển sang dạng log(x+1)

boxplot(price ~ floors,data = new_GiaNha, main = "Boxplot of price for


floors", col = c(2,3,4,5,6,7)) boxplot(price ~ floors, data =
new_GiaNha2, main = "Boxplot of log(price+1) for floors", col =
c(2,3,4,5,6,7))

Phụ lục A 14 Vẽ biểu đồ boxplot thể hiển phân phối chuẩn của biến price và log(price +1) theo từng phân loại của
biến floors.

boxplot(price ~ condition, data = new_GiaNha, main = "Boxplot of price for


condition", col = c(2,3,4,5,6,7)) boxplot(price ~ condition, data =
new_GiaNha2, main = "Boxplot of price for condition", col
=c(2,3,4,5,6,7))

Phụ lục A 15 Vẽ biểu đồ boxplot thể hiển phân phối chuẩn của biến price và log(price +1) theo từng phân loại của
biến condition.

boxplot(price ~ view, data = new_GiaNha, main = "Boxplot of price for


view", col = c(2,3,4,5,6,7)) boxplot(price ~ view, data = new_GiaNha2,
main = "Boxplot of log(price+1) for view", col = c(2,3,4,5,6,7))

Phụ lục A 16 Vẽ biểu đồ boxplot thể hiển phân phối chuẩn của biến price và log(price +1) theo từng phân loại của
biến view.

par(mfrow=c(1,2))

#Ve do thi phan tan the hien phan phoi cua price va sqft_above

plot(new_GiaNha[,"sqft_above"], new_GiaNha[,"price"], xlab = "sqft_above",


ylab = "price", main = "price and sqft_above", cex.main = 0.8,col=2)

#Ve do thi phan tan the hien phan phoi cua log(price+1) va log(sqft_above
A6
+1) plot(new_GiaNha2[,"sqft_above"], new_GiaNha2[,"price"], xlab =
"log(sqft_above +1)", ylab = "log(price+1)", main = "log(price+1) and
log(sqft_above +1) ", cex.main = 0.8,col=4)

Phụ lục A 17 Vẽ đồ thị plot thể hiện độ phân tán của biến price theo biến sqft_above trước và sau khi chuyển hai
biến này sang dạng log(x+1)

par(mfrow=c(1,2)) plot(new_GiaNha[,"sqft_living"], new_GiaNha[,"price"],

xlab = "sqft_living", ylab = "price", main = "price and


sqft_living", cex.main

=0.8,col=2)

plot(new_GiaNha2[,"sqft_living"], new_GiaNha2[,"price"], xlab =


"log(sqft_living +1) ", ylab = "log(price+1)", main = "log(price+1) and
log(sqft_living +1)",cex.main = 0.8, col = 4)

Phụ lục A 18 Vẽ đồ thị plot thể hiện độ phân tán của biến price theo biến sqft_living trước và sau khi chuyển hai biến
này sang dạng log(x+1).

par(mfrow=c(1,2)) plot(new_GiaNha[,"sqft_basement"], new_GiaNha[,"price"],


xlab = "sqft_basement", ylab = "price", main = "price and
sqft_basement", cex.main = 0.8,col=2) plot(new_GiaNha2[,"sqft_basement"],
new_GiaNha2[,"price"], xlab = "log(sqft_basement +1)", ylab =
"log(price+1)", main = "log(price+1) and log(sqft_basement +1) ", cex.main
= 0.8,col=4)

Phụ lục A 19 Vẽ đồ thị plot thể hiện độ phân tán của biến price theo biến sqft_basement trước và sau khi chuyển hai
biến này sang dạng log(x+1).

lm_model_1 <- lm(price~floors + condition + view + sqft_above + sqft_living


+ sqft_basement,data = new_GiaNha2) summary(lm_model_1)
#Tom tat ket qua

##

## Call:

## lm(formula = price ~ floors + condition + view + sqft_above +

## sqft_living + sqft_basement, data = new_GiaNha2)

##

A7
## Residuals:

## Min 1Q Median 3Q Max

## -1.21603 -0.27537 0.01546 0.24733 1.45479

##

## Coefficients:

## Estimate Std. Error t value Pr(>|t|)

## (Intercept) 7.168351 0.051868 138.202 < 2e-16 ***

## floors 0.102574 0.005832 17.587 < 2e-16 ***

## condition 0.075131 0.004012 18.728 < 2e-16 ***

## view 0.125203 0.003403 36.788 < 2e-16 ***

## sqft_above 0.544601 0.029261 18.612 < 2e-16 ***

## sqft_living 0.172785 0.029210 5.915 3.37e-09 ***

## sqft_basement 0.042919 0.001975 21.736 < 2e-16 ***

## ---

## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

##

## Residual standard error: 0.3671 on 21606 degrees of freedom

## Multiple R-squared: 0.5136, Adjusted R-squared: 0.5134

## F-statistic: 3802 on 6 and 21606 DF, p-value: < 2.2e-16

Phụ lục A 20 Ước lượng các hệ số βi, i=0,…,6 dựa trên tệp tin new_GiaNha2

GiaNha_tt <- data.frame ("floors" = 1, "condition" = 3, "view" = 0,


"sqft_above"= log(580+1),"sqft_living" = log(1080+1), "sqft_basement" =
log(500+1)) head(GiaNha_tt) #Xem ket qua

Kết quả:
## floors condition view sqft_above sqft_living sqft_basement

## 1 1 3 0 6.364751 6.985642 6.216606

Phụ lục A 21 Xây dựng thuộc tính ngôi nhà cần dự báo.

predict_GiaNha <- predict(lm_model_1,GiaNha_tt,interval = "confidence")

head(predict_GiaNha)

A8
Kết quả:
## fit lwr upr

## 1 12.43639 12.41796 12.45483

Phụ lục A 22 Dùng hàm predict() để dự báo, sau đó lưu kết quả thu được vào biến “predict_GiaNha

exp(predict_GiaNha) - 1

Kết quả:
## fit lwr upr

## 1 251800 247201 256484.5

Phụ lục A 23 Chuyển log(price + 1) dự báo thành “price” dự báo

A9
PHỤ LỤC B – HOẠT ĐỘNG 2

data <- read.csv("C:/Users/Admin/Downloads/BTL XSTK/data.csv") #Đọc dữ

liệu và lưu với tên là “data”.

head(data,10)

#Trích 10 dòng đầu của dữ liệu data trên.

## layer_height wall_thickness infill_density infill_pattern nozzle_temperature

## 1 0.02 8 90 grid 220

## 2 0.02 7 90 honeycomb 225

## 3 0.02 1 80 grid 230

## 4 0.02 4 70 honeycomb 240

## 5 0.02 6 90 grid 250

## 6 0.02 10 40 honeycomb 200

## 7 0.02 5 10 grid 205

## 8 0.02 10 10 honeycomb 210

## 9 0.02 9 70 grid 215

## 10 0.02 8 40 honeycomb 220

## bed_temperature print_speed material fan_speed roughness tension_strenght

## 1 60 40 abs 0 25 18

## 2 65 40 abs 25 32 16

## 3 70 40 abs 50 40 8

## 4 75 40 abs 75 68 10

## 5 80 40 abs 100 92 5

## 6 60 40 pla 0 60 24

## 7 65 40 pla 25 55 12

## 8 70 40 pla 50 21 14

## 9 75 40 pla 75 24 27

## 10 80 40 pla 100 30 25

## elongation

## 1 1.2

B1
## 2 1.4

## 3 0.8

## 4 0.5

## 5 0.7

## 6 1.1

## 7 1.3

## 8 1.5

## 9 1.4

## 10 1.7

Phụ lục B 1 Đọc dữ liệu (Import data)

new_data <-
data[,c("layer_height","infill_pattern","nozzle_temperature","bed_temperatu
re","print_speed","material","roughness")]

#Trích ra một dữ liệu con gồm 7 biến chính được nêu trên và lưu với tên là
“new_data”

head(new_data,10)

#Xuất ra 10 dòng của dữ liệu trong new_data.

## layer_height infill_pattern nozzle_temperature bed_temperature print_speed

## 1 0.02 grid 220 60 40

## 2 0.02 honeycomb 225 65 40

## 3 0.02 grid 230 70 40

## 4 0.02 honeycomb 240 75 40

## 5 0.02 grid 250 80 40

## 6 0.02 honeycomb 200 60 40

## 7 0.02 grid 205 65 40

## 8 0.02 honeycomb 210 70 40

## 9 0.02 grid 215 75 40

B2
## 10 0.02 honeycomb 220 80 40

## material roughness

## 1 abs 25

## 2 abs 32

## 3 abs 40

## 4 abs 68

## 5 abs 92

## 6 pla 60

## 7 pla 55

## 8 pla 21

## 9 pla 24

## 10 pla 30

Phụ lục B 2 Trích ra một dữ liệu con đặt tên là new_data chỉ bao gồm các biến chính ta cần quan tâm như đã trình
bày ở phần giới thiệu dữ liệu.

apply(is.na(new_data),2,which)

#Kiểm tra và xuất ra các giá trị bị khuyết của các biến trong dữ liệu.

Kết quả

## integer(0)

Phụ lục B 3 Kiểm tra các dữ liệu bị khuyết trong tập tin

mean = apply(new_data[,c(1,3,4,5,7)],2, mean)

median = apply(new_data[,c(1,3,4,5,7)],2, median)

sd = apply(new_data[,c(1,3,4,5,7)],2, sd) max =

apply(new_data[,c(1,3,4,5,7)],2, max) min =

apply(new_data[,c(1,3,4,5,7)],2, min)

Phụ lục B 4 Tính các giá trị thống kê của tất cả các biến. Xuất kết quả dưới dạng bảng.

lien_tuc = cbind(mean,median,sd,max,min) #Tạo các ma trận từ

vector cột bằng lệnh cbind.

as.data.frame(lien_tuc)
#Chuyển ma trận lien_tuc thành bảng.

B3
## mean median sd max min

## layer_height 0.106 0.1 0.06439673 0.2 0.02

## nozzle_temperature 221.500 220.0 14.82035280 250.0 200.00

## bed_temperature 70.000 70.0 7.14285714 80.0 60.00

## print_speed 64.000 60.0 29.69229956 120.0 40.00

## roughness 170.580 165.5 99.03412935 368.0 21.00

Phụ lục B 5 Tạo bảng giá trị thống kê của tất cả các biến

by(new_data[,c(7)],new_data$infill_pattern,summary)

## new_data$infill_pattern: grid

## Min. 1st Qu. Median Mean 3rd Qu. Max.

## 24.0 92.0 172.0 177.3 244.0 368.0

## ------------------------------------------------------------

## new_data$infill_pattern: honeycomb

## Min. 1st Qu. Median Mean 3rd Qu. Max.

## 21.0 88.0 154.0 163.9 220.0 360.0

Phụ lục B 6 Tính thống kê mô tả cho biến “roughness” theo từng loại của biến “infill_pattern”

by(new_data[,c(7)],new_data$material,summary)

## new_data$material: abs

## Min. 1st Qu. Median Mean 3rd Qu. Max.

## 25.0 92.0 200.0 193.4 289.0 368.0

## ------------------------------------------------------------

## new_data$material: pla

## Min. 1st Qu. Median Mean 3rd Qu. Max.

## 21.0 88.0 145.0 147.7 192.0 321.0

Phụ lục B 7 Tính thống kê mô tả cho biến “roughness” theo từng loại của biến “material”

B4
as.data.frame(table(new_data$infill_pattern)) #Tạo bảng thống kê số lượng

cho biến infill_pattern.

as.data.frame(table(new_data$material))

#Tạo bảng thống kế số lượng cho biến material.

Phụ lục B 8 Lập một bảng thống kê số lượng cho từng chủng loại.

hist(new_data$roughness,xlab = "Roughness", main = "Do thi phan


phoi cua
Roughness",ylim=c(0,15),labels=T,col="blueviolet") #Vẽ biểu đồ

histogram cho biến roughness.

Phụ lục B 9 Vẽ đồ thị phân phối của biến roughness

boxplot(roughness~infill_pattern, data = new_data, main="Roughness of


Infill pattern", col=c(2,3))

Phụ lục B 10 Vẽ biểu đồ Boxplot của biến roughness cho từng nhóm phân loại của biến infill_pattern

boxplot(roughness~material, data = new_data, main="Roughness of Material",


col=c(4,5))

Phụ lục B 11 Vẽ biểu đồ Boxplot của biến roughness cho từng nhóm phân loại của biến material.

plot(new_data$roughness,new_data$layer_height,col="red",xlab="roughness",yl
ab="layer_height",main="roughness and layer_height",pch=18) #Vẽ phân phối

của biến roughness theo biến layer_height.

plot(new_data$roughness,new_data$nozzle_temperature,col="red",xlab="roughne
ss",ylab="nozzle_temperature",main="roughness and
nozzle_temperature",pch=18)

#Vẽ phân phối của biến roughness theo biến nozzle_temperature.

plot(new_data$roughness,new_data$bed_temperature,col="red",xlab="roughness"
,ylab="bed_temperature",main="roughness and bed_temperature",pch=18)

#Vẽ phân phối của biến roughness theo biến bed_temperature.

plot(new_data$roughness,new_data$print_speed,col="red",xlab="roughness",yla
b="print_speed",main="roughness and print_speed",pch=18) #Vẽ phân phối của

biến roughness theo biến print_speed.

B5
Phụ lục B 12 Vẽ các phân phối của biến roughness lần lượt theo các biến Layer Height, Nozzle Temperature, Bed
Temperature, Print Speed

cor(new_data[,c(1,3,4,5,7)])

Kết quả
## layer_height nozzle_temperature bed_temperature print_speed

## layer_height 1.00000000 0.0000000 0.0000000 -0.05550085

## nozzle_temperature 0.00000000 1.0000000 0.6024534 0.00000000

## bed_temperature 0.00000000 0.6024534 1.0000000 0.00000000

## print_speed -0.05550085 0.0000000 0.0000000 1.00000000

## roughness 0.80134087 0.3486108 0.1921416 0.12106574

## roughness

## layer_height 0.8013409

## nozzle_temperature 0.3486108

## bed_temperature 0.1921416

## print_speed 0.1210657

## roughness 1.0000000

Phụ lục B 13 Kiểm tra sự tương quan giữa các biến layer_height, nozzle_temperature, bed_temperature, print_speed
đối với biến roughness.

M1=lm(roughness~layer_height+nozzle_temperature+bed_temperature+print_speed
+infill_pattern+material, data=new_data)

#Dùng lệnh lm() để thực thi mô hình tuyến tính bội.

summary(M1)

#Cho bảng tóm tắt kết quả mô hình tuyến tính bội.

Kết quả
##

## Call:

## lm(formula = roughness ~ layer_height + nozzle_temperature +

## bed_temperature + print_speed + infill_pattern + material,

## data = new_data)

##

B6
## Residuals:

## Min 1Q Median 3Q Max ##

-73.549 -26.298 -1.853 23.137 93.159

##

## Coefficients:

## Estimate Std. Error t value Pr(>|t|)

## (Intercept) -2316.6207 359.1068 -6.451 8.07e-08 ***

## layer_height 1246.5353 84.1150 14.819 < 2e-16 ***

## nozzle_temperature 14.8131 2.4353 6.083 2.77e-07 ***

## bed_temperature -15.8524 3.1369 -5.053 8.49e-06 ***

## print_speed 0.5538 0.1824 3.036 0.00406 **

## infill_patternhoneycomb 1.7388 10.9759 0.158 0.87487

## materialpla 294.6336 56.8696 5.181 5.59e-06 ***

## ---

## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ##

## Residual standard error: 37.86 on 43 degrees of freedom

## Multiple R-squared: 0.8718, Adjusted R-squared: 0.8539

## F-statistic: 48.72 on 6 and 43 DF, p-value: < 2.2e-16

Phụ lục B 14 Ta thực hiện ước lượng các hệ số i với 𝛽i = 0; 1; 2; …; 8

M2=lm(roughness~layer_height+nozzle_temperature+bed_temperature+print_speed
+material, data=new_data)

#Xây dựng mô hình hồi quy tuyến tính bội M2.

summary(M2) #Tóm tắt mô hình hồi quy


tuyến tính bội M2.

Kết quả
##

## Call:

## lm(formula = roughness ~ layer_height + nozzle_temperature +

B7
## bed_temperature + print_speed + material, data = new_data)

##

## Residuals:

## Min 1Q Median 3Q Max

## -74.084 -26.500 -1.662 22.585 92.356

##

## Coefficients:

## Estimate Std. Error t value Pr(>|t|)

## (Intercept) -2310.7356 353.2009 -6.542 5.38e-08 ***

## layer_height 1246.5353 83.1780 14.986 < 2e-16 ***

## nozzle_temperature 14.7774 2.3979 6.163 1.95e-07 ***

## bed_temperature -15.8078 3.0895 -5.117 6.55e-06 ***

## print_speed 0.5538 0.1804 3.070 0.00366 ** ##

materialpla 294.1610 56.1586 5.238 4.38e-06 *** ##

---

## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

##

## Residual standard error: 37.44 on 44 degrees of freedom

## Multiple R-squared: 0.8717, Adjusted R-squared: 0.8571

## F-statistic: 59.78 on 5 and 44 DF, p-value: < 2.2e-16

Phụ lục B 15 Sử dụng Anova đề xuất mô hình hồi quy hợp lí hơn

anova(M1, M2)

Kết quả

## Analysis of Variance Table

##

## Model 1: roughness ~ layer_height + nozzle_temperature + bed_temperature


+

## print_speed + infill_pattern + material

B8
## Model 2: roughness ~ layer_height + nozzle_temperature + bed_temperature
+

## print_speed + material

## Res.Df RSS Df Sum of Sq F Pr(>F)

## 1 43 61631

## 2 44 61667 -1 -35.971 0.0251 0.8749

Phụ lục B 16 Phân tích phương sai cho hai mô hình tuyến tính M1 và M2

x1 = data.frame(layer_height =
max(new_data$layer_height),nozzle_temperature =
max(new_data$nozzle_temperature),bed_temperature =
max(new_data$bed_temperature),print_speed =
max(new_data$print_speed),material = "abs")

Phụ lục B 17 Tạo thuộc tính X1

predict_x1=predict(M2, x1, interval = "confidence")

Phụ lục B 18 Dự báo độ nhám Roughness tại thuộc tính X1

x2 = data.frame(layer_height =
mean(new_data$layer_height),nozzle_temperature =
mean(new_data$nozzle_temperature),bed_temperature =
mean(new_data$bed_temperature),print_speed =
mean(new_data$print_speed),material = "abs")

Phụ lục B 19 Tạo thuộc tính X2

predict_x2=predict(M2, x2, interval = "confidence")

Phụ lục B 20 Dự báo độ nhám Roughness tại thuộc tính X2

pred = data.frame(rbind(predict_x1, predict_x2))


#Tạo bảng thể hiện độ nhám Roughness ở cả 2 thuộc tính X1, X2

rownames(pred) = c("x1","x2")

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

B9
pred$range = pred$upr - pred$lwr

#Tạo giá trị range = upr – lwr (khoảng ước lượng) pred

Kết quả
## fit lwr upr range

## x1 434.76795 394.43487 475.10103 80.66616

## x2 23.49949 -34.08775 81.08673 115.17448

Phụ lục B 21 So sánh khoảng tin cậy cho 2 giá trị dự báo này

B10
TÀI LIỆU THAM KHẢO

1. Nguyễn Thị Mộng Ngọc, Bài giảng Xác Suất Thống Kê.

2. Nguyễn Tiến Dũng, Nguyễn Đình Huy, (2019), Xác suất – Thống kê &
Phân tích số liệu, Nxb. Đại học Quốc gia, Thành phố Hồ Chí Minh.

3. Peter Dalgaard, (2008), Introdoctory Statistics with R, Nxb. Springer.

4. Ahmet Okudan, (2018), 3D Printer Dataset for Mechanical Engineers,


Truy cập từ https://www.kaggle.com/datasets/afumetto/3dprinter

5. Harlfoxem, (2016), House Sales in King County, USA, Truy cập từ


https://www.kaggle.com/datasets/harlfoxem/housesalesprediction

You might also like