\documentclass{beamer} %\usepackage{beamerthemeshadow} %\usepackage{url,graphics,amsmath,pstricks,hyperref,times,color} %\usepackage{graphicx} \usepackage{Sweave} %\usepackage{amscd} %\usepackage[tableposition=top]{caption} %\usepackage{ifthen} % \usepackage[utf8]{inputenc} \usepackage{amssymb, amsmath} \usepackage{amsfonts} \usepackage{mathtools} \def\R{\mathbb{R}} \begin{document} \SweaveOpts{concordance=TRUE} \begin{frame}[fragile] Suppose we have the following feature vectors: <>= x <- c(0, 1, 2) y1 <- c(1, 2, 0) y2 <- c(2, 1, 0) y3 <- c(1.5, .2, 0) y4 <- c(1, 1.5, 0) y5 <- c(0.5, 1.2, 0) y1 <- c(2, 1, 0) y2 <- c(1.8, 1.1, 0) y3 <- c(1.5, .2, 0) y4 <- c(1, .6, 0) y5 <- c(0.8, .3, 0) Y<- rbind(y1, y2, y3, y4, y5) columns <- c("f(0)", "f(1)", "f(2)") colorY <- c("red", "blue", "purple", "chocolate", "green") colnames(Y) <- columns rownames(Y) <- colorY Yc <- Y Yc @ We can plot these feature vectors (regardless of their length) in $\R^2$ \vskip -20pt <>= p1 <- cbind(x, y1) p2 <- cbind(x, y2) p3 <- cbind(x, y3) p4 <- cbind(x, y4) p5 <- cbind(x, y5) plot(p1, type = "l", col="red3", xlab = "", ylab = "") points(p1, cex= 2, pch=1, col="red3") points(p2, type = "l", col="blue") points(p2, cex= 2, pch=2, col="blue") points(p3, type = "l", col="purple3") points(p3, cex= 2, pch=3, col="purple3") points(p4, type = "l", col="chocolate4") points(p4, cex= 2, pch=4, col="chocolate4") points(p5, type = "l", col="darkgreen") points(p5, cex= 2, pch=5, col="darkgreen") @ \end{frame} \begin{frame}[fragile] Let's take the mean of our feature vectors and plot it's graph in black: <>= Y<- rbind(y1, y2, y3, y4, y5) mean <- colMeans(Y) XY <- cbind(x, mean) t(XY) @ \vskip -20pt <>= plot(XY, type = "l", ylim=c(0,2), lwd=3) points(p1, type = "l", col="red3") points(p1, cex= 2, pch=1, col="red3") points(p2, type = "l", col="blue") points(p2, cex= 2, pch=2, col="blue") points(p3, type = "l", col="purple3") points(p3, cex= 2, pch=3, col="purple3") points(p4, type = "l", col="chocolate4") points(p4, cex= 2, pch=4, col="chocolate4") points(p5, type = "l", col="darkgreen") points(p5, cex= 2, pch=5, col="darkgreen") @ \end{frame} \begin{frame}[fragile] To see how these functions (feature vectors) vary about the mean, we will subtract the mean vector from each feacture vector: \begin{columns} \begin{column}{0.48\textwidth} <>= plot(XY, type = "l", ylim=c(0,2), lwd=3) points(p1, type = "l", col="red3") points(p1, cex= 2, pch=1, col="red3") points(p2, type = "l", col="blue") points(p2, cex= 2, pch=2, col="blue") points(p3, type = "l", col="purple3") points(p3, cex= 2, pch=3, col="purple3") points(p4, type = "l", col="chocolate4") points(p4, cex= 2, pch=4, col="chocolate4") points(p5, type = "l", col="darkgreen") points(p5, cex= 2, pch=5, col="darkgreen") @ \begin{figure} \begin{center} <>= <> @ \end{center} \caption{Raw Data + Mean} \label{fig:fig1plot} \end{figure} \end{column} \begin{column}{0.48\textwidth} <>= mp1 <- cbind(x, y1 - mean) mp2 <- cbind(x, y2 - mean) mp3 <- cbind(x, y3 - mean) mp4 <- cbind(x, y4 - mean) mp5 <- cbind(x, y5 - mean) mpmean <- cbind(x, mean - mean) plot(mp1, type = "l", col="red3", ylim=c(-1.3,1)) points(mp1, cex= 2, pch=1, col="red3") points(mp2, type = "l", col="blue") points(mp2, cex= 2, pch=2, col="blue") points(mp3, type = "l", col="purple3") points(mp3, cex= 2, pch=3, col="purple3") points(mp4, type = "l", col="chocolate4") points(mp4, cex= 2, pch=4, col="chocolate4") points(mp5, type = "l", col="darkgreen") points(mp5, cex= 2, pch=5, col="darkgreen") points(mpmean, type = "l") @ \begin{figure} \begin{center} <>= <> @ \end{center} \caption{Mean Residuals} \label{fig:fig2plot} \end{figure} \end{column} \end{columns} @ \end{frame} \begin{frame}[fragile] We can also plot our feature vectors in $\R^n$ where $n$ is the number of features <>= Yc library(dplyr) Y1 <- data.frame(Y) Y2 <- select(Y1, -X3) plot(Y2[1,], cex= 2, pch=1, col="red3", xlim=c(0,2), ylim=c(0,1.5)) points(Y2[2,], cex= 2, pch=2, col="blue") points(Y2[3,], cex= 2, pch=3, col="purple3") points(Y2[4,], cex= 2, pch=4, col="chocolate4") points(Y2[5,], cex= 2, pch=5, col="darkgreen") points(Y2[6,], cex= 2, pch=10) @ \end{frame} \begin{frame}[fragile] Let's translate these points by subracting off the mean: \begin{columns} \begin{column}{0.48\textwidth} <>= plot(Y2[1,], cex= 2, pch=1, col="red3", xlim=c(0,2), ylim=c(0,1.2)) points(Y2[2,], cex= 2, pch=2, col="blue") points(Y2[3,], cex= 2, pch=3, col="purple3") points(Y2[4,], cex= 2, pch=4, col="chocolate4") points(Y2[5,], cex= 2, pch=5, col="darkgreen") points(Y2[6,], cex= 2, pch=10) @ \begin{figure} \begin{center} <>= <> @ \end{center} \caption{Raw Data + Mean} \label{fig:fig3plot} \end{figure} \end{column} \begin{column}{0.48\textwidth} <>= plot(Y2[1,] - mean, cex= 2, pch=1, col="red3", xlim=c(-1.42,0.58), ylim=c(-0.64,0.56)) points(Y2[2,]- mean, cex= 2, pch=2, col="blue") points(Y2[3,]- mean, cex= 2, pch=3, col="purple3") points(Y2[4,]- mean, cex= 2, pch=4, col="chocolate4") points(Y2[5,]- mean, cex= 2, pch=5, col="darkgreen") points(Y2[6,]- mean, cex= 2, pch=10) @ \begin{figure} \begin{center} <>= <> @ \end{center} \caption{Centered about the origin} \label{fig:fig4plot} \end{figure} \end{column} \end{columns} @ \end{frame} \begin{frame}[fragile] Covariance: $$Cov(X,Y) = \sum_{i=0}^N \frac{(x_i - \overline{x})(y_i - \overline{y})}{N}$$ <>= Y2 @ covariance matrix: <>= cov(Y2) @ \end{frame} \begin{frame}[fragile] We can now apply PCA to our data: \vskip 10pt \begin{columns} \begin{column}{0.5\textwidth} Covariance matrix: <>= cov(Y2) E<-eigen(cov(Y2)) @ <>= plot(Y2[1,] - mean, cex= 2, pch=1, col="red3", xlim=c(-1,1), ylim=c(-1,1), asp=1) points(Y2[2,]- mean, cex= 2, pch=2, col="blue") points(Y2[3,]- mean, cex= 2, pch=3, col="purple3") points(Y2[4,]- mean, cex= 2, pch=4, col="chocolate4") points(Y2[5,]- mean, cex= 2, pch=5, col="darkgreen") points(Y2[6,]- mean, cex= 2, pch=10) arrows(0,0,E$values[1]*E$vectors[1,1],E$values[1]*E$vectors[2,1], col="red", lwd = 3) arrows(0,0,E$values[2]*E$vectors[1,2],E$values[2]*E$vectors[2,2], col="orange", lwd = 3) @ \end{column} \begin{column}{0.6\textwidth} Eigenvalues and Eigenvectors <>= E @ <>= E$values[1]/(E$values[1]+E$values[2]) sqrt(E$values) @ @ \end{column} \end{columns} \end{frame} \begin{frame}[fragile] <>= plot(Y2[1,] - mean, cex= 4, pch=1, col="red3", xlim=c(-1,1), ylim=c(-1,1), asp=1) points(Y2[2,]- mean, cex= 4, pch=2, col="blue") points(Y2[3,]- mean, cex= 4, pch=3, col="purple3") points(Y2[4,]- mean, cex= 4, pch=4, col="chocolate4") points(Y2[5,]- mean, cex= 4, pch=5, col="darkgreen") points(Y2[6,]- mean, cex= 4, pch=10) arrows(0,0,E$values[1]*E$vectors[1,1],E$values[1]*E$vectors[2,1], col="red", lwd = 3) arrows(0,0,E$values[2]*E$vectors[1,2],E$values[2]*E$vectors[2,2], col="orange", lwd = 3) @ \end{frame} \begin{frame}[fragile] We can now apply PCA to our data: \vskip 10pt \begin{columns} \begin{column}{0.5\textwidth} Covariance matrix: <>= cov(Y2) E<-eigen(cov(Y2)) @ <>= plot(Y2[1,] - mean, cex= 2, pch=1, col="red3", xlim=c(-1,1), ylim=c(-1,1), asp=1) points(Y2[2,]- mean, cex= 2, pch=2, col="blue") points(Y2[3,]- mean, cex= 2, pch=3, col="purple3") points(Y2[4,]- mean, cex= 2, pch=4, col="chocolate4") points(Y2[5,]- mean, cex= 2, pch=5, col="darkgreen") points(Y2[6,]- mean, cex= 2, pch=10) arrows(0,0,E$values[1]*E$vectors[1,1],E$values[1]*E$vectors[2,1], col="red", lwd = 3) arrows(0,0,E$values[2]*E$vectors[1,2],E$values[2]*E$vectors[2,2], col="orange", lwd = 3) @ \end{column} \begin{column}{0.6\textwidth} Eigenvalues and Eigenvectors <>= E @ <>= E$values[1]/(E$values[1]+E$values[2]) sqrt(E$values) @ @ \end{column} \end{columns} \end{frame} \begin{frame}[fragile] <>= Y3<- as.matrix(t(t(Y2) - c(mean[1], mean[2]))) prin_comp <- prcomp(Y3, scale=FALSE) prin_comp summary(prin_comp) @ \end{frame} \begin{frame}[fragile] <>= plot(Y2[1,] - mean, cex= 2, pch=1, col="red3", xlim=c(-0.6,0.6), ylim=c(-0.6,0.6), asp=1) points(Y2[2,]- mean, cex= 2, pch=2, col="blue") points(Y2[3,]- mean, cex= 2, pch=3, col="purple3") points(Y2[4,]- mean, cex= 2, pch=4, col="chocolate4") points(Y2[5,]- mean, cex= 2, pch=5, col="darkgreen") points(Y2[6,]- mean, cex= 2, pch=10) arrows(0,0,E$values[1]*E$vectors[1,1],E$values[1]*E$vectors[2,1], col="red", lwd = 3) arrows(0,0,E$values[2]*E$vectors[1,2],E$values[2]*E$vectors[2,2], col="orange", lwd = 3) @ \end{frame} \begin{frame}[fragile] <>= prin_comp$sdev prin_comp$rotation prin_comp$x t(t(Y2) - c(mean[1], mean[2])) @ \end{frame} \begin{frame}[fragile] \begin{columns} \begin{column}{0.5\textwidth} Covariance matrix: <>= cov(Y2) E<-eigen(cov(Y2)) @ <>= plot(Y2[1,] - mean, cex= 2, pch=1, col="red3", xlim=c(-1,1), ylim=c(-1,1)) points(Y2[2,]- mean, cex= 2, pch=2, col="blue") points(Y2[3,]- mean, cex= 2, pch=3, col="purple3") points(Y2[4,]- mean, cex= 2, pch=4, col="chocolate4") points(Y2[5,]- mean, cex= 2, pch=5, col="darkgreen") points(Y2[6,]- mean, cex= 2, pch=10) arrows(0,0,E$values[1]*E$vectors[1,1],E$values[1]*E$vectors[2,1], col="red", lwd = 3) arrows(0,0,E$values[2]*E$vectors[1,2],E$values[2]*E$vectors[2,2], col="orange", lwd = 3) @ \end{column} \begin{column}{0.5\textwidth} <>= # perform principal components analysis pca <- prcomp(Y3) # project new data onto the PCA space RotY<-as.matrix(Y3) %*% pca$rotation #RotE<-E%*% pca$rotation plot(E$vectors[,1]*RotY[1,1], cex= 2, pch=1, col="red3", xlim=c(-3,3), ylim=c(-3,3)) points(E$vectors[,1]*RotY[2,1], cex= 2, pch=2, col="blue") points(E$vectors[,1]*RotY[3,1], cex= 2, pch=3, col="purple3") points(E$vectors[,1]*RotY[4,1], cex= 2, pch=4, col="chocolate4") points(E$vectors[,1]*RotY[5,1], cex= 2, pch=5, col="darkgreen") @ \end{column} \end{columns} \end{frame} \begin{frame}[fragile] <>= plot(RotY[1,], cex= 2, pch=1, col="red3", xlim=c(-3,3), ylim=c(-3,3)) points(RotY[2,], cex= 2, pch=2, col="blue") points(RotY[3,], cex= 2, pch=3, col="purple3") points(RotY[4,], cex= 2, pch=4, col="chocolate4") points(RotY[5,], cex= 2, pch=5, col="darkgreen") @ \end{frame} \begin{frame}[fragile] <>= D1<- E$vectors[,1]*RotY[1,1] D2<- E$vectors[,1]*RotY[2,1] D3<- E$vectors[,1]*RotY[3,1] D4<- E$vectors[,1]*RotY[4,1] D5<- E$vectors[,1]*RotY[5,1] plot(D1[1], D1[2], cex= 2, pch=1, col="red3", xlim=c(-3,3), ylim=c(-3,3)) points(D2[1], D2[2], cex= 2, pch=2, col="blue") points(D3[1], D3[2], cex= 2, pch=3, col="purple3") points(D4[1], D4[2], cex= 2, pch=4, col="chocolate4") points(D5[1], D5[2], cex= 2, pch=5, col="darkgreen") @ \end{frame} \begin{frame}[fragile] Suppose we have the following feature vectors: <>= x <- c(0, 1, 2) ny1 <- cbind(t(D1),0) ny2 <- cbind(t(D2),0) ny3 <- cbind(t(D3),0) ny4 <- cbind(t(D4),0) ny5 <- cbind(t(D5),0) nY<- rbind(ny1, ny2, ny3, ny4, ny5) nYc <- cbind(nY, colorY) nYc @ We can plot these feature vectors (regardless of their length) in $\R^2$ \vskip -20pt <>= np1 <- cbind(x, t(ny1)) np2 <- cbind(x, t(ny2)) np3 <- cbind(x, t(ny3)) np4 <- cbind(x, t(ny4)) np5 <- cbind(x, t(ny5)) plot(np1, type = "l", col="red3", xlab = "", ylim = c(-1, 1)) points(np1, cex= 2, pch=1, col="red3") points(np2, type = "l", col="blue") points(np2, cex= 2, pch=2, col="blue") points(np3, type = "l", col="purple3") points(np3, cex= 2, pch=3, col="purple3") points(np4, type = "l", col="chocolate4") points(np4, cex= 2, pch=4, col="chocolate4") points(np5, type = "l", col="darkgreen") points(np5, cex= 2, pch=5, col="darkgreen") @ \end{frame} \begin{frame}[fragile] Raw Data \vskip -20pt <>= plot(p1, type = "l", col="red3", xlab = "", ylab = "") points(p1, cex= 2, pch=1, col="red3") points(p2, type = "l", col="blue") points(p2, cex= 2, pch=2, col="blue") points(p3, type = "l", col="purple3") points(p3, cex= 2, pch=3, col="purple3") points(p4, type = "l", col="chocolate4") points(p4, cex= 2, pch=4, col="chocolate4") points(p5, type = "l", col="darkgreen") points(p5, cex= 2, pch=5, col="darkgreen") @ \vskip -20pt Mean Residual \vskip -20pt <>= plot(mp1, type = "l", col="red3", ylim=c(-1,1)) points(mp1, cex= 2, pch=1, col="red3") points(mp2, type = "l", col="blue") points(mp2, cex= 2, pch=2, col="blue") points(mp3, type = "l", col="purple3") points(mp3, cex= 2, pch=3, col="purple3") points(mp4, type = "l", col="chocolate4") points(mp4, cex= 2, pch=4, col="chocolate4") points(mp5, type = "l", col="darkgreen") points(mp5, cex= 2, pch=5, col="darkgreen") points(mpmean, type = "l") @ \end{frame} \begin{frame}[fragile] Mean Residual \vskip -20pt <>= plot(mp1, type = "l", col="red3", ylim=c(-1,1)) points(mp1, cex= 2, pch=1, col="red3") points(mp2, type = "l", col="blue") points(mp2, cex= 2, pch=2, col="blue") points(mp3, type = "l", col="purple3") points(mp3, cex= 2, pch=3, col="purple3") points(mp4, type = "l", col="chocolate4") points(mp4, cex= 2, pch=4, col="chocolate4") points(mp5, type = "l", col="darkgreen") points(mp5, cex= 2, pch=5, col="darkgreen") points(mpmean, type = "l") @ \vskip -20pt PC1 \vskip -20pt <>= np1 <- cbind(x, t(ny1)) np2 <- cbind(x, t(ny2)) np3 <- cbind(x, t(ny3)) np4 <- cbind(x, t(ny4)) np5 <- cbind(x, t(ny5)) plot(np1, type = "l", col="red3", xlab = "", ylim = c(-1,1)) points(np1, cex= 2, pch=1, col="red3") points(np2, type = "l", col="blue") points(np2, cex= 2, pch=2, col="blue") points(np3, type = "l", col="purple3") points(np3, cex= 2, pch=3, col="purple3") points(np4, type = "l", col="chocolate4") points(np4, cex= 2, pch=4, col="chocolate4") points(np5, type = "l", col="darkgreen") points(np5, cex= 2, pch=5, col="darkgreen") @ \end{frame} \begin{frame}[fragile] <>= D1<- E$vectors[,2]*RotY[1,2] D2<- E$vectors[,2]*RotY[2,2] D3<- E$vectors[,2]*RotY[3,2] D4<- E$vectors[,2]*RotY[4,2] D5<- E$vectors[,2]*RotY[5,2] plot(D1[1], D1[2], cex= 2, pch=1, col="red3", xlim=c(-3,3), ylim=c(-3,3)) points(D2[1], D2[2], cex= 2, pch=2, col="blue") points(D3[1], D3[2], cex= 2, pch=3, col="purple3") points(D4[1], D4[2], cex= 2, pch=4, col="chocolate4") points(D5[1], D5[2], cex= 2, pch=5, col="darkgreen") @ \end{frame} \begin{frame}[fragile] Suppose we have the following feature vectors: <>= x <- c(0, 1, 2) ny1 <- cbind(t(D1),0) ny2 <- cbind(t(D2),0) ny3 <- cbind(t(D3),0) ny4 <- cbind(t(D4),0) ny5 <- cbind(t(D5),0) nY<- rbind(ny1, ny2, ny3, ny4, ny5) nYc <- cbind(nY, colorY) nYc @ We can plot these feature vectors (regardless of their length) in $\R^2$ \vskip -20pt <>= snp1 <- cbind(x, t(ny1)) snp2 <- cbind(x, t(ny2)) snp3 <- cbind(x, t(ny3)) snp4 <- cbind(x, t(ny4)) snp5 <- cbind(x, t(ny5)) plot(snp1, type = "l", col="red3", xlab = "", ylim = c(-1, 1)) points(snp1, cex= 2, pch=1, col="red3") points(snp2, type = "l", col="blue") points(snp2, cex= 2, pch=2, col="blue") points(snp3, type = "l", col="purple3") points(snp3, cex= 2, pch=3, col="purple3") points(snp4, type = "l", col="chocolate4") points(snp4, cex= 2, pch=4, col="chocolate4") points(snp5, type = "l", col="darkgreen") points(snp5, cex= 2, pch=5, col="darkgreen") @ \end{frame} \begin{frame}[fragile] PC1 + PC2 \vskip -20pt <>= plot(snp1 + np1, type = "l", col="red3", xlab = "", ylim = c(-1, 1)) points(snp1 + np1, cex= 2, pch=1, col="red3") points(snp2 + np2, type = "l", col="blue") points(snp2 + np2, cex= 2, pch=2, col="blue") points(snp3 + np3, type = "l", col="purple3") points(snp3 + np3, cex= 2, pch=3, col="purple3") points(snp4 + np4, type = "l", col="chocolate4") points(snp4 + np4, cex= 2, pch=4, col="chocolate4") points(snp5 + np5, type = "l", col="darkgreen") points(snp5 + np5, cex= 2, pch=5, col="darkgreen") @ \vskip -20pt Mean Residual \vskip -20pt <>= plot(mp1, type = "l", col="red3", ylim=c(-1,1)) points(mp1, cex= 2, pch=1, col="red3") points(mp2, type = "l", col="blue") points(mp2, cex= 2, pch=2, col="blue") points(mp3, type = "l", col="purple3") points(mp3, cex= 2, pch=3, col="purple3") points(mp4, type = "l", col="chocolate4") points(mp4, cex= 2, pch=4, col="chocolate4") points(mp5, type = "l", col="darkgreen") points(mp5, cex= 2, pch=5, col="darkgreen") points(mpmean, type = "l") @ \end{frame} \begin{frame}[fragile] <>= plot(Y2[1,] - mean, cex= 2, pch=1, col="red3", xlim=c(-0.6,0.6), ylim=c(-0.6,0.6), asp=1) points(Y2[2,]- mean, cex= 2, pch=2, col="blue") points(Y2[3,]- mean, cex= 2, pch=3, col="purple3") points(Y2[4,]- mean, cex= 2, pch=4, col="chocolate4") points(Y2[5,]- mean, cex= 2, pch=5, col="darkgreen") points(Y2[6,]- mean, cex= 2, pch=10) arrows(0,0,E$values[1]*E$vectors[1,1],E$values[1]*E$vectors[2,1], col="red", lwd = 3) arrows(0,0,E$values[2]*E$vectors[1,2],E$values[2]*E$vectors[2,2], col="orange", lwd = 3) @ \end{frame} \begin{frame}[fragile] PC1 \vskip -20pt <>= plot(np1, type = "l", col="red3", xlab = "", ylim = c(-1,1)) points(np1, cex= 2, pch=1, col="red3") points(np2, type = "l", col="blue") points(np2, cex= 2, pch=2, col="blue") points(np3, type = "l", col="purple3") points(np3, cex= 2, pch=3, col="purple3") points(np4, type = "l", col="chocolate4") points(np4, cex= 2, pch=4, col="chocolate4") points(np5, type = "l", col="darkgreen") points(np5, cex= 2, pch=5, col="darkgreen") @ PC2 \vskip -20pt <>= plot(snp1, type = "l", col="red3", xlab = "", ylim = c(-1, 1)) points(snp1, cex= 2, pch=1, col="red3") points(snp2, type = "l", col="blue") points(snp2, cex= 2, pch=2, col="blue") points(snp3, type = "l", col="purple3") points(snp3, cex= 2, pch=3, col="purple3") points(snp4, type = "l", col="chocolate4") points(snp4, cex= 2, pch=4, col="chocolate4") points(snp5, type = "l", col="darkgreen") points(snp5, cex= 2, pch=5, col="darkgreen") @ \end{frame} \end{document}