# Viết function

truc <- function(data, y, x) {
  # Hồi quy
  formula <- as.formula(paste(y, "~", paste(x, collapse = '+')))
  hi <- lm(formula, data = data)
  
  # Kiểm tra khuyết tật bằng phương pháp Breusch-Pagan
  bp_test <- bptest(hi)
  p_value <- bp_test$p.value
  
  # Phương sai thay đổi
  # H0: phương sai không thay đổi
  # H1: phương sai thay đổi
  pstd <- ncvTest(hi)
  
  # Hiện tượng đa cộng tuyến
  htdct <- vif(hi)
  
  
  return(list(HoiQuy = hi, pstd = pstd, htdct = htdct))
  
}
vd <- truc(h, 'bedrooms', c('stories','bathrooms'))
vd
## $HoiQuy
## 
## Call:
## lm(formula = formula, data = data)
## 
## Coefficients:
## (Intercept)      stories    bathrooms  
##      1.9635       0.2722       0.3963  
## 
## 
## $pstd
## Non-constant Variance Score Test 
## Variance formula: ~ fitted.values 
## Chisquare = 4.539907, Df = 1, p = 0.033113
## 
## $htdct
##   stories bathrooms 
##  1.117342  1.117342

Nhìn kết quả ta thấy:

Hàm hồi quy

Y= 1,9635 + 0,2722\(X_1\) + 0,3963\(X_2\)

Trong đó

  • Y: bedrooms

  • \(X_1\): stories

  • \(X_2\): bathrooms

Trong pstd ta thấy p_value < 0,05 nên không đủ cơ sở để bác bỏ H0. Vậy có xảy ra hiện tượng phương sai thay đổi.

Trong htdct ta có vif < 10 nên không xảy ra hiện tượng đa cộng tuyến.