data(advertising)
data <- advertising
nan_values <- sum(is.na(data))
nan_values
## [1] 0
x <- model.matrix(sales~.,data)[, -1]
y <- data$sales
set.seed(2147)
trainset <- data %>%
sample_frac(0.7)
testset <- data %>%
setdiff(trainset)
x_train <- model.matrix(sales~., trainset)[,-1]
x_test <- model.matrix(sales~., testset)[,-1]
y_train <- trainset$sales
y_test <- testset$sales
cv_out <- cv.glmnet(x_train, y_train, alpha=0, folds=5)
cv_out
##
## Call: cv.glmnet(x = x_train, y = y_train, alpha = 0, folds = 5)
##
## Measure: Mean-Squared Error
##
## Lambda Index Measure SE Nonzero
## min 0.4048 100 2.526 0.3606 3
## 1se 0.8521 92 2.851 0.4303 3
best_lambda <- cv_out$lambda.min
cat(paste('Wartość lambdy, która najmocniej minimalizuje MSE na zbiorze treningowym to:', best_lambda))
## Wartość lambdy, która najmocniej minimalizuje MSE na zbiorze treningowym to: 0.404811764760053
plot(cv_out)
predict_ridge <- predict(cv_out, s=best_lambda, newx=x_test)
mse_test <- mean((predict_ridge - y_test)^2)
cat(paste('Metryka MSE na zbiorze testowym w regresji grzbietowej wyniosła:', mse_test))
## Metryka MSE na zbiorze testowym w regresji grzbietowej wyniosła: 4.425334281384
ridge_gen <- glmnet(x, y, alpha=0)
ridge_gen_coef <- predict(ridge_gen, type='coefficients', s=best_lambda)
cat(paste('Współczynniki przy użyciu najlepszej lambdy: \n'))
## Współczynniki przy użyciu najlepszej lambdy:
ridge_gen_coef
## 4 x 1 sparse Matrix of class "dgCMatrix"
## s1
## (Intercept) 3.634052677
## TV 0.042519738
## radio 0.173864503
## newspaper 0.002993224
Żaden ze współczynników nie jest zerowy, zatem wyniki pokazują, że regresja grzbietowa wykonała swoją pracę w poprawny sposób z wynikiem MSE na zbiorze testowym równym 4.425334281384.
model_lasso <- glmnet(x_train, y_train, alpha=1, lamba=(10^seq(10,-2,length=100)))
plot(model_lasso)
cv_out_lasso <- cv.glmnet(x_train, y_train, alpha=1, folds=5)
cv_out_lasso
##
## Call: cv.glmnet(x = x_train, y = y_train, alpha = 1, folds = 5)
##
## Measure: Mean-Squared Error
##
## Lambda Index Measure SE Nonzero
## min 0.0741 44 2.465 0.3758 2
## 1se 0.4341 25 2.838 0.5049 2
best_lambda_lasso <- cv_out_lasso$lambda.min
cat(paste('Wartość lambdy, która najmocniej minimalizuje MSE na zbiorze treningowym to:', best_lambda_lasso))
## Wartość lambdy, która najmocniej minimalizuje MSE na zbiorze treningowym to: 0.0741104394060153
plot(cv_out_lasso)
predict_lasso <- predict(cv_out_lasso, s=best_lambda_lasso, newx=x_test)
mse_test_lasso <- mean((predict_lasso - y_test)^2)
cat(paste('Metryka MSE na zbiorze testowym w regresji LASSO wyniosła:', mse_test_lasso))
## Metryka MSE na zbiorze testowym w regresji LASSO wyniosła: 4.23978569962593
lasso_gen <- glmnet(x, y, alpha=1)
lasso_gen_coef <- predict(lasso_gen, type='coefficients', s=best_lambda)
cat(paste('Współczynniki przy użyciu najlepszej lambdy: \n'))
## Współczynniki przy użyciu najlepszej lambdy:
lasso_gen_coef
## 4 x 1 sparse Matrix of class "dgCMatrix"
## s1
## (Intercept) 4.18290846
## TV 0.04127349
## radio 0.16208021
## newspaper .
Regresja Lasso wykorzystała swoją zdolność do redukcji zmiennych niezależnych i usunęła zmienną newspaper (współczynnik stojący przy tej zmiennej okazał sie 0).
model_ols <- lm(sales~., data=trainset)
predict_ols <- predict(model_ols, testset)
mse_ols <- mean((predict_ols - y_test)^2)
cat(paste('Metryka MSE na zbiorze testowym wyniosła:', mse_ols))
## Metryka MSE na zbiorze testowym wyniosła: 4.22464823572012
summary(model_ols)
##
## Call:
## lm(formula = sales ~ ., data = trainset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -5.5583 -0.5352 0.1459 1.1234 2.6577
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.172866 0.341101 9.302 3.12e-16 ***
## TV 0.044804 0.001524 29.391 < 2e-16 ***
## radio 0.192747 0.009526 20.233 < 2e-16 ***
## newspaper -0.003063 0.006040 -0.507 0.613
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.507 on 136 degrees of freedom
## Multiple R-squared: 0.9156, Adjusted R-squared: 0.9138
## F-statistic: 491.9 on 3 and 136 DF, p-value: < 2.2e-16
Ad.1 Wybrałem zbiór danych Advertising ze strony ISLR.
Ad.2 Modelowałem sprzedaż z różnych źródeł reklamowania.
Ad.3 Oczekiwałem, że regresja grzbietowa okaże się lepsza od Lasso, gdyż charakterystyka wybranego zbioru danych sugerowała, że każda ze zmiennych niezależnych ma istotny wpływ na model. Niemniej jednak to regresja Lasso okazała się lepsza pod względem metryki błędu średniokwadratowego (MSE). Co ciekawe stało się tak, za sprawą przypisania zmiennej newspaper współczynnika równego 0. Co ciekawe na tle tych modeli i tak lepszy wynik osiągnęła metoda najmniejszych kwadratów, choć nieznacznie niższy od regresji Lasso.
Ad.4 W modelu regresji grzbietowej każda zmienna niezależna okazała się istotna, a kolejność ich wpływu na wynik to:
W przypadku regresjii Lasso zmienna newspaper została wyeliminowana z modelu. Warto dodać, że zmienna radio w tym modelu również okazała się najważniejsza. W modelu regresji liniowej (OLS) zmienna newspaper także okazała się statystycznie nieistotna.