Section 29 MLR: Matrix Implementation in R

Multiple Linear Regression: Matrix Implementation

Note: You may skip this section if you are not familiar with matrix operations.


29.1 lm implementation

fm <- lm(SBP ~ BMI + Age, data=BP)
anova(fm)
summary(fm)


29.2 Matrix implementation

X <- model.matrix(~ BMI + Age, data=BP)
y <- BP$SBP
n <- length(y)

Xt.X <- t(X) %*% X
Xt.y <- t(X) %*% y
yt.y <- t(y) %*% y

# Using matrix functions
b <- solve(Xt.X) %*% Xt.y

# Mathematically efficient approach
# b <- solve(crossprod(X,X),crossprod(X,y))

# Hat matrix
H <- X %*% solve(Xt.X) %*% t(X)

# Identity matrix
I <- diag(n)

RSS <- t(y) %*% (I-H) %*% y

df.reg <- length(b) - 1
df.res <- n - df.reg - 1

MSE <- RSS/df.res
sigma2 <- MSE

SE.b <- sqrt(diag(solve(Xt.X)) * sigma2)

t.stat <- b / SE.b

prob <- 2 * pt(q = t.stat, df = df.res, lower.tail = FALSE)

pred <- X %*% b


DF <- data.frame(Estimate = b,
                 SE = SE.b,
                 t.stat = t.stat,
                 Prob = prob)

row.names(DF) <- c('Intercept', 'BMI', 'Age')

DF

anova(fm)