为什么计算的残差在 R 函数 `lm()` 和 `lm.fit()` 之间不同

Why do calculated residuals differ between R functions `lm()` and `lm.fit()`

我正在尝试从 lm() 切换到更快的 lm.fit() 以便更快地计算大型矩阵的 r² 值。 (我认为当 x 是矩阵时我不能使用 cor(),根据 。)

为什么lm()lm.fit()计算不同的拟合值和残差?

set.seed(0)
x <- matrix(runif(50), 10)
y <- 1:10
lm(y ~ x)$residuals
lm.fit(x, y)$residuals

我无法深入 lm() 源代码来找出导致差异的原因...

来自?lm.fit x“应该是n * p维的设计矩阵”,其中p是系数的个数。因此,您必须为截距传递一个向量才能获得相同的模型。

这样估计

lm.fit(cbind(1,x), y)

将给出与

相同的参数
lm(y ~ x)