# Chapter 6 page 259: 2,9,11

#9

library(pcr)
## Warning: package 'pcr' was built under R version 4.1.3
library(glmnet)
## Warning: package 'glmnet' was built under R version 4.1.3
## Loading required package: Matrix
## Loaded glmnet 4.1-4
library(ISLR)
## Warning: package 'ISLR' was built under R version 4.1.3
data(College)
set.seed(1)
train=sample(1:dim(College)[1],dim(College)[1]/2)
test<--train
College.train=College[train,]
College.test=College[test,]
fit.lm=lm(Apps~.,data=College.train)
pred.lm=predict(fit.lm,College.test)
mean((pred.lm-College.test$Apps)^2)
## [1] 1135758
train.mat=model.matrix(Apps~.,data=College.train)
test.mat=model.matrix(Apps~.,data=College.test)
grid=10^seq(4,-2,length=100)
fit.ridge=glmnet(train.mat,College.train$Apps,alpha=0,lambda=grid,thresh=1e-12)
cv.ridge=cv.glmnet(train.mat,College.train$Apps,alpha=0,lambda=grid,threst=1e-12)
bestlam.ridge=cv.ridge$lambda.min
bestlam.ridge
## [1] 0.01
fit.lasso=glmnet(train.mat,College.train$Apps,alpha=1,lambda=grid,threst=1e-12)
cv.lasso=cv.glmnet(train.mat,College.train$Apps,alpha=1,lambda=grid,threst=1e-12)
bestlam.lasso=cv.lasso$lambda.min
bestlam.lasso
## [1] 0.01
pred.lasso=predict(fit.lasso,s=bestlam.lasso,newx=test.mat)
mean((pred.lasso-College.test$Apps)^2)
## [1] 1134622
predict(fit.lasso,s=bestlam.lasso,type="coefficients")
## 19 x 1 sparse Matrix of class "dgCMatrix"
##                        s1
## (Intercept) -7.913734e+02
## (Intercept)  .           
## PrivateYes  -3.074456e+02
## Accept       1.778334e+00
## Enroll      -1.460578e+00
## Top10perc    6.666608e+01
## Top25perc   -2.226202e+01
## F.Undergrad  9.130254e-02
## P.Undergrad  9.723281e-03
## Outstate    -1.083198e-01
## Room.Board   2.116985e-01
## Books        2.915430e-01
## Personal     6.173312e-03
## PhD         -1.546465e+01
## Terminal     6.396990e+00
## S.F.Ratio    2.283753e+01
## perc.alumni  1.121415e+00
## Expend       4.858961e-02
## Grad.Rate    7.478376e+00
test.avg=mean(College.test$Apps)
lm.r2=1-mean((pred.lm-College.test$Apps)^2/mean((test.avg-College.test$Apps)^2))
lasso.r2=1-mean((pred.lasso-College.test$Apps)^2/mean((test.avg-College.test$Apps)^2))