R - 如何从lm.fit中提取斜率和截距?

时间:2018-03-12 13:13:06

标签: r linear-regression

我需要一种比lm()方法更快的线性回归方法。我发现lm.fit()的速度要快得多,但我想知道如何使用结果。例如,使用此代码:

x = 1:5
y = 5:1

regr = lm.fit(as.matrix(x), y)
str(regr)

输出:

List of 8
 $ coefficients : Named num 0.636
  ..- attr(*, "names")= chr "x1"
 $ residuals    : num [1:5] 4.364 2.727 1.091 -0.545 -2.182
 $ effects      : Named num [1:5] -4.719 1.69 -0.465 -2.619 -4.774
  ..- attr(*, "names")= chr [1:5] "x1" "" "" "" ...
 $ rank         : int 1
 $ fitted.values: num [1:5] 0.636 1.273 1.909 2.545 3.182
 $ assign       : NULL
 $ qr           :List of 5
  ..$ qr   : num [1:5, 1] -7.416 0.27 0.405 0.539 0.674
  ..$ qraux: num 1.13
  ..$ pivot: int 1
  ..$ tol  : num 1e-07
  ..$ rank : int 1
  ..- attr(*, "class")= chr "qr"
 $ df.residual  : int 4

我期望截距= 6且斜率= -1,但上面的结果并不包含任何附近的任何影响。另外,lm.fit()输出r平方吗?

1 个答案:

答案 0 :(得分:4)

lm.fit允许更多地手动执行操作,因此,正如@MrFlick评论的那样,我们必须手动包含拦截,并使用cbind(1, x)作为设计矩阵。没有提供R ^ 2,但我们可以轻松地计算它:

x <- 1:5
y <- 5:1 + rnorm(5)
regr <- lm.fit(cbind(1, x), y)
regr$coef
#                     x 
#  5.2044349 -0.5535963 
1 - var(regr$residuals) / var(y) # R^2
# [1] 0.3557227
1 - var(regr$residuals) / var(y) * (length(y) - 1) / regr$df.residual # Adj. R^2
# [1] 0.1409636