0

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

这是关于在 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 没有吐出错误——或者,至少,对于我要求它分析的完全愚蠢的数据,这是一个非常严厉的警告?
4

3 回答 3

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] 的伪逆。

希望有帮助!

于 2013-08-09T22:38:47.370 回答
1

您的系统根本不是满级。根据文档 ols解决了这样一个系统

b = pinv(x)*y

或者,在你的情况下,只是

b = pinv([1 1])

ans = 

    0.5000
    0.5000

Moore-Penrose 伪逆pinv在哪里。

于 2013-08-09T22:40:21.783 回答
0

普通最小二乘回归表示为:

Ax = y

通常使用伪逆直接求解:

x = inv(A'*A)*A'*y

或者

x = pinv(A) * y

在满秩矩阵的情况下,我们可以执行Cholesky分解:这可以用作:R = 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

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

于 2013-08-09T23:26:30.810 回答