##################################################################### ### BMTRY 790: MACHINE LEARNING AND DATA MINING, Spring 2023 ### ### ### ### Lecture 6: Alternative Regression Methods ### ### ### ### Body Fat Data Analysis ### ### ### ### Looking at principal component regression and partial ### ### least squares regression examples using the body fat ### ### data ### ##################################################################### bodyfat<-read.csv("H:/public_html/BMTRY790_Spring2023/Datasets/Body_fat.csv")[,-1] bodyfat2<-as.data.frame(scale(bodyfat)) library(pls) ### Fitting a Principal Component Model ### bf.pcr <- pcr(PBF ~ ., data=bodyfat2, validation = "CV") summary(bf.pcr) plot(bf.pcr, plottype="validation") plot(bf.pcr, plottype="coefficients") plot(bf.pcr, plottype="correlation") scoreplot(bf.pcr) scoreplot(bf.pcr, comp=1:5) loadingplot(bf.pcr) corrplot(bf.pcr, comp=1:3) plot(bf.pcr, "loadings",comps=1:3, legendpos="bottomright") loadingplot(bf.pcr) coef(bf.pcr, comp=1:2) scores(bf.pcr) loadings(bf.pcr) ### Comparison to OLS fit bf.ols<-lm(PBF ~ ., data=bodyfat2) pbf.ols<-predict(bf.ols) par(mfrow=c(1,2)) bf.pcr <- pcr(PBF ~ ., data=bodyfat2, validation = "CV") pbf8<-fitted(bf.pcr, ncomp=8)[,,8]; pbf.fullpcr<-fitted(bf.pcr, ncomp=13)[,,13] plot(pbf.ols, pbf.fullpcr, xlab="predictions from OLS", ylab="predictions from full PCR", pch=16, col=3) points(pbf.ols, pbf8, pch=1, col=2) ### Fitting a Partial Least Squares Model ### bf.plsr <- plsr(PBF ~ ., method="simpls", data=bodyfat2, validation = "CV") summary(bf.plsr) plot(bf.plsr, plottype="validation") par(mfrow=c(1,2)) plot(bf.plsr, plottype="coefficients", 1:3, legendpos="topright") plot(bf.plsr, plottype="loadings", 1:3, legendpos="topright") plot(bf.plsr, plottype="correlation", 1:3, pch=16, col=2) plot(bf.plsr, "score", 1:3) par(mfrow=c(2,2)) plot(bf.plsr, "prediction", ncomp=1); plot(bf.plsr, "prediction", ncomp=4) plot(bf.plsr, "prediction", ncomp=8); plot(bf.plsr, "prediction", ncomp=13) ### Comparison to OLS fit bf.ols<-lm(PBF ~ ., data=bodyfat2) pbf.ols<-predict(bf.ols) bf.plsr <- plsr(PBF ~ ., data=bodyfat2, validation = "CV") pbf6<-fitted(bf.plsr, ncomp=6)[,,6] pbf.fullplsr<-fitted(bf.plsr, ncomp=13)[,,13] plot(pbf.ols, pbf.fullplsr, xlab="predictions from OLS", ylab="predictions from full PLSR", pch=16, col=3) points(pbf.ols, pbf6, pch=1, col=2)