Проверим условия для получения состоятельных, несмещенных, эффективных оценок
Проверка случайности остаточной компоненты. Построим график зависимости остатков (разность модельных и истинных значений переменной price) от спрогнозированных значений модели
qplot(y = model_1$fitted.values, x = model_1$residuals, xlab = "Остаточные степени свободы, Ei", ylab="Спрогнозированные значения, y^")
Проверим условие M(Ei) = 0.
H0: M(Ei) = 0(математическое ожидание остатков равно нулю); H1: M(Ei) != 0(математическое ожидание остатков отлично от нуля).
mean(model_1$residuals)
## [1] -2.592451e-13
Вычисляем t расч.:
a<-mean(model_1$residuals) b<-sd(model_1$residuals, na.rm = FALSE) n <- sqrt(42126) tm <- a/b*n str(tm)
## num -3.27e-14
Вычисляем t табл. при p=0.95 и степени свободы N-1:
df <- nrow(train) qt(0.95, df - 1)
## [1] 1.64489
|t расч.| < t табл. => принимаем H0 с вероятностью p=0.95.
Протестируем на наличие гетероскедастичности в остатках регрессионное уравнение с помощью теста Бройша-Погана: H0: D(Ei) = sig^2 (отсутствие гетероскедастичности, наличие гомоскедастичности) H1: D(Ei) != sig^2 (наличие гетероскедастичности)
bptest(model_1)
## ## studentized Breusch-Pagan test ## ## data: model_1 ## BP = 6734, df = 1, p-value < 2.2e-16
Так как значение p-value меньше 0.05, нулевая гипотеза об отсутствие гетероскедастичности остатков отвергается.
Наличие гетероскедастичности в остатках регрессии можно проверить с помощью теста ранговой корреляции Спирмена.
Суть теста заключается в определении наличия связи между ростом остаточной компоненты и ростом независимого фактора, то есть определение роста дисперсии остатков. Такая зависимость проверяется на основе расчета коэффициента ранговой корреляции Спирмена ρ между остатками модели E и независимым фактором carat.
cor.test (train$carat, model_1$residuals, method = "spearman")
## Warning in cor.test.default(train$carat, model_1$residuals, method = ## "spearman"): Cannot compute exact p-value with ties
## ## Spearman's rank correlation rho ## ## data: train$carat and model_1$residuals ## S = 1.5715e+13, p-value < 2.2e-16 ## alternative hypothesis: true rho is not equal to 0 ## sample estimates: ## rho ## -0.2612942
Так как значение p-value меньше 0.05, нулевая гипотеза об отсутствие гетероскедастичности остатков отвергается.
Проверим условие cov(Ei,Ej)=0, i!=j
Н0: rho=0 (т.е. автокорреляция остатков отсутствует); H1: rho>0 или rho<0 (наличие положительной или отрицательной автокорреляции остатков).
# тест Дарбина-Уотсона bgtest(model_1)
## ## Breusch-Godfrey test for serial correlation of order up to 1 ## ## data: model_1 ## LM test = 9899, df = 1, p-value < 2.2e-16
# тест Бройша- Годфри dwtest(model_1)
## ## Durbin-Watson test ## ## data: model_1 ## DW = 1.0539, p-value < 2.2e-16 ## alternative hypothesis: true autocorrelation is greater than 0
Так как значение p-value меньше 0.05 => гипотеза H0 об отсутствии автокорреляции остатков отвергается.
Проверим условие Ei ~ N(0, sig^2), т.е. согласуются ли остатки регрессии с нормальным законом:
H0: остатки регрессии согласуются с нормальным законом распределения H1: остатки регрессии не согласуются с нормальным законом распределения
Рассмотрим графические тесты:
qqnorm(model_1$residuals)
library(sm);
## Package 'sm', version 2.2-5.6: type help(sm) for summary information
## ## Attaching package: 'sm'
## The following object is masked from 'package:MASS': ## ## muscle
Z <- model_1$residuals hist(Z, main = "Гистограмма остатков")
sm.density(model_1$residuals, model = "Normal",xlab = "Остатки", ylab = "Функция плотности распределения", xlim=c(-19246.62,12642.95))
Рассмотрим параметрические тесты:
library(nortest) # тест Lilliefors (Kolmogorov-Smirnov) lillie.test(model_1$residuals)
## ## Lilliefors (Kolmogorov-Smirnov) normality test ## ## data: model_1$residuals ## D = 0.14802, p-value < 2.2e-16
Так как значение p-value меньше 0.05, нулевая гипотеза о согласии распределения остатков с нормальным законом распределения отвергается.
Рассмотрим также тест Шапиро-Уилка. Данный тест применяется для выборки объема не менее 3 наблюдений и не более 5000. Для рассмотрения данного теста на текущей выборке выберем 4990 элементов выборки.
# тест Шапиро-Уилка sh <- model_1$residuals[1:4990] #View(sh) shapiro.test(sh)
## ## Shapiro-Wilk normality test ## ## data: sh ## W = 0.97111, p-value < 2.2e-16
Так как значение p-value меньше 0.05, нулевая гипотеза о согласии распределения остатков с нормальным законом распределения отвергается.
Прогнозирование значений по полученной модели на тестовой выборке:
plot(test$carat, test$price, xlab="Карат", ylab="Цена") lines(test$carat, predict(model_1, test), col = 'red')