【问题标题】:Why does lm return values when there is no variance in the predicted value?当预测值没有方差时,为什么 lm 会返回值?
【发布时间】:2012-03-03 22:35:37
【问题描述】:

考虑以下 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.5的R^2是个很有趣的问题。
  • 我想我会把它作为一个单独的问题分拆出来......

标签: r statistics linear-regression lm


【解决方案1】:

从统计上讲,我们应该预期什么(我想说“预期”,但这是一个非常具体的术语 ;-))?系数应为 (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 分解的数值精度问题有关。

【讨论】:

  • 我明白你的意思。对于较小的 N 问题,机器公差更接近 1E-17,但仍然“可以忽略不计”。我想我希望该函数会像 N = 4 时那样简单地失败(但同样,(对我而言)奇怪的是 N = 3 时不会失败)。
【解决方案2】:

我相信这仅仅是因为 QR 分解是用浮点算法实现的。

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

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

对比

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-28
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-22
      相关资源
      最近更新 更多