VIẾT HÀM HỒI QUY
BỘi
Viết hàm
Ý tưởng: tạo 1 function gồm các khai báo data, y , x, new_data và
cho qua kết quả về hệ số hồi quy, kiểm định và khuyết tật mô hình, dự
báo.
Cấu trúc hàm tự tạo: create_lm(data, y, x, new_data) (newdata có
thể không khai báo).
Trong đó: data là dữ liệu được chọn, y là biến phụ thuộc, x là
biến độc lập và x có thể là 1 hoặc 2 biến trở lên tùy ý, new_data là giá
trị của biến độc lập được đưa vào để dự báo biến phụ thuộc.
create_lm <- function(data, y, x, new_data) {
# Tạo hàm lm
model <- lm(paste(y, "~", paste(x, collapse = " + ")), data = data)
# Kiểm định tự tương quan
b <- lmtest::dwtest(model)
# Kiểm định đa cộng tuyến
c <- ols_vif_tol(model)
# Vẽ đồ thị hồi quy
ggPredict(model,interactive=TRUE)
# Dự báo
p <- predict(model, newdata = new_data)
# In kết quả
print("Bảng thống kê hồi quy")
print(summary(model))
print("Kiểm định tự tương quan")
print(b)
print("Kiềm định đa cộng tuyến")
print(c)
print("Dự báo kết quả")
print(p)
}
Áp dụng hàm vừa
tạo
# Chọn giá trị dự báo cho biến độc lập
new_data <- data.frame(disp = c(160), hp = c(100))
# Chạy hàm đã được tạo
create_lm(mtcars, "mpg", c("disp", "hp"), new_data)

## [1] "Bảng thống kê hồi quy"
##
## Call:
## lm(formula = paste(y, "~", paste(x, collapse = " + ")), data = data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.7945 -2.3036 -0.8246 1.8582 6.9363
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 30.735904 1.331566 23.083 < 2e-16 ***
## disp -0.030346 0.007405 -4.098 0.000306 ***
## hp -0.024840 0.013385 -1.856 0.073679 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.127 on 29 degrees of freedom
## Multiple R-squared: 0.7482, Adjusted R-squared: 0.7309
## F-statistic: 43.09 on 2 and 29 DF, p-value: 2.062e-09
##
## [1] "Kiểm định tự tương quan"
##
## Durbin-Watson test
##
## data: model
## DW = 1.3698, p-value = 0.0227
## alternative hypothesis: true autocorrelation is greater than 0
##
## [1] "Kiềm định đa cộng tuyến"
## Variables Tolerance VIF
## 1 disp 0.3744003 2.670938
## 2 hp 0.3744003 2.670938
## [1] "Dự báo kết quả"
## 1
## 23.39649
- Kết quả:
- Bảng thống kê hồi quy:
- mpg= 30.74 - 0.03(disp) - 0.02(hp)
- Multiple R-squared= 0.75 > 0 nên mô hình phù hợp
- Adjusted R-squared= 0.73 > 0 nên các biến độc lập phù hợp với mô
hình
- Kiểm định tự tương quan:
- Durbin Watson Test có pvalue= 0.023 < 0.05 nên chấp nhận H0: mô
hình không có hiện tượng tự tương quan
- Kiểm định đa cộng tuyến:
- VIF < 5 nên mô hình không có hiện tượng đa cộng tuyến ở mức
cao
- Dự báo kết quả:
- Với disp=160 và hp= 100 thì kết quả dự báo của mpg=23.4
HỒI QUY BỘi
Khái quát
Phương trình hồi quy bội:
y = a + b1x1 + b2x2 +...bnxn
Trong đó:
- y là biến phụ thuộc
- a là hằng số hồi quy
- b1, b2, b3,… là hệ số hồi quy
- x1, x2, x3,.. là biến độc lập
Hàm hồi quy bội trong R:
lm(y ~ x1+x2+x3...,data)
Thực hành trên R
Dữ liệu hồi quy
bội
data("mtcars")
hoiquy <- mtcars[,c("mpg","disp","hp","wt")]
head(hoiquy,10)
## mpg disp hp wt
## Mazda RX4 21.0 160.0 110 2.620
## Mazda RX4 Wag 21.0 160.0 110 2.875
## Datsun 710 22.8 108.0 93 2.320
## Hornet 4 Drive 21.4 258.0 110 3.215
## Hornet Sportabout 18.7 360.0 175 3.440
## Valiant 18.1 225.0 105 3.460
## Duster 360 14.3 360.0 245 3.570
## Merc 240D 24.4 146.7 62 3.190
## Merc 230 22.8 140.8 95 3.150
## Merc 280 19.2 167.6 123 3.440
Tìm phương trình
hồi quy
model <- lm(mpg ~ disp + hp + wt, data = mtcars)
model$coefficients
## (Intercept) disp hp wt
## 37.1055052690 -0.0009370091 -0.0311565508 -3.8008905826
Như vậy, phương trình hồi quy bội là:
mpg= 37,105505 - 0,000937.disp - 0,031157.hp - 3,800891.wt
Kiểm định mô
hình
summary(model)
##
## Call:
## lm(formula = mpg ~ disp + hp + wt, data = mtcars)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.891 -1.640 -0.172 1.061 5.861
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 37.105505 2.110815 17.579 < 2e-16 ***
## disp -0.000937 0.010350 -0.091 0.92851
## hp -0.031157 0.011436 -2.724 0.01097 *
## wt -3.800891 1.066191 -3.565 0.00133 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.639 on 28 degrees of freedom
## Multiple R-squared: 0.8268, Adjusted R-squared: 0.8083
## F-statistic: 44.57 on 3 and 28 DF, p-value: 8.65e-11
Sự phù hợp của mô
hình hồi quy
- Multiple R-squared= 0.8268 > 0 nên mô hình trên là phù hợp.
Sự phù hợp của
biến độc lập
- Adjusted R-squared= 0.8083 > 0 nên sự xuất hiện của các biến độc
lập trong mô hình là phù hợp.
Đa cộng
tuyến
- Kiểm tra đa cộng tuyến bằng ma trận tương quan
library("corrplot")
corrplot(cor(hoiquy), method = "number")

Theo nguyên tắc thông thường, người ta có thể nghi ngờ hiện tượng đa
cộng tuyến khi mối tương quan giữa hai biến thấp hơn -0,8 hoặc cao hơn
+0,9. => Như vậy, xảy ra hiện tượng đa cộng tuyến giữa các cặp biến
độc lập là: disp-wt với R= 0.89
- Kiểm tra đa cộng tuyến bằng hệ số VIF
library("olsrr")
ols_vif_tol(model)
## Variables Tolerance VIF
## 1 disp 0.1365278 7.324517
## 2 hp 0.3654126 2.736633
## 3 wt 0.2064146 4.844618
Hệ số VIF <10 nên mô hình không xảy ra hiện tượng đa cộng
tuyến
Tự tương
quan
Để đo sự tự tương quan của phần dư trong R là thực hiện kiểm định
Durbin-Watson. Cụ thể hơn, nó kiểm tra tự tương quan bậc nhất (tức là
lag-1)
lmtest::dwtest(model)
##
## Durbin-Watson test
##
## data: model
## DW = 1.3673, p-value = 0.01612
## alternative hypothesis: true autocorrelation is greater than 0
Hình ảnh trên cho thấy đầu ra của phép thử Durbin-Watson trong R. Vì
DW=1,3673>1 và giá trị p-value=0,01612<0,05, nên bác bỏ giả thuyết
không và kết luận rằng phần dư tự tương quan.
LS0tDQp0aXRsZTogIkRRVCINCmF1dGhvcjogIktow6FuaCBBbiINCmRhdGU6ICIyMDIzLTA3LTI1Ig0Kb3V0cHV0OiANCiAgIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2RlcHRoOiA1DQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgbnVtYmVyX3NlY3Rpb246IHRydWUNCiAgICB0aGVtZTogbHVtZW4NCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQplZGl0b3Jfb3B0aW9uczogDQogIG1hcmtkb3duOiANCiAgICB3cmFwOiA3Mg0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCiMgVknhur5UIEjDgE0gSOG7kkkgUVVZIELhu5hpDQoNCiMjIFZp4bq/dCBow6BtDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlcnJvcj1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkoIm9sc3JyIikNCmxpYnJhcnkoInByZWRpY3QzZCIpDQpgYGANCg0KLSDDnSB0xrDhu59uZzogdOG6oW8gMSBmdW5jdGlvbiBn4buTbSBjw6FjIGtoYWkgYsOhbyBkYXRhLCB5ICwgeCwgbmV3X2RhdGEgdsOgIGNobyBxdWEga+G6v3QgcXXhuqMgduG7gSBo4buHIHPhu5EgaOG7k2kgcXV5LCBraeG7g20gxJHhu4tuaCB2w6Aga2h1eeG6v3QgdOG6rXQgbcO0IGjDrG5oLCBk4buxIGLDoW8uDQoNCi0gQ+G6pXUgdHLDumMgaMOgbSB04buxIHThuqFvOiBjcmVhdGVfbG0oZGF0YSwgeSwgeCwgbmV3X2RhdGEpIChuZXdkYXRhIGPDsyB0aOG7gyBraMO0bmcga2hhaSBiw6FvKS4NCg0KLSBUcm9uZyDEkcOzOiBkYXRhIGzDoCBk4buvIGxp4buHdSDEkcaw4bujYyBjaOG7jW4sIHkgbMOgIGJp4bq/biBwaOG7pSB0aHXhu5ljLCB4IGzDoCBiaeG6v24gxJHhu5ljIGzhuq1wIHbDoCB4IGPDsyB0aOG7gyBsw6AgMSBob+G6t2MgMiBiaeG6v24gdHLhu58gbMOqbiB0w7l5IMO9LCBuZXdfZGF0YSBsw6AgZ2nDoSB0cuG7iyBj4bunYSBiaeG6v24gxJHhu5ljIGzhuq1wIMSRxrDhu6NjIMSRxrBhIHbDoG8gxJHhu4MgZOG7sSBiw6FvIGJp4bq/biBwaOG7pSB0aHXhu5ljLg0KDQpgYGB7cn0NCmNyZWF0ZV9sbSA8LSBmdW5jdGlvbihkYXRhLCB5LCB4LCBuZXdfZGF0YSkgew0KICAjIFThuqFvIGjDoG0gbG0NCiAgbW9kZWwgPC0gbG0ocGFzdGUoeSwgIn4iLCBwYXN0ZSh4LCBjb2xsYXBzZSA9ICIgKyAiKSksIGRhdGEgPSBkYXRhKQ0KICAjIEtp4buDbSDEkeG7i25oIHThu7EgdMawxqFuZyBxdWFuDQogIGIgPC0gbG10ZXN0Ojpkd3Rlc3QobW9kZWwpDQogICMgS2nhu4NtIMSR4buLbmggxJFhIGPhu5luZyB0dXnhur9uDQogIGMgPC0gb2xzX3ZpZl90b2wobW9kZWwpDQogICMgVuG6vSDEkeG7kyB0aOG7iyBo4buTaSBxdXkNCiAgZ2dQcmVkaWN0KG1vZGVsLGludGVyYWN0aXZlPVRSVUUpDQogICMgROG7sSBiw6FvDQogIHAgPC0gcHJlZGljdChtb2RlbCwgbmV3ZGF0YSA9IG5ld19kYXRhKQ0KICAjIEluIGvhur90IHF14bqjDQogIHByaW50KCJC4bqjbmcgdGjhu5FuZyBrw6ogaOG7k2kgcXV5IikNCiAgcHJpbnQoc3VtbWFyeShtb2RlbCkpDQogIHByaW50KCJLaeG7g20gxJHhu4tuaCB04buxIHTGsMahbmcgcXVhbiIpDQogIHByaW50KGIpDQogIHByaW50KCJLaeG7gW0gxJHhu4tuaCDEkWEgY+G7mW5nIHR1eeG6v24iKQ0KICBwcmludChjKQ0KICBwcmludCgiROG7sSBiw6FvIGvhur90IHF14bqjIikNCiAgcHJpbnQocCkNCiAgDQp9DQpgYGANCg0KIyMgw4FwIGThu6VuZyBow6BtIHbhu6thIHThuqFvDQoNCmBgYHtyIHdhcm5pbmc9RkFMU0V9DQojIENo4buNbiBnacOhIHRy4buLIGThu7EgYsOhbyBjaG8gYmnhur9uIMSR4buZYyBs4bqtcA0KbmV3X2RhdGEgPC0gZGF0YS5mcmFtZShkaXNwID0gYygxNjApLCBocCA9IGMoMTAwKSkNCiMgQ2jhuqF5IGjDoG0gxJHDoyDEkcaw4bujYyB04bqhbw0KY3JlYXRlX2xtKG10Y2FycywgIm1wZyIsIGMoImRpc3AiLCAiaHAiKSwgbmV3X2RhdGEpDQpgYGANCg0KLSAgIEvhur90IHF14bqjOg0KICAgIC0gICBC4bqjbmcgdGjhu5FuZyBrw6ogaOG7k2kgcXV5Og0KICAgICAgICAtICAgbXBnPSAzMC43NCAtIDAuMDMoZGlzcCkgLSAwLjAyKGhwKQ0KICAgICAgICAtICAgTXVsdGlwbGUgUi1zcXVhcmVkPSAwLjc1IFw+IDAgbsOqbiBtw7QgaMOsbmggcGjDuSBo4bujcA0KICAgICAgICAtICAgQWRqdXN0ZWQgUi1zcXVhcmVkPSAwLjczIFw+IDAgbsOqbiBjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAgcGjDuSBo4bujcA0KICAgICAgICAgICAgduG7m2kgbcO0IGjDrG5oDQogICAgLSAgIEtp4buDbSDEkeG7i25oIHThu7EgdMawxqFuZyBxdWFuOg0KICAgICAgICAtICAgRHVyYmluIFdhdHNvbiBUZXN0IGPDsyBwdmFsdWU9IDAuMDIzIFw8IDAuMDUgbsOqbiBjaOG6pXAgbmjhuq1uDQogICAgICAgICAgICBIMDogbcO0IGjDrG5oIGtow7RuZyBjw7MgaGnhu4duIHTGsOG7o25nIHThu7EgdMawxqFuZyBxdWFuDQogICAgLSAgIEtp4buDbSDEkeG7i25oIMSRYSBj4buZbmcgdHV54bq/bjoNCiAgICAgICAgLSAgIFZJRiBcPCA1IG7Dqm4gbcO0IGjDrG5oIGtow7RuZyBjw7MgaGnhu4duIHTGsOG7o25nIMSRYSBj4buZbmcgdHV54bq/biDhu58gbeG7qWMNCiAgICAgICAgICAgIGNhbw0KICAgIC0gICBE4buxIGLDoW8ga+G6v3QgcXXhuqM6DQogICAgICAgIC0gICBW4bubaSBkaXNwPTE2MCB2w6AgaHA9IDEwMCB0aMOsIGvhur90IHF14bqjIGThu7EgYsOhbyBj4bunYSBtcGc9MjMuNA0KDQoNCiMgSOG7kkkgUVVZIELhu5hpDQoNCiMjIEtow6FpIHF1w6F0DQoNClBoxrDGoW5nIHRyw6xuaCBo4buTaSBxdXkgYuG7mWk6DQoNCmBgYCAgICAgICAgIA0KeSA9IGEgKyBiMXgxICsgYjJ4MiArLi4uYm54bg0KYGBgDQoNClRyb25nIMSRw7M6DQoNCi0gICB5IGzDoCBiaeG6v24gcGjhu6UgdGh14buZYw0KLSAgIGEgbMOgIGjhurFuZyBz4buRIGjhu5NpIHF1eQ0KLSAgIGIxLCBiMiwgYjMsLi4uIGzDoCBo4buHIHPhu5EgaOG7k2kgcXV5DQotICAgeDEsIHgyLCB4MywuLiBsw6AgYmnhur9uIMSR4buZYyBs4bqtcA0KDQpIw6BtIGjhu5NpIHF1eSBi4buZaSB0cm9uZyBSOg0KDQpgYGAgICAgICAgICANCmxtKHkgfiB4MSt4Mit4My4uLixkYXRhKQ0KYGBgDQoNCiMjIFRo4buxYyBow6BuaCB0csOqbiBSDQoNCiMjIyBE4buvIGxp4buHdSBo4buTaSBxdXkgYuG7mWkNCg0KYGBge3J9DQpkYXRhKCJtdGNhcnMiKQ0KYGBgDQoNCmBgYHtyfQ0KaG9pcXV5IDwtIG10Y2Fyc1ssYygibXBnIiwiZGlzcCIsImhwIiwid3QiKV0NCmhlYWQoaG9pcXV5LDEwKQ0KYGBgDQoNCiMjIyBUw6xtIHBoxrDGoW5nIHRyw6xuaCBo4buTaSBxdXkNCg0KYGBge3J9DQptb2RlbCA8LSBsbShtcGcgfiBkaXNwICsgaHAgKyB3dCwgZGF0YSA9IG10Y2FycykNCm1vZGVsJGNvZWZmaWNpZW50cw0KYGBgDQoNCk5oxrAgduG6rXksIHBoxrDGoW5nIHRyw6xuaCBo4buTaSBxdXkgYuG7mWkgbMOgOg0KDQpgYGAgICAgICAgICANCm1wZz0gMzcsMTA1NTA1IC0gMCwwMDA5MzcuZGlzcCAtIDAsMDMxMTU3LmhwIC0gMyw4MDA4OTEud3QNCmBgYA0KDQojIyMgS2nhu4NtIMSR4buLbmggbcO0IGjDrG5oDQoNCmBgYHtyfQ0Kc3VtbWFyeShtb2RlbCkNCmBgYA0KDQojIyMjIFPhu7EgcGjDuSBo4bujcCBj4bunYSBtw7QgaMOsbmggaOG7k2kgcXV5DQoNCi0gICBNdWx0aXBsZSBSLXNxdWFyZWQ9IDAuODI2OCBcPiAwIG7Dqm4gbcO0IGjDrG5oIHRyw6puIGzDoCBwaMO5IGjhu6NwLg0KDQojIyMjIFPhu7EgcGjDuSBo4bujcCBj4bunYSBiaeG6v24gxJHhu5ljIGzhuq1wDQoNCi0gICBBZGp1c3RlZCBSLXNxdWFyZWQ9IDAuODA4MyBcPiAwIG7Dqm4gc+G7sSB4deG6pXQgaGnhu4duIGPhu6dhIGPDoWMgYmnhur9uIMSR4buZYw0KICAgIGzhuq1wIHRyb25nIG3DtCBow6xuaCBsw6AgcGjDuSBo4bujcC4NCg0KIyMjIyDEkGEgY+G7mW5nIHR1eeG6v24NCg0KLSAgIEtp4buDbSB0cmEgxJFhIGPhu5luZyB0dXnhur9uIGLhurFuZyBtYSB0cuG6rW4gdMawxqFuZyBxdWFuDQoNCmBgYHtyLCB3YXJuaW5nPUZBTFNFLCBlcnJvcj1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkoImNvcnJwbG90IikNCmNvcnJwbG90KGNvcihob2lxdXkpLCBtZXRob2QgPSAibnVtYmVyIikNCmBgYA0KDQpUaGVvIG5ndXnDqm4gdOG6r2MgdGjDtG5nIHRoxrDhu51uZywgbmfGsOG7nWkgdGEgY8OzIHRo4buDIG5naGkgbmfhu50gaGnhu4duIHTGsOG7o25nIMSRYQ0KY+G7mW5nIHR1eeG6v24ga2hpIG3hu5FpIHTGsMahbmcgcXVhbiBnaeG7r2EgaGFpIGJp4bq/biB0aOG6pXAgaMahbiAtMCw4IGhv4bq3YyBjYW8gaMahbg0KKzAsOS4gPVw+IE5oxrAgduG6rXksIHjhuqN5IHJhIGhp4buHbiB0xrDhu6NuZyDEkWEgY+G7mW5nIHR1eeG6v24gZ2nhu69hIGPDoWMgY+G6t3AgYmnhur9uIMSR4buZYw0KbOG6rXAgbMOgOiBkaXNwLXd0IHbhu5tpIFI9IDAuODkNCg0KLSAgIEtp4buDbSB0cmEgxJFhIGPhu5luZyB0dXnhur9uIGLhurFuZyBo4buHIHPhu5EgVklGDQoNCmBgYHtyLCB3YXJuaW5nPUZBTFNFLCBlcnJvcj1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkoIm9sc3JyIikNCm9sc192aWZfdG9sKG1vZGVsKQ0KYGBgDQoNCkjhu4cgc+G7kSBWSUYgXDwxMCBuw6puIG3DtCBow6xuaCBraMO0bmcgeOG6o3kgcmEgaGnhu4duIHTGsOG7o25nIMSRYSBj4buZbmcgdHV54bq/bg0KDQojIyMjIFThu7EgdMawxqFuZyBxdWFuDQoNCsSQ4buDIMSRbyBz4buxIHThu7EgdMawxqFuZyBxdWFuIGPhu6dhIHBo4bqnbiBkxrAgdHJvbmcgUiBsw6AgdGjhu7FjIGhp4buHbiBraeG7g20gxJHhu4tuaA0KRHVyYmluLVdhdHNvbi4gQ+G7pSB0aOG7gyBoxqFuLCBuw7Mga2nhu4NtIHRyYSB04buxIHTGsMahbmcgcXVhbiBi4bqtYyBuaOG6pXQgKHThu6ljIGzDoA0KbGFnLTEpDQoNCmBgYHtyfQ0KbG10ZXN0Ojpkd3Rlc3QobW9kZWwpDQpgYGANCg0KSMOsbmgg4bqjbmggdHLDqm4gY2hvIHRo4bqleSDEkeG6p3UgcmEgY+G7p2EgcGjDqXAgdGjhu60gRHVyYmluLVdhdHNvbiB0cm9uZyBSLiBWw6wNCkRXPTEsMzY3M1w+MSB2w6AgZ2nDoSB0cuG7iyBwLXZhbHVlPTAsMDE2MTJcPDAsMDUsIG7Dqm4gYsOhYyBi4buPIGdp4bqjIHRodXnhur90DQpraMO0bmcgdsOgIGvhur90IGx14bqtbiBy4bqxbmcgcGjhuqduIGTGsCB04buxIHTGsMahbmcgcXVhbi4NCg==