selected_alpha <-0.8## visualize the effect of lambda on the coefficients of the predictor variableselasticnet_single <-glmnet(body_mass_g ~ species_sex + year_c, data = df_penguins, alpha = selected_alpha) plot(elasticnet_single, xvar ="lambda", label = T)
## make predictionsdf_pred <-expand_grid(species_sex =unique(df_penguins$species_sex),year_c =unique(df_penguins$year_c)) %>%mutate(year = year_c +mean(df_penguins$year), OLS =predict(lm_OLS, newdata = .),ElasticNet =predict(elasticnet_cv, newdata = ., s ="lambda.1se", alpha = selected_alpha,use.model.frame = T)[,1]) %>%select(-year_c) %>%pivot_longer(c(OLS, ElasticNet), names_to ="method", values_to ="body_mass_g") df_hline <-tibble(y =c(coef(elasticnet_cv, s ="lambda.1se", alpha =0.9)[1,1], coef(lm_OLS)[1]),method =c("ElasticNet", "OLS"))ggplot(df_pred, aes(species_sex, body_mass_g)) +geom_point(aes(color = method),shape ="-", size =20) +geom_dotplot(data = df_penguins,binaxis ="y", dotsize =0.5, stackdir ="center", alpha =0.7,fill =NaN) +geom_hline(aes(yintercept = y, color = method), data = df_hline) +scale_x_discrete(guide =guide_axis(n.dodge =2)) +labs(x ="", y ="Body mass (g)", color ="Method")
## compare coefficients, we need to change the contrast coding to sum contrasts!contr_species_sex <-contr.sum(6)colnames(contr_species_sex) <-levels(df_penguins$species_sex)[1:5] contrasts(df_penguins$species_sex) <- contr_species_sexlm_OLS_sum_contrast <-lm(body_mass_g ~ species_sex + year_c,data = df_penguins)elasticnet_cv_sum_contr <-cv.glmnet( body_mass_g ~ species_sex + year_c, alpha = selected_alpha,data = df_penguins, nfolds =15,use.model.frame = T)tibble(names =names(coef(lm_OLS_sum_contrast)), OLS =coef(lm_OLS_sum_contrast),ElasticNet =as.numeric(coef(elasticnet_cv_sum_contr, s ="lambda.1se", alpha = selected_alpha)))