# Proj: Projection of Vector y on columns of X In matlib: Matrix Functions for Teaching and Learning Linear Algebra and Multivariate Statistics

## Description

Fitting a linear model, `lm(y ~ X)`, by least squares can be thought of geometrically as the orthogonal projection of `y` on the column space of `X`. This function is designed to allow exploration of projections and orthogonality.

## Usage

 `1` ```Proj(y, X, list = FALSE) ```

## Arguments

 `y` a vector, treated as a one-column matrix `X` a vector or matrix. Number of rows of `y` and `X` must match `list` logical; if FALSE, return just the projected vector; otherwise returns a list

## Details

The projection is defined as P y where P = X (X'X)^- X' and X^- is a generalized inverse.

## Value

the projection of `y` on `X` (if `list=FALSE`) or a list with elements `y` and `P`

## Author(s)

Michael Friendly

Other vector diagrams: `arc`, `arrows3d`, `corner`, `plot.regvec3d`, `pointOnLine`, `regvec3d`, `vectors3d`, `vectors`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17``` ```X <- matrix( c(1, 1, 1, 1, 1, -1, 1, -1), 4,2, byrow=TRUE) y <- 1:4 Proj(y, X[,1]) # project y on unit vector Proj(y, X[,2]) Proj(y, X) # orthogonal complements yp <-Proj(y, X, list=TRUE) yp\$y P <- yp\$P IP <- diag(4) - P yc <- c(IP %*% y) crossprod(yp\$y, yc) # P is idempotent: P P = P P %*% P all.equal(P, P %*% P) ```