# Hitters data - PCA regression

library(ISLR)
names(Hitters)
dim(Hitters)
sum(is.na(Hitters$Salary))
Hitters=na.omit(Hitters)
dim(Hitters)
sum(is.na(Hitters))

#pick variables that are numeric
ind = c(1:13,16:18)

Z = prcomp(Hitters[,ind],retx=TRUE,scale=TRUE)$x

Hitters2 = data.frame(Z=Z,League=Hitters$League,
                      Division=Hitters$Division,
                 NewLeague=Hitters$NewLeague,Salary=Hitters$Salary)


fit.pca = lm(Salary~.,data=Hitters2)

#Dividing into training/test set
set.seed(1)
train=sample(1:nrow(Hitters), nrow(Hitters)/2)
test=(-train)
y.test=Hitters$Salary[test]

RSS = rep(NA,length(ind))
for(m in 1:length(ind))
{
 Hitters2 = data.frame(Z=Z[,1:m],League=Hitters$League,
                       Division=Hitters$Division,
                       NewLeague=Hitters$NewLeague,Salary=Hitters$Salary)
 
 fit.pca = lm(Salary~.,data=Hitters2[train,])
 pred.pca = predict(fit.pca,Hitters2[test,])
 RSS[m] = sqrt(mean((y.test-pred.pca)^2))
}
plot(1:m,RSS)
