library(ISLR) library(glmnet) library(plotmo) # Base de datos Hitters. Hitters = Hitters Hitters = na.omit(Hitters) # Predecimos el salario en función del resto de las variables x = model.matrix (Salary~. , Hitters ) [ , -1] y= Hitters$Salary # Regresión Ridge reg_r = glmnet(x, y, alpha = 0, standardize = TRUE) plot_glmnet(reg_r) # Ajusto de penalización usando cross validation cv_r = cv.glmnet(x, y, alpha = 0, standardize = TRUE) plot(cv_r) lmin_r = cv_r$lambda.min # Mínimo de CV coefs_min = coef(reg_r)[, reg_r$lambda == lmin_r] coefs_min l1se_r = cv_r$lambda.1se # Criterio de 1sd de distancia coefs_1se = coef(reg_r)[, reg_r$lambda == l1se_r] plot(y, predict(reg_r, s = l1se_r, newx = x), type = 'p', pch = 19, xlab = "Salario", ylab = "Predicción Ridge") # Análogo para Lasso reg_l = glmnet(x, y, alpha = 1, standardize = TRUE) plot_glmnet(reg_l) cv_l = cv.glmnet(x, y, alpha = 1, standardize = TRUE) plot(cv_l) lmin_l = cv_l$lambda.min coefs_min = coef(reg_l)[, reg_l$lambda == lmin_l] coefs_min l1se_l = cv_l$lambda.1se coefs_1se = coef(reg_l)[, reg_l$lambda == l1se_l] plot(y, predict(reg_l, s = l1se_l, newx = x), type = 'p', pch = 19, xlab = "Salario", ylab = "Predicción Lasso") # Comentario: Se puede implementar estas herramientas en un contexto de # clasificación (usando regresión logística) indicando una función de # enlace adecuada