我们可以从fm
得到X
和Y
,如图所示.然后用crossprod
计算XtX
和XtY
,然后用solve
计算系数.
fm <- lm(mpg ~ cyl + carb, mtcars)
X <- model.matrix(fm)
Y <- model.response(model.frame(fm))
# or
Y <- fitted(fm) + resid(fm)
XtX <- crossprod(X); XtX
## (Intercept) cyl carb
## (Intercept) 32 198 90
## cyl 198 1324 604
## carb 90 604 334
XtY <- crossprod(X,Y); XtY
## [,1]
## (Intercept) 642.9
## cyl 3693.6
## carb 1641.9
c(solve(XtX, XtY))
## [1] 37.812739 -2.625023 -0.526146
coef(fm)
## (Intercept) cyl carb
## 37.812739 -2.625023 -0.526146