MATLAB中的正交距离回归

时间:2012-09-03 15:12:53

标签: matlab least-squares

给定两个随机变量/测量值( x y ),两者都有误差测量(变量误差情况),是否有例程在MATLAB中计算回归线 y i )= a , b ) > a · x i )+ b 使用正交距离回归方法?

这是我对最大似然估计的实现:

x= [1.0, 0.6, 1.2, 1.4, 0.2];
y=[0.5, 0.3, 0.7, 1.0, 0.2];

mx = mean(x);
my = mean(y);
p = (x(:) - mx) .^ 2;
q = (y(:) - mx) .^ 2;
w = p .* q;
sxx = sum(p);
syy = sum(q);
sxy = sum(w);    w=p.*q;   sxy=sum(w);

l = 1;  %# orthogonal distance regression
a = (syy - l * syy + sqrt((syy - l * sxx) ^ 2 + 4 * l * sxy^2)) / (2 * sxy);
b = my - a * mx;

编辑(致EitanT):

以下是我与您的估算师的比较:

comparison

2 个答案:

答案 0 :(得分:3)

MATLAB没有像这样的内置函数 ,但您可以使用{轻松找到估算器 a b {3}}近似 1,2

data = [x(:), y(:)];
[U, S, V] = svd(data - repmat(mean(data), size(data, 1), 1), 0);
a = -V(1, end) / V(2, end);
b = mean(data * V(:, end)) / V(2, end);

实际上是正交距离回归方法。

编辑#1:
这是原始数据的图表,以及我的估算器和你的。

comparison

您的估算工具非常不准确,这让我相信您的实施存在缺陷。

编辑#2:

如果a的计算更正为:

,这是一个更新的图
a=(syy-l*syy+sqrt((syy-l*sxx)^2+4*l*sxy^2)) / (2*sxy);  %# Forgot parentheses!

enter image description here

更接近,但仍然不如我的准确。

编辑#1:

您可以进一步提高sxxsyysxy的准确度,如下所示:

cov_mat = cov(x, y);
sxx = cov_mat(1, 1);  %# Same as: sxx = var(x);
syy = cov_mat(2, 2);  %# Same as: syy = var(y);
sxy = cov_mat(1, 2);  %# Same as: sxy = cov_mat(2, 1);

1 svd
2 Gene H. Golub and Charles F. Van Loan (1996) "Matrix Computations" (3rd ed.). The Johns Hopkins University Press. pp 596.

答案 1 :(得分:0)

我运行上述算法:(1)最大似然估计(2)正交距离回归方法(3)MINITAB的正交回归全部用于相同的五(x,y)数据点。我添加了每个回归的残差的绝对值,得到以下结果:     红绿黑   0.7748 0.5137 0.4485
其中红线是方法(1),绿色是MINITAB方法,(3)黑线是svd正交距离回归。黑线给出了最低的绝对值残差和。 以下是情节比较:

enter image description here