R Markdown

Load necessary libraries

library(tidymodels) library(ISLR) library(glmnet)

Load and preprocess the Hitters dataset

data(Hitters) Hitters <- Hitters %>% na.omit()

Create a recipe for preprocessing

hitters_recipe <- recipe(Salary ~ ., data = Hitters) %>% step_dummy(all_nominal_predictors()) %>% step_normalize(all_numeric_predictors())

Define ridge regression model

ridge_spec <- linear_reg(penalty = tune(), mixture = 0) %>% set_engine(“glmnet”)

Define lasso regression model

lasso_spec <- linear_reg(penalty = tune(), mixture = 1) %>% set_engine(“glmnet”)

Set up cross-validation

hitters_folds <- vfold_cv(Hitters, v = 5)

Define tuning grid

lambda_grid <- grid_regular(penalty(), levels = 50)

Create workflows for ridge and lasso

ridge_workflow <- workflow() %>% add_model(ridge_spec) %>% add_recipe(hitters_recipe)

lasso_workflow <- workflow() %>% add_model(lasso_spec) %>% add_recipe(hitters_recipe)

Tune ridge regression

ridge_tune <- tune_grid( ridge_workflow, resamples = hitters_folds, grid = lambda_grid )

Tune lasso regression

lasso_tune <- tune_grid( lasso_workflow, resamples = hitters_folds, grid = lambda_grid )

Extract best lambda values

best_ridge_lambda <- select_best(ridge_tune, metric = “rmse”) best_lasso_lambda <- select_best(lasso_tune, metric = “rmse”)

Fit final models

final_ridge <- finalize_workflow(ridge_workflow, best_ridge_lambda) %>% fit(data = Hitters)

final_lasso <- finalize_workflow(lasso_workflow, best_lasso_lambda) %>% fit(data = Hitters)