多元线性回归应在数学上不确定(八度)

时间:2013-08-09 22:27:44

标签: matlab octave regression linear-regression least-squares

我提前为我的问题的相当抽象的性质道歉,但它间接是一个关于编程算法的问题,我不认为我会成为唯一一个对此感到疑惑的程序员。

这是关于Octave中多变量普通最小二乘(OLS)回归算法的实现(并且,我假设,也在MatLab中)。据我所知,如果只用一次测量将两个变量输入到线性回归中,结果(即系数)应该在数学上不确定:除非你接受黑魔法作为一个有效的前提,怎么可能告诉我每个变量对最终结果的影响方式是什么?在更一般的情况下,测量的数量必须(我认为)至少等于结果系数的变量数量才有意义(更不用说统计错误和所有这些)。

然而,Octave非常乐意计算结果,没有任何警告:

octave:1> ols([1], [1, 1])
ans =

   0.50000
   0.50000

换句话说 - 如果我做对了 - 给定等式1 = x + y,Octave快乐地断定x = y = 0.5。

因此,假设(像我一样)Octave与撒旦没有直接联系,这是我的问题:

  1. 我误解了数学基础吗?换句话说,这可能是合法的结果吗?
  2. 如果我是对的,为什么Octave没有吐出错误 - 或者至少是对我要求分析的完全愚蠢的数据发出严厉的警告?

3 个答案:

答案 0 :(得分:1)

看看这个Octave文档:

http://www.gnu.org/software/octave/doc/interpreter/Linear-Least-Squares.html

在输出beta的描述中,它表示当矩阵不是满秩时,该值将是x乘y的伪逆(正如矩阵[1,1]的情况一样。[0.5; 0.5]是[1,1]的伪逆。

希望有所帮助!

答案 1 :(得分:1)

您的系统根本不是满级。根据{{​​3}} ols解决了

这样的系统
b = pinv(x)*y

或者,在您的情况下,只需

b = pinv([1 1])

ans = 

    0.5000
    0.5000

其中the documentationpinv

答案 2 :(得分:0)

Ordinary least square回归表示为:

Ax = y

通常使用pseudo-inverse

直接解决
x = inv(A'*A)*A'*y

x = pinv(A) * y

在满秩矩阵的情况下,我们可以执行Cholesky decompositionR = chol(A'*A)以便(A'*A) = R'R。这可以用作:

Ax = y
A'Ax = A'y
R'Rx = A'y
Rx = R'\(A'y)
x = R\(R'\(A'y))

请注意,在最后一步中,反斜杠运算符(mldivide)使用三角矩阵R执行简单的前后向替换

事实上,Octave是如何实现它的:http://hg.octave.org/octave/file/tip/scripts/statistics/base/ols.m#l110

还有其他方法可以解决系统,例如迭代方法。