#install.packages("glmnet")
library(glmnet)
n <- 100
d <- 5
x <- matrix(rnorm(n*d), n, d)
y <- rnorm(n)
fit <- glmnet(x,y)
print(fit)

coef(fit, s=0.01)

plot(fit)

predict(fit, newx=x[1:10,], s=c(0.01,0.005))

fit_ridge <- glmnet(x,y, alpha=0)
fit_lasso <- glmnet(x,y, alpha=1)
par(mfrow=c(1,2))
plot(fit_ridge)
plot(fit_lasso)

beta <- matrix(c(1,2,0,0,0),5,1)
y <- x%*%beta + 0.5*rnorm(n)
dat <- data.frame(x=x,y=y)

fit_lm <- lm(y~., data=dat)
summary(fit_lm)

step(fit_lm)
par(mfrow=c(1,2))
fit_ridge <- glmnet(x, y, alpha=0)
plot(fit_ridge)
fit_lasso <- glmnet(x, y, alpha=1)
plot(fit_lasso)

setwd("C:\\Users\\Auditorium\\Desktop\\Penalized regression")
###### Prostate data #####
prostate <- read.csv("prostate.csv")
names(prostate)

fit_lm <- lm(lpsa~., data=prostate)

step(fit_lm)
summary(fit_lm)

fit_lasso <- glmnet(data.matrix(prostate[,1:8]), prostate$lpsa, alpha=1)
par(mfrow=c(1,1))
plot(fit_lasso)

fit_cv <- cv.glmnet(data.matrix(prostate[,1:8]), prostate$lpsa, nfolds=10, alpha=1)
par(mfrow=c(1,2))
plot(fit_cv)
plot(fit_cv$glmnet.fit, "lambda")

coef(fit_cv, s="lambda.min")
coef(fit_cv, s="lambda.1se")

predict(fit_cv, newx=data.matrix(prostate[1:10,1:8]), s="lambda.min")
predict(fit_cv, newx=data.matrix(prostate[1:10,1:8]), s="lambda.1se")
prostate$lpsa[1:10]
