Hi, I was playing around with something else and I noticed this matrix code for residuals in a linear model doesn't say what lm() says. Please tell me if I am completely misguided here. data(mtcars) Y <- as.matrix(mtcars[,1]) X <- as.matrix(mtcars[,c(2:11)]) # shouldnt this: H <- X %*% solve(t(X) %*% X) %*% t(X) (diag(dim(H)[1]) - H) %*% Y # be equal to this: residuals(lm(Y~X)) # ??? # thanks -- View this message in context: http://r.789695.n4.nabble.com/residuals-from-lm-tp4635155.html Sent from the R help mailing list archive at Nabble.com.
FYI: As you are likely thinking: this doesn't belong here (It just occurred to me), I am questioning what I did, not the output of lm() But if someone knows why I am wrong please let me know. chuck.01 wrote> > Hi, > I was playing around with something else and I noticed this matrix code > for residuals in a linear model doesn't say what lm() says. Please tell > me if I am completely misguided here. > > data(mtcars) > Y <- as.matrix(mtcars[,1]) > X <- as.matrix(mtcars[,c(2:11)]) > > # shouldnt this: > H <- X %*% solve(t(X) %*% X) %*% t(X) > (diag(dim(H)[1]) - H) %*% Y > > # be equal to this: > residuals(lm(Y~X)) > > # ??? > # thanks >-- View this message in context: http://r.789695.n4.nabble.com/residuals-from-lm-tp4635155p4635161.html Sent from the R help mailing list archive at Nabble.com.
nevermind... I forgot the column of 1's for the intercept term chuck.01 wrote> > Hi, > I was playing around with something else and I noticed this matrix code > for residuals in a linear model doesn't say what lm() says. Please tell > me if I am completely misguided here. > > data(mtcars) > Y <- as.matrix(mtcars[,1]) > X <- as.matrix(mtcars[,c(2:11)]) > > # shouldnt this: > H <- X %*% solve(t(X) %*% X) %*% t(X) > (diag(dim(H)[1]) - H) %*% Y > > # be equal to this: > residuals(lm(Y~X)) > > # ??? > # thanks >-- View this message in context: http://r.789695.n4.nabble.com/residuals-from-lm-tp4635155p4635183.html Sent from the R help mailing list archive at Nabble.com.
On 03/07/12 03:58, chuck.01 wrote:> Hi, > I was playing around with something else and I noticed this matrix code for > residuals in a linear model doesn't say what lm() says. Please tell me if I > am completely misguided here. > > data(mtcars) > Y <- as.matrix(mtcars[,1]) > X <- as.matrix(mtcars[,c(2:11)]) > > # shouldnt this: > H <- X %*% solve(t(X) %*% X) %*% t(X) > (diag(dim(H)[1]) - H) %*% Y > > # be equal to this: > residuals(lm(Y~X)) > > # ??? > # thanksYou are forgetting about the constant term. Try X <- cbind(1,X) H <- X %*% solve(t(X) %*% X) %*% t(X) R1 <-(diag(dim(H)[1]) - H) %*% Y R2 <-residuals(lm(Y~X)) range(R1-R2) I get: [1] -3.886808e-12 1.262768e-11 OMMMMMMMMMMMMMMMM!!! :-) cheers, Rolf Turner