考虑以下 R 代码(我认为最终会调用一些 Fortran):
X <- 1:1000
Y <- rep(1,1000)
summary(lm(Y~X))
为什么摘要返回值?由于 Y 没有变化,这个模型不应该不适合吗?更重要的是,为什么模型 R^2 ~= .5?
编辑
我跟踪了从 lm 到 lm.fit 的代码,可以看到这个调用:
z <- .Fortran("dqrls", qr = x, n = n, p = p, y = y, ny = ny,
tol = as.double(tol), coefficients = mat.or.vec(p, ny), residuals = y,
effects = y, rank = integer(1L), pivot = 1L:p, qraux = double(p),
work = double(2 * p), PACKAGE = "base")
这就是实际拟合似乎发生的地方。看着 http://svn.r-project.org/R/trunk/src/appl/dqrls.f ) 没有帮助我理解发生了什么,因为我不知道 fortran。
最佳答案
从统计上讲,我们应该期待什么(我想说“期望”,但这是一个非常具体的术语 ;-))?系数应该是 (0,1),而不是“无法拟合”。假设 (X,Y) 的协方差与 X 的方差成正比,而不是相反。由于 X 具有非零方差,因此没有问题。由于协方差为 0,因此 X 的估计系数应为 0。因此,在机器容差范围内,这就是您得到的答案。
这里没有统计异常。可能存在统计上的误解。还有机器容差问题,但考虑到预测变量和响应值的规模,1E-19 数量级的系数可以忽略不计。
更新 1:可以在 this Wikipedia page 上找到简单线性回归的快速回顾.要注意的关键是Var(x)
是分母,Cov(x,y)
在分子中。在这种情况下,分子为 0,分母为非零,因此没有理由期望 NaN
或 NA
.然而,人们可能会问为什么 x
的结果系数不是0
,这与 QR 分解的数值精度问题有关。
关于r - 当预测值没有变化时,为什么 lm 会返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9245045/