以矩阵形式警告多因素线性回归

问题描述 投票:0回答:2

我的在执行MATLAB矩阵形式的多因素线性回归和我所遇到以下警告:

警告:矩阵接近奇异或严重缩放。结果可能是不准确的。 RCOND =不便。

我怀疑这是因为,我执行线性回归,我下面的标准方法,其中系数的矢量是((X'X)^(-1))*(X'Y)的方式。我的矩阵X如下格式:第一栏就是所有1从而使拦截,可以发现,在我使用x坐标的权力(所以多项式基础模型)等栏目,所以x然后x^2x^3等。 (列矢量)。我认为错误的出现是由于这样的事实,具有较高的碱值是非常小的,而且不知何故,把他们变成NaN,从而警告。

我想用另一个变量的类型,但双是一样大,因为它得到?有没有办法再逼MATLAB不分配这些极小值NaN?如果那是当然的了什么呢MATLAB。

matlab matrix linear-regression
2个回答
1
投票

一些意见。 (请在年底的定义,如果被标记混淆。)

What's going wrong?

  1. 一个落后的线性回归的假设是,E [X_I * X_I']满秩。当你接近总体均值E [X_I * X_I“]与样本均值X'*X / n,你想X” * X是满秩!该错误是告诉你,高达机器精度,这个假设是违反! 我猜你的一列始终接近于0,或当你提高到高功率,两列数字变成类似(如0或在同一行很大。)试想一下,线性方程: y = b1 * x1 + b2 * x2 + e 如果X2始终为零,你永远不会正确地评估B2,它可能是10,也可能是10 ^ 10。基本上是相同的成立当X 2是极为接近零的所有时间或列的一些线性组合在数字上靠近另一列:然后在数据微小的微小变化会导致在估算大幅波动。在数学方面,发生的事情是,E [X_I * X_I']比满秩有效较少。 一些尝试,检查cond(X'*X)通过3加X事权1,检查cond(X'*X)筹集x到权力1,虽然4,1到5,等等。在某些时候,你的条件数会通过屋顶作为X'*X成为数字差点被秩亏。
  2. 你得到这个错误之前,这样,你的估计是已经TOTAL废话。这个错误(“矩阵严重缩放等等..”)是告诉你,当你X'X具有如此高的条件数,即e的机器精度^ -16这种病态的矩阵相结合,将让你的估计不可靠。但是,在你的数据误差几乎肯定不同于E ^ -16估计目的WAY更强壮,你的数据有效的多线的方式Way Of较早。

What should you be doing?

  1. 你不能估计x的这种高功率系数。您的数据不够好做。你需要拨打这样的方式回到直到X'*X的条件数是合理的。 也许你只能估计多达2阶多项式系数!不要贪婪,并试图估计什么是不可能的。
  2. 计算与b = X \ y你的估计。 对于任何线性方程,求解,其中x = INV斧= C(A)×c是不是最佳的。形成逆是不必要的。您可以直接求解线性系统A\c。在这个问题中,你可以解决你的系数与b b = (X'*X) \ (X' * y);而由于途中\运营商的作品(它解决了最小二乘法意义上的超定),最简单的代码是: b = X \ y; % USE THIS! (you can treat as a magical incantation to solve b = inv(X'*X) * X'y 最后这一点是不是你的问题的根源,但你无论如何都应该修复它。

定义:

  1. 对于每个观测I,X_I是第k由1个向量。
  2. n是观测值的数量。
  3. 数据矩阵X是由[X_1' 组成K矩阵正; X_2' ; X_3' ; ...; x_n'];
  4. y是由1个矢量正。
  5. 我们试图通过1个矢量b中线性方程y_i = x_i' * b + e_i估计ķ。

0
投票

MATLAB不引入NaN的,只是因为数量也少(甚至是非常小的)。如果您输入x向量没有NaN的它然后MATLAB是不是把它们放入X ^ 2或x ^ 3或x ^ N。

但是,如果你的X矩阵的一列或多列接近于零,那么你有一个病态矩阵,是不是真的适合这个回归。你需要重新考虑你试图使用模型(即多项式的程度)。

顺便说一句,对于这个特定的问题,除非你需要编写自己的功能,那么你可以只使用polyfit,或在统计工具箱中的许多回归功能之一。

如果你需要编写自己的函数,那么请确保您使用的是反斜杠运算符不inv功能,即使用(X'*X)\(X'*Y)inv(X'*X)*(X'*Y)

© www.soinside.com 2019 - 2024. All rights reserved.