Tải bản đầy đủ (.pdf) (49 trang)

BÁO cáo bài tập lớn 2 môn xác SUẤT THỐNG kê

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.57 MB, 49 trang )

HO CHI MINH
CITY
UNIVERSITY
OF
TECHNOLOGY

BÁO CÁO BÀI TẬP LỚN 2
MÔN XÁC SUẤT THỐNG KÊ

GVHD: TS. Nguyễn Bá Thi
Thực hiện: Nguyễn Việt Ngân - 1914289
(Lớp: L11 – Nhóm: 04)


Mục lục
PHẦN CHUNG.........................................................................................................................3
BÀI 1......................................................................................................................................3
BÀI 2....................................................................................................................................16
PHẦN RIÊNG.........................................................................................................................33


PHẦN CHUNG
BÀI 1

Câu hỏi:
1. Đọc dữ liệu (Import data):
gia_nha <- read.csv("C:/Users/DELL/Desktop/gia_nha.csv")

Liệt kê các biến có trong giá nhà
names(gia_nha)
##



[1] "X.2"

"X.1"

"X"

## [5] "date"
"bathrooms"

"price"

"bedrooms"

## [9] "sqft_living"
"waterfront"

"sqft_lot"

"floors"

## [13] "view"
"sqft_above"

"condition"

"grade"

## [17] "sqft_basement" "yr_built"
"zipcode"


"yr_renovated"

"id"


## [21] "lat"
"sqft_lot15"

"long"

"sqft_living15"

2. Làm sạch dữ liệu (Data cleaning)
a) Hãy trích ra một dữ liệu con đặt tên là new_DF chỉ bao gồm các biến
chính mà ta quan tâm như đã trình bày trong phần giới thiệu dữ liệu.
Từ câu hỏi này về sau, mọi yêu cầu xử lý đều dựa trên tập dữ liệu con
new_DF này.
new_DF=data.frame(gia_nha[,c(6,23,11,14,16,9)])
head(new_DF)
##
price sqft_living15 floors condition sqft_above
sqft_living
## 1
1180

221900

1340


1

3

1180

## 2
2570

538000

1690

2

3

2170

## 3
770

180000

2720

1

3


770

## 4
1960

604000

1360

1

5

1050

## 5
1680

510000

1800

1

3

1680

## 6 1225000
5420


4760

1

3

3890

b) Kiểm tra các dữ liệu bị khuyết trong tập tin và đề xuất phương pháp
thay thế cho những dữ liệu bị khuyết này nếu có dữ liệu bị khuyết:
Kiểm tra và xuất ra vị trí dịng có giá trị khuyết:
apply(is.na(new_DF),2,which)
## $price
## [1] 26 54 151 174 236 352 375 419 544 557 561 585 594 638
702 718 749 823 939
## [20] 995
##
## $sqft_living15


## integer(0)
##
## $floors
## integer(0)
##
## $condition
## integer(0)
##
## $sqft_above

## integer(0)
##
## $sqft_living
## integer(0)

Thống kê các giá trị khuyết của new_DF:
colSums(is.na(new_DF))
##
price sqft_living15
sqft_above
##
0

20

##

sqft_living

##

0

0

floors

condition

0


0

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

3. Làm rõ dữ liệu (Data visualization)
Chuyển đổi các biến price, sqft_living15, sqft_above, sqft_living lần lượt
thành log(price), log(sqft_living15), log(sqft_above), log(sqft_living). Từ đây
mọi sự tính tốn với các biến trên được hiểu là đã qua biến đổi dạng log.
new_DF[,c(1,2,5,6)]=log10(new_DF[,c(1,2,5,6)])


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



Trung vị (median)

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



Độ lệch chuẩn (sd)


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



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

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



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

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

 Xuất các giá trị vừa tìm được dưới dạng bảng
descriptive = data.frame(mean,median,sd,max,min)
descriptive
##

mean

## price

median

sd

max


min

5.666605 5.653213 0.2286882 6.886491 4.875061

## sqft_living15 3.274340 3.264818 0.1422124 3.793092 2.600973
## sqft_above

3.211557 3.193125 0.1857231 3.973590 2.462398

## sqft_living

3.279066 3.281033 0.1844762 4.131619 2.462398

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

1

1.5

2

2.5

3

3.5


## 10672

1909

8230

161

613

8

Bảng thống kê số lượng cho biến condition
table(new_DF$condition)


##
##

1

##

30

2

3


4

5

172 14016

5677

1698

Dùng hàm hist() để vẽ đồ thị phân phối của biến price.
hist(new_DF$price,main="Histogram of
price",labels=T,col="pink")

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

Dùng hàm boxplot() vẽ phân phối của biến price cho từng nhóm phân loại của
biến floor và biến condition.
boxplot(price~floors,main="Boxplot of house price for each
category of floor",data=new_DF,col="cyan")


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

 Nhận xét: Dựa vào các biểu đồ boxplot ta nhận thấy có nhiều ngoại lai
của biến price theo biến floors và condition.



Dùng lệnh pairs() vẽ các phân phối của biến price lần lượt theo các biến
sqft_living15, sqft_above và sqft_living.
* Vẽ phân phối biến price theo sqft_living15:
pairs(price~sqft_living15, main="price of house price for
sqft_living15", data=new_DF,col="violet")

* Vẽ phân phối biến price theo sqft_above:
pairs(price~sqft_above, main="price of house price for
sqft_above", data=new_DF,col="violet")


* Vẽ phân phối biến price theo sqft_living:
pairs(price~sqft_living, main="price of house price for
sqft_living", data=new_DF,col="violet")

Nhận xét: Từ các đồ thị phân tán của biến price theo sqft_living15,
sqft_above, sqft_living, ta nhận thấy các biến sqft_living15, sqft_above,
sqft_living có quan hệ tuyến tính với price, nói rõ hơn là quan hệ đồng biến.
Có thể nhận thấy khi các biến sqft_living15, sqft_above, sqft_living tăng lên
thì biến price có xu hướng tăng theo.


4. Xây dựng các mơ hình hồi quy tuyến tính (Fitting linear regression
models)
Chúng ta muốn khám phá rằng có những nhân tố nào và tác động như thế
nào đến giá nhà ở quận King.
Ta cần xét các biến chính trong việc xây dựng mơ hình hồi quy.
a) Xét mơ hình hồi quy tuyến tính bao gồm biến price là một biến phụ
thuộc, và tất cả các biến còn lại đều là biến độc lập. Hãy dùng lệnh

lm() để thực thi mơ hình hồi quy tuyến tính bội.
* Thay các biến phân loại thành biến nhân tố.
new_DF$floors=as.factor(new_DF$floors)
new_DF$condition=as.factor(new_DF$condition)

Price là một hàm số phụ thuộc vào năm biến cịn lại. Các thơng tin về mơ hình
hồi quy tuyến tính sẽ được đưa vào một object có tên là m1.
m1=lm(price~sqft_living15 + sqft_above + sqft_living + floors +
condition, data=new_DF)
summary(m1)
##
## Call:
## lm(formula = price ~ sqft_living15 + sqft_above +
sqft_living +
##

floors + condition, data = new_DF)

##
## Residuals:
##

Min

1Q

Median

3Q


Max

## -0.55193 -0.11785

0.00346

0.10477

0.65127

##
## Coefficients:
##

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

## (Intercept)

2.308027

0.040474

57.025

< 2e-16 ***

## sqft_living15

0.462153


0.011947

38.684

< 2e-16 ***

## sqft_above

-0.142451

0.014256

-9.992

< 2e-16 ***

## sqft_living

0.670249

0.013105

51.145

< 2e-16 ***

## floors1.5

0.078713


0.004116

19.122

< 2e-16 ***

## floors2

0.029366

0.003191

9.201

< 2e-16 ***


## floors2.5

0.162118

0.012961

12.509

< 2e-16 ***

## floors3

0.165894


0.006913

23.996

< 2e-16 ***

## floors3.5

0.215827

0.056680

3.808 0.000141 ***

## condition2

0.008113

0.031705

0.256 0.798040

## condition3

0.070449

0.029336

2.401 0.016336 *


## condition4

0.090356

0.029367

3.077 0.002095 **

## condition5

0.144105

0.029564

4.874

1.1e-06 ***

## --## Signif. codes:
1

0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' '

##
## Residual standard error: 0.1601 on 21580 degrees of freedom
## Multiple R-squared:
## F-statistic:

0.51,


Adjusted R-squared:

1872 on 12 and 21580 DF,

0.5097

p-value: < 2.2e-16

b) Dựa vào kết quả của mơ hình hồi quy tuyến tính trên, những biến nào
bạn sẽ loại khỏi mơ hình tương ứng với mức tin cậy 5%?
Với mức tin cậy α = 0.05
Giả thiết:
H: biến khơng có ý nghĩa thống kê.
H : biến có ý nghĩa thống kê.

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








Pr (sqft_living15) < 2e-16 = 2*10-16 < 0.05 → bác bỏ giả thuyết H
Pr (floors) có các giá trị đều nhỏ hơn 0.05 → bác bỏ giả thuyết H
Pr (condition 2) có các giá trị lớn hơn 0.05 → chấp nhận giả thuyết H
Pr (condition 3, condition 4, condition 5) < 0.05 → bác bỏ giả thuyết H
Pr (sqft_above) = 2e-16 < 0.05 → bác bỏ giả thuyết H

Pr (sqft_living) = 2e-16 < 0.05 → bác bỏ giả thuyết H
Như vậy, với mức tin cậy 5%, ta sẽ loại bỏ biến “condition 2” khỏi mơ
hình hồi quy tuyến tính trên.

c) Xét 2 mơ hình tuyến tính cùng bao gồm biến price là biến phụ thuộc
nhưng:





mơ hình m1 chứa tất cả các biến cịn lại là biến độc lập
mơ hình m2 là loại bỏ biến condition từ mơ hình M1

m2=lm(price~sqft_living15 + sqft_above + sqft_living + floors,
data=new_DF)
summary(m2)
##
## Call:
## lm(formula = price ~ sqft_living15 + sqft_above +
sqft_living +
##

floors, data = new_DF)

##
## Residuals:
##

Min


1Q

Median

3Q

Max

## -0.5583 -0.1188

0.0035

0.1066

0.6410

##
## Coefficients:
##

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

## (Intercept)

2.391711

0.028386

84.257


< 2e-16 ***

## sqft_living15

0.451639

0.012023

37.563

< 2e-16 ***

0.014317 -11.543

< 2e-16 ***

## sqft_above

-0.165249

## sqft_living

0.703102

0.013091

53.709

< 2e-16 ***


## floors1.5

0.084520

0.004136

20.437

< 2e-16 ***

## floors2

0.021291

0.003128

## floors2.5

0.161796

0.013061

12.388

< 2e-16 ***

## floors3

0.154575


0.006887

22.444

< 2e-16 ***

## floors3.5

0.212204

0.057134

6.807 1.02e-11 ***

3.714 0.000204 ***

## --## Signif. codes:
1

0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' '

##
## Residual standard error: 0.1614 on 21584 degrees of freedom
## Multiple R-squared:
## F-statistic:

0.5019, Adjusted R-squared:

2718 on 8 and 21584 DF,


p-value: < 2.2e-16

Dùng lệnh anova() để đề xuất mơ hình hồi quy hợp lý hơn.
anova(m1,m2)
## Analysis of Variance Table

0.5017


##
## 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

## 1

21580 553.32

## 2

21584 562.49 -4

F


Pr(>F)

-9.1665 89.376 < 2.2e-16 ***

## --## Signif. codes:
1

0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' '

Giả thuyết



H: Hai mơ hình tuyến tính như nhau
H : Hai mơ hình tuyến tính khác nhau

Nhận xét: Vì kết quả thu được trong bảng Anova cho 2 mơ hình m1 và m2 là
Pr(>F) = 2,2e-16 nhỏ hơn 0.05 nên ta bác bỏ H. Điều đó chỉ ra rằng 2 mơ hình
là khác nhau.
 Do đó ta sẽ cân nhắc việc chọn mơ hình m1 hay mơ hình m2. Đối với
mơ hình m2, biến loại bỏ đi từ mơ hình m1 là condition, mà biến
condition ta khơng loại bỏ khỏi mơ hình (đã xét ở câu b) do đó ta sẽ
có chọn mơ hình m1 sẽ hợp lý hơn.
 Mặt khác, ta có thể xét hệ số Multiple R-squared (hệ số xác định) ở
mơ hình m1 = 0,51 > hệ số Multiple R-squared (hệ số xác định) ở mơ
hình m2 = 0,5019. Tức có nghĩa là mơ hình m1 cho ta biết sự thay đổi
của biến price được giải thích bởi các biến độc lập tốt hơn so với mơ
hình m2. Hoặc ta so sánh RSS (tổng bình phương sai lệch giữa thực tế
và dự báo) của m1 < m2

Theo kết quả trên, mơ hình M1 hợp lý hơn.

d) Chọn mơ hình hợp lý hơn từ câu (c) hãy suy luận sự tác động của các
biến lên giá nhà.
Từ câu c, ta chọn mơ hình m1 là mơ hình hợp lý hơn.
Biến price là một biến phụ thuộc vào 5 biến độc lập: sqft_living15, floors,
condition, sqft_above, sqft_living. Dựa trên thông tin của mơ hình m1, ta có
đường hồi quy tuyến tính mẫu như sau:


price = 2.308027 + 0.462153 (sqft_living15) + 0.078713 (floors1.5) +
0.029366 (floors2) + 0.162118 (floors2.5) + 0.165894 (floors3) + 0.215827
(floors3.5) + 0.008113 (condition2) + 0.070449 (condition3) + 0.090356
(condition4) + 0.144105 (condition5) -0.142451 (sqft_above) + 0.670249
(sqft_living)
Các giá trị β của bốn biến độc lập đều khác 0, cho thấy chúng đều có tác động
đến price. Mối liên hệ này có ý nghĩa thống kê.
Xét đạo hàm theo từng biến độc lập, ta thấy mức độ ảnh hưởng như sau:




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

e) Từ mơ hình hồi quy hợp lý nhất từ câu (c) hãy dùng lệnh plot() để vẽ
đồ thị biểu thị sai số hồi quy (residuals) và giá trị dự báo (fitted
values). Nêu ý nghĩa và nhận xét đồ thị.
plot(m1,which=1)



Ý nghĩa: đồ thị trên biểu thị sai số hồi quy và giá trị dự báo cho biến phụ
thuộc price.
Nhận xét: Các giá trị residuals và fitted values chủ yếu tập trung ở góc phần
tư thứ nhất và phần tư thứ tư, dao động đối xứng quanh đường y = 0.
- Đường thẳng chính giữa chính là đường 0 => sai số hồi quy (XSHQ)= 0
- Đường XSHQ đỏ càng gần đường 0 càng chính xác
Kết luận: Giá nhà khi đó được dự báo chính xác nhất do khoảng cách gần
đường 0 nhất.

5. Dự báo (Predictions)
Từ mơ hình bạn chọn trong câu (c), hãy dùng lệnh (predict) để dự báo giá nhà
tại 2 thuộc tính như sau:
x1: sqft_living15 = mean(sqft_living15), sqft_above = mean(sqft_above),
sqft_living = mean(sqft_living), floor = 2, condition = 3
x2: sqft_living15 = max(sqft_living15), sqft_above = max(sqft_above),
sqft_living = max(sqft_living), floor =2, condition = 3.
So sánh khoảng tin cậy cho 2 giá trị dự báo này.
Khai báo biến
X1=data.frame(sqft_living15=mean(new_DF$sqft_living15),sqft_abo
ve=mean(new_DF$sqft_above),sqft_living=mean(new_DF$sqft_living)
,floors="2",condition="3")
X2=data.frame(sqft_living15=max(new_DF$sqft_living15),sqft_abov
e=max(new_DF$sqft_above),sqft_living=max(new_DF$sqft_living),fl
oors="2",condition="3")

Dự báo giá nhà tại thuộc tính X1:
predict_X1=predict(m1,X1,interval = "confidence")
predict_X1

##

fit

lwr

upr

## 1 5.66139 5.657203 5.665577

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


predict_X2=predict(m1,X2,interval = "confidence")
predict_X2
##

fit

lwr

upr

## 1 6.364003 6.353382 6.374624

So sánh khoảng tin cậy của hai dự báo của X1 và X2:
*Tạo bảng thể hiện dự báo giá nhà(có thể hiện độ dài khoảng tin cậy) của hai
biến X1 và X2:
pred=data.frame(rbind(predict_X1,predict_X2))
pred=data.frame(rbind(predict_X1,predict_X2))

row.names(pred)=c("X1","X2")
pred$range=pred$upr-pred$lwr
pred
##

fit

lwr

upr

range

## X1 5.661390 5.657203 5.665577 0.008374017
## X2 6.364003 6.353382 6.374624 0.021242160

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


BÀI 2

Câu hỏi:
1. Đọc dữ liệu (Import data):
diem_so <- read.csv("C:/Users/DELL/Desktop/gia_nha.csv")
names(diem_so)
## [1] "X"
"address"


"school"

"sex"

"age"

## [6] "famsize"
"Mjob"

"Pstatus"

"Medu"

"Fedu"

## [11] "Fjob"
"studytime"

"reason"

"guardian"

"traveltime"

## [16] "failures"
"activities"

"schoolsup"

"famsup"


"paid"

## [21] "nursery"
"famrel"

"higher"

"internet"

"romantic"

## [26] "freetime"
"health"

"goout"

"Dalc"

"Walc"

## [31] "absences"

"G1"

"G2"

"G3"



2. Làm sạch dữ liệu (Data cleaning)
a) Hãy trích ra một dữ liệu con đặt tên là new_DF chỉ bao gồm các biến
chính mà ta quan tâm như đã trình bày trong phần giới thiệu. Từ câu
hỏi này về sau, mọi yêu cầu xử lý đều dựa trên tập dữ liệu con
new_DF này.
new_DF=data.frame(diem_so[,c(32,33,34,15,16,31,22,4)])
head(new_DF)
##

G1 G2 G3 studytime failures absences higher age

## 1

5

6

6

2

0

6

yes

18

## 2


5 NA

6

2

0

4

yes

17

## 3

7

8 10

2

3

10

yes

15


## 4 15 14 15

3

0

2

yes

15

## 5

6 10 10

2

0

4

yes

16

## 6 15 NA 15

2


0

10

yes

16

b) Kiểm tra các dữ liệu bị khuyết trong tập tin. (Các câu lệnh tham khảo:
is.na(), which(), apply()). Nếu có dữ liệu bị khuyết, hãy đề xuất
phương pháp thay thế cho những dữ liệu này.
Kiểm tra và xuất ra vị trí dịng có giá trị khuyết:
apply(is.na(new_DF),2,which)
## $G1
## integer(0)
##
## $G2
## [1]

2

##

6

## $G3
## integer(0)
##
## $studytime

## integer(0)
##
## $failures
## integer(0)

9

80 100


##
## $absences
## integer(0)
##
## $higher
## integer(0)
##
## $age
## integer(0)

Thống kê các giá trị khuyết của new_DF:
colSums(is.na(new_DF))
##
higher
##
0

G1
0


0

age

G2

G3 studytime

5

0

failures

absences

0

0

0

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

3. Làm rõ dữ liệu (Data visualization)
a) Đối với các biến liên tục, hãy tính các giá trị thống kê mô tả bao gồm:

trung bình, trung vị, độ lệch chuẩn, giá trị lớn nhất và giá trị nhỏ nhất.
Xuất kết quả dưới dạng bảng. (Hàm gợi ý: mean(), median(), sd(),
min(), max() , apply(), as.data.frame(), rownames())
mean=apply(new_DF[,c(1,2,3,6,8)],2,mean)
median=apply(new_DF[,c(1,2,3,6,8)],2,median)
sd=apply(new_DF[,c(1,2,3,6,8)],2,sd)
max=apply(new_DF[,c(1,2,3,6,8)],2,max)
min=apply(new_DF[,c(1,2,3,6,8)],2,min)
descriptive = data.frame(mean,median,sd,max,min)
descriptive


##

mean median

sd max min

## G1

10.925641

11 3.290886

19

3

## G2


10.717949

11 3.737868

19

0

## G3

10.412821

11 4.568962

20

0

5.715385

4 8.034215

75

0

16.705128

17 1.279751


22

15

## absences
## age

b) Đối với các biến phân loại, hãy lập một bảng thống kê số lượng cho
từng chủng loại.

table(new_DF$studytime)
##
##

1

2

3

4

## 105 194

64

27

table(new_DF$failures)
##

##

0

1

2

3

## 307

50

17

16

table(new_DF$higher)
##
##

no yes

##

20 370

c) Hãy dùng hàm hist() để vẽ đồ thị phân phối của biến G3.
hist(new_DF$G3,main = "histogram of G3",labels=T,col="cyan")



Nhận xét: Nhìn vào biểu đồ, ta nhận thấy điểm cuối khóa (biến G3) của sinh
viên phần lớn tập trung ở mức từ 6 – 16 điểm, cao nhất ở mức 8 – 10 điểm,
thấp nhất ở mức 2 – 4 điểm.
Đồ thị có cột đầu tiên bị lệch so với đồ thị phân phối chuẩn, có thể nói cột
đầu tiên là yếu tố ngoại lai nên nếu loại bỏ cột đầu tiên thì độ thị có dạng gần
giống phân phối chuẩn.
d) Hãy dùng hàm boxplot() vẽ phân phối của biến G3 cho từng nhóm
phân loại của biến studytime, failures, và biến higher.
boxplot(G3~studytime,main ="Boxplot of G3 for each category of
studytime",data=new_DF,col="red")


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

boxplot(G3~higher,main ="Boxplot of G3 for each category of
higher",data=new_DF,col="green")


Nhận xét: Nhìn chung, nhóm học sinh có thời gian tự học nhiều hơn sẽ
có điểm cuối kì cao hơn.
e) Dùng lệnh pairs() vẽ các phân phối của biến G3 lần lượt theo các
biến G2, G1, age, và absences.
pairs(G3~G2, main="Phan phoi diem thi CK theo diem HK2",
data=new_DF)


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

data=new_DF)

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


×