## Warning: package 'gam' was built under R version 3.4.4
## Loading required package: foreach
## Warning: package 'foreach' was built under R version 3.4.4
## Loaded gam 1.15
## Warning: package 'akima' was built under R version 3.4.4
## 'data.frame':    506 obs. of  14 variables:
##  $ crim   : num  0.00632 0.02731 0.02729 0.03237 0.06905 ...
##  $ zn     : num  18 0 0 0 0 0 12.5 12.5 12.5 12.5 ...
##  $ indus  : num  2.31 7.07 7.07 2.18 2.18 2.18 7.87 7.87 7.87 7.87 ...
##  $ chas   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ nox    : num  0.538 0.469 0.469 0.458 0.458 0.458 0.524 0.524 0.524 0.524 ...
##  $ rm     : num  6.58 6.42 7.18 7 7.15 ...
##  $ age    : num  65.2 78.9 61.1 45.8 54.2 58.7 66.6 96.1 100 85.9 ...
##  $ dis    : num  4.09 4.97 4.97 6.06 6.06 ...
##  $ rad    : int  1 2 2 3 3 3 5 5 5 5 ...
##  $ tax    : num  296 242 242 222 222 222 311 311 311 311 ...
##  $ ptratio: num  15.3 17.8 17.8 18.7 18.7 18.7 15.2 15.2 15.2 15.2 ...
##  $ black  : num  397 397 393 395 397 ...
##  $ lstat  : num  4.98 9.14 4.03 2.94 5.33 ...
##  $ medv   : num  24 21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 ...

Будем работать с переменными crim(количество преступлений) и nox(концентрация оксидов азота).

Судя по графику, можно сказать, что данные неоднородны, посмотрев на структуру, убеждаемся, что разброс переменной crim очень высок. Проведем границу на 30.

Получаем регрессионный анализ для полинома 3 степени.

##               Estimate Std. Error t value Pr(>|t|)
## (Intercept)       3.61       0.32   11.24        0
## poly(nox, 3)1    81.37       7.23   11.25        0
## poly(nox, 3)2   -28.83       7.23   -3.99        0
## poly(nox, 3)3   -60.36       7.23   -8.34        0
##           1      2     3
## [1,] -0.006 -0.033 0.040
## [2,] -0.033  0.003 0.028
## [3,] -0.033  0.003 0.028
## [4,] -0.037  0.011 0.019
## [5,] -0.037  0.011 0.019
## [6,] -0.037  0.011 0.019
##          1     2     3
## [1,] 0.538 0.289 0.156
## [2,] 0.469 0.220 0.103
## [3,] 0.469 0.220 0.103
## [4,] 0.458 0.210 0.096
## [5,] 0.458 0.210 0.096
## [6,] 0.458 0.210 0.096
##                        Estimate Std. Error t value Pr(>|t|)
## (Intercept)              233.09      33.64    6.93        0
## poly(nox, 3, raw = T)1 -1279.37     170.40   -7.51        0
## poly(nox, 3, raw = T)2  2248.54     279.90    8.03        0
## poly(nox, 3, raw = T)3 -1245.70     149.28   -8.34        0

Получаем границы доверительного интервала.

##   lower.bound upper.bound
## 1        0.40        5.06
## 2        0.34        4.93
## 3        0.28        4.79
## 4        0.22        4.66
## 5        0.17        4.53
## 6        0.11        4.41

Заметно, что график полностью находится в пределах доверительной области.

Модель anova говорит нам о том, что полином четвертой степени ухудшает модель, поэтому стоит остановиться на полиноме третьей степени.

## Analysis of Variance Table
## 
## Model 1: crim ~ nox
## Model 2: crim ~ poly(nox, 2)
## Model 3: crim ~ poly(nox, 3)
## Model 4: crim ~ poly(nox, 4)
## Model 5: crim ~ poly(nox, 5)
##   Res.Df   RSS Df Sum of Sq     F Pr(>F)    
## 1    504 30742                              
## 2    503 29911  1     831.1 16.49 <2e-16 ***
## 3    502 26267  1    3643.6 72.31 <2e-16 ***
## 4    501 26266  1       1.1  0.02   0.89    
## 5    500 25193  1    1072.8 21.29 <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred

Очень заметен слишком высокий доверительный интервал при минимальных значениях nox, что в очередной раз указывает на неоднородность данных.

##   lower.bound upper.bound
## 1           0           1
## 2           0           1
## 3           0           1
## 4           0           1
## 5           0           1
## 6           0           1

Теперь построим ступенчатую функцию для нашей модел с учетом P(crim>30). Мы решили поделить на 3 интервала.

## 
## (0.385,0.547] (0.547,0.709] (0.709,0.871] 
##           293           152            61
##                          Estimate Std. Error t value Pr(>|t|)
## (Intercept)                  0.29       0.45    0.64     0.52
## cut(nox, 3)(0.547,0.709]     8.60       0.76   11.25     0.00
## cut(nox, 3)(0.709,0.871]     6.16       1.08    5.72     0.00

Теперь построим тот же график с вероятностями. Верхние границы 1-ого и 3-ого интервалов не определены. График показывает, что как раз таким там, где доверительнный интервал отчетливо виден, вероятность преступления гораздо выше, чем в 2 других, отсюда такое закономерное изображение графика.

##   lower.bound upper.bound
## 1           0         NaN
## 2           0         NaN
## 3           0         NaN
## 4           0         NaN
## 5           0         NaN
## 6           0         NaN

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