save_figs = FALSE source('../Chapter4/exercise_4_5.R') m = 4 y_mean = mean(DF$MPG) y_std = sd(DF$MPG) # Part (a): PC regression: # CXY = cor(DF) print(CXY) # notice no r_ij > 0.95 (two are very close however) ES = eigen(CXY[ 1:m, 1:m ]) print('Eigenvalues:') print(ES$values) # one eigenvalue is less than 0.05 # Compute the principal components (and a scatter plot of them): # DFs = scale(DF) P = ES$vectors Z = as.matrix(DFs[ , 1:m ]) %*% P colnames(Z) = sprintf('Z%d', seq(1, m)) print(summary(Z)) if( save_figs ){ postscript("../../WriteUp/Graphics/Chapter5/ex_5_16_scatter_plot_of_Z.eps", onefile=FALSE, horizontal=FALSE) } pairs(Z, xlim=c(-3, +3), ylim=c(-3, +3)) if( save_figs ){ dev.off() } # Part (b): # # PC regression: # #source('../../../Hastie/Code/Chapter3/pcr_wwx.R') source('http://www.waxworksmath.com/Authors/G_M/Hastie/Code/Chapter3/pcr_wwx.R') res = pcr_wwx(DF, DF) beta_pc_z = res[[1]][, m-1] pt_1 = sprintf('PC model: MPG = %+.3f', y_mean) c_names = colnames(DF)[1:m] z_names = paste(c_names, 'Z', sep='') pt_2 = paste(sprintf('%+.3f %s', beta_pc_z, z_names), sep='', collapse=' ') print(sprintf('%s %s', pt_1, pt_2)) # Ridge Regression: # cv = 0.05 XTX = CXY[1:m, 1:m] XTy = CXY[1:m, m+1] beta_ridge_z = solve(XTX + cv*diag(m), XTy) # the coefficients of the standardized predictors pt_1 = sprintf('Ridge model (c=%.2f): MPG = %+.3f', cv, y_mean) c_names = names(beta_ridge_z) z_names = paste(c_names, 'Z', sep='') pt_2 = paste(sprintf('%+.3f %s', beta_ridge_z * y_std, z_names), sep='', collapse=' ') print(sprintf('%s %s', pt_1, pt_2))