Цель: исследовать набор данных Carseats с помощью линейной регрессионной модели. Задействовав все возможные регрессоры, сделать вывод о пригодности модели для прогноза. Сравнить с методом k ближайших соседей по MSE на тестовой выборке.

## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## 'data.frame':    400 obs. of  4 variables:
##  $ Sales      : num  9.5 11.22 10.06 7.4 4.15 ...
##  $ Advertising: num  11 16 10 4 3 13 0 15 0 0 ...
##  $ Price      : num  120 83 80 97 128 72 108 120 124 124 ...
##  $ Urban      : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 1 2 2 1 1 ...

Описание переменных

Sales - продажи детских автокресел в тысячах.

Prices - цена на каждое из автокресел.

Advertising - бюджет компаний на рекламу.

Urban - фактор, принимающий значения Yes, No, показывающий расположение магазина в городе или селе.

Размерность обучающей выборки: n=340 строк, p=3 объясняющих переменных. Зависимая переменная – Sales.

Графики

## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Модели

## 
## Call:
## lm(formula = Sales ~ . + Urban:Price + Urban:Advertising, data = df.train)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7.9798 -1.5933 -0.0498  1.4930  6.1437 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          13.335216   1.319732  10.104  < 2e-16 ***
## Advertising           0.100273   0.040879   2.453   0.0147 *  
## Price                -0.055840   0.010924  -5.112 5.39e-07 ***
## UrbanYes             -0.358080   1.534855  -0.233   0.8157    
## Price:UrbanYes        0.001866   0.012738   0.146   0.8836    
## Advertising:UrbanYes  0.024831   0.047203   0.526   0.5992    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.449 on 334 degrees of freedom
## Multiple R-squared:  0.2708, Adjusted R-squared:  0.2599 
## F-statistic:  24.8 on 5 and 334 DF,  p-value: < 2.2e-16

Убираем Urban:Price, т.к. этот коэффициент является наиболее незначимым.

## 
## Call:
## lm(formula = Sales ~ . + Urban:Advertising, data = df.train)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7.9864 -1.5928 -0.0612  1.4895  6.1911 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          13.175307   0.740669  17.788   <2e-16 ***
## Advertising           0.100933   0.040570   2.488   0.0133 *  
## Price                -0.054468   0.005611  -9.708   <2e-16 ***
## UrbanYes             -0.141491   0.411643  -0.344   0.7313    
## Advertising:UrbanYes  0.024354   0.047022   0.518   0.6049    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.445 on 335 degrees of freedom
## Multiple R-squared:  0.2707, Adjusted R-squared:  0.262 
## F-statistic: 31.09 on 4 and 335 DF,  p-value: < 2.2e-16

В целом модель особо лучше выглядеть не стала, поэтому перейдем к следующей модели.

## 
## Call:
## lm(formula = Sales ~ Price + Advertising + Urban, data = df.train)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7.9132 -1.6014 -0.0504  1.5022  6.3096 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 13.032539   0.686713  18.978  < 2e-16 ***
## Price       -0.054172   0.005575  -9.716  < 2e-16 ***
## Advertising  0.119124   0.020283   5.873 1.03e-08 ***
## UrbanYes     0.006969   0.295116   0.024    0.981    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.442 on 336 degrees of freedom
## Multiple R-squared:  0.2701, Adjusted R-squared:  0.2636 
## F-statistic: 41.45 on 3 and 336 DF,  p-value: < 2.2e-16

Urban является незначимым, поэтому обойдемся без него.

## 
## Call:
## lm(formula = Sales ~ Price + Advertising, data = df.train)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7.9113 -1.5993 -0.0516  1.5007  6.3050 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 13.036410   0.665870  19.578  < 2e-16 ***
## Price       -0.054163   0.005555  -9.751  < 2e-16 ***
## Advertising  0.119141   0.020240   5.886 9.54e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.439 on 337 degrees of freedom
## Multiple R-squared:  0.2701, Adjusted R-squared:  0.2658 
## F-statistic: 62.37 on 2 and 337 DF,  p-value: < 2.2e-16

Получили модель, в которой все коэффициенты являются значимыми. Будем продолжать работать с ней дальше.

Проверка остатков

## 
##  studentized Breusch-Pagan test
## 
## data:  model.4
## BP = 1.3637, df = 2, p-value = 0.5057
## 
##  Durbin-Watson test
## 
## data:  model.4
## DW = 2.1168, p-value = 0.8602
## alternative hypothesis: true autocorrelation is greater than 0

Гетероскедастичность и автокорреляция в этой модели отсутствует.

Сравнение с kNN

В целом, можно сказать, что ошибка метода k ближайших соседей на всем графике больше, чем на тестовой выборке. Но модель, как я считаю, не стоит считать хорошей для прогноза, несмотря на хорошие показатели тестов. Связано это с тем, что модель может объяснить лишь 27% выборки, что не всегда есть хорошо. Возможно, используя дополнительные регрессоры, Р-квадрат(нормированный) удалось бы поднять.