get_test_pred <- function(x) {
test_data <- nfl_model_data |> filter(test_fold == x) # get test and training data
train_data <- nfl_model_data |> filter(test_fold != x)
test_x <- as.matrix(select(test_data, -score_diff, -test_fold)) # get test and training matrices
train_x <- as.matrix(select(train_data, -score_diff, -test_fold))
lm_fit <- lm(score_diff ~ ., data = select(train_data, -test_fold)) # fit models to training data
ridge_fit <- cv.glmnet(train_x, train_data$score_diff, alpha = 0)
lasso_fit <- cv.glmnet(train_x, train_data$score_diff, alpha = 1)
enet_fit <- cv.glmnet(train_x, train_data$score_diff, alpha = 0.5)
tibble(lm_pred = predict(lm_fit, newdata = test_data), # return test results
ridge_pred = as.numeric(predict(ridge_fit, newx = test_x)),
lasso_pred = as.numeric(predict(lasso_fit, newx = test_x)),
enet_pred = as.numeric(predict(enet_fit, newx = test_x)),
test_actual = test_data$score_diff,
test_fold = x)
}