当预测值没有变化时,为什么lm会返回值?

时间:2012-02-11 23:38:40

标签: r statistics linear-regression lm

考虑以下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。

3 个答案:

答案 0 :(得分:5)

从统计学上讲,我们应该期待什么(我想说“期待”,但这是一个非常具体的术语;-))?系数应为(0,1),而不是“不适合”。假设(X,Y)的协方差与X的方差成比例,而不是相反。由于X具有非零方差,因此没有问题。由于协方差为0,X的估计系数应为0.因此,在机器容差范围内,这就是您得到的答案。

这里没有统计异常。可能存在统计上的误解。还存在机器容差问题,但考虑到预测器和响应值的大小,1E-19数量级的系数可以忽略不计。

更新1:可以在this Wikipedia page上找到简单线性回归的快速回顾。需要注意的关键是Var(x)在分母中,Cov(x,y)在分子中。在这种情况下,分子为0,分母不为零,因此没有理由期望NaNNA。但是,有人可能会问为什么不是x a 0的结果系数,这与QR分解的数值精度问题有关。

答案 1 :(得分:2)

我认为这只是因为QR分解是通过浮点运算实现的。

singular.ok参数实际上是指设计矩阵(即仅X)。尝试

lm.fit(cbind(X, X), Y)

VS。

lm.fit(cbind(X, X), Y, singular.ok=F)

答案 2 :(得分:2)

我同意问题可能是浮点问题。但我不认为是奇点。

如果您使用solve(t(x1)%*%x1)%*%(t(x1)%*%Y)而非QR检查,则(t(x1)%*%x1)不是单数

使用x1 = cbind(rep(1,1000,X)因为lm(Y~X)包含截距。