Тест Бройша-Пагана

Для начала что бы понять тест Бройша-Пагана, надо понять что такое остатки в регрессионой модели

Остатки регрессии - это разности между наблюдаемыми значениями и значениями, предсказанными изучаемой регрессионной моделью.

Чем лучше регрессионная модель согласуется с данными, тем меньше величина остатков.

остаток (e) вычисляется как:

e = (y - yhat)

где: y - наблюдаемое значение (фактическое значение) yhat - предсказанное значение

Тест проверяет модель на наличие гетероскедастичности

Гетероскедастичность это когда не постоянная дисперсия и получается неоднородные наблюдения

Тест Breusch-Pagan подходит для модели линейной регрессии к остаткам модели линейной регрессии (по умолчанию одни и те же объясняющие переменные берутся как в основной модели регрессии) и отклоняет, если слишком большая часть дисперсии объясняется дополнительными объясняющими переменными

bptest(formula, varformula = NULL, studentize = TRUE, data = list())

Параметры: - formula ~ символическое описание модели, подлежащей тестированию (или объект «lm»)

Пример использованя:

library(ggplot2)
library(lmtest)
data("diamonds")
head(diamonds)
## # A tibble: 6 x 10
##   carat cut       color clarity depth table price     x     y     z
##   <dbl> <ord>     <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 0.230 Ideal     E     SI2      61.5  55.0   326  3.95  3.98  2.43
## 2 0.210 Premium   E     SI1      59.8  61.0   326  3.89  3.84  2.31
## 3 0.230 Good      E     VS1      56.9  65.0   327  4.05  4.07  2.31
## 4 0.290 Premium   I     VS2      62.4  58.0   334  4.20  4.23  2.63
## 5 0.310 Good      J     SI2      63.3  58.0   335  4.34  4.35  2.75
## 6 0.240 Very Good J     VVS2     62.8  57.0   336  3.94  3.96  2.48

Загрузили данные давайте визуализируем две переменные

plot(diamonds$carat, diamonds$price)

# на нижнем графику мы их логарифмировали
plot(log(diamonds$carat), log(diamonds$price))

И постройм линейную регрессию, затем визуализируем

model1 <- lm(carat~price, diamonds)
bptest(model1)
## 
##  studentized Breusch-Pagan test
## 
## data:  model1
## BP = 5905.9, df = 1, p-value < 2.2e-16

Мы видим что альфа значение больше чем p-value, это означает что остатки гетероскедастичности

Логарифмируем их и посмотрим на BP значение

model2 <- lm(log(carat)~log(price), diamonds)
bptest(model2)
## 
##  studentized Breusch-Pagan test
## 
## data:  model2
## BP = 367.36, df = 1, p-value < 2.2e-16

Мы видим что преобразование данных с помощью логарифмы сглаживает модель

Вдобавок расмотрим тест

Голдфелда-Квандта

Это тест тоже показывает наличие гетероскедастичности

gqtest(model1, order.by = ~carat, data = diamonds, fraction = 0.2)
## 
##  Goldfeld-Quandt test
## 
## data:  model1
## GQ = 19.497, df1 = 21574, df2 = 21574, p-value < 2.2e-16
## alternative hypothesis: variance increases from segment 1 to 2

Посмотрим на показатель GQ

gqtest(model2, order.by = ~carat, data = diamonds, fraction = 0.2)
## 
##  Goldfeld-Quandt test
## 
## data:  model2
## GQ = 1.4119, df1 = 21574, df2 = 21574, p-value < 2.2e-16
## alternative hypothesis: variance increases from segment 1 to 2

Видим что тут показатель GQ упал, это значит что мы немного поборолись с гетероскедастичности