1

给定两个随机变量/测量值 ( x , y ),均测量有误差(变量误差情况),
MATLAB 中是否有一个例程来计算回归线y ( i )= a的估计量 ( a , b ) · 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):

这是我的估计器和你的估计器的比较:

比较

4

2 回答 2

3

MATLAB 没有完全类似的内置函数,但您可以轻松找到估计量absvd近似值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:
这是原始数据的图,以及我的估算器和您的估算器。

比较

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

编辑#2:

如果 的计算a被更正为,这是一个更新的图:

a=(syy-l*syy+sqrt((syy-l*sxx)^2+4*l*sxy^2)) / (2*sxy);  %# Forgot parentheses!

在此处输入图像描述

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

编辑#1:

您可以进一步提高 和 的准确性,sxx如下所示:syysxy

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 Gene H. Golub 和 Charles F. Van Loan(1996 年)“矩阵计算”(第 3 版)。约翰霍普金斯大学出版社。第 596 页
。2 http://en.wikipedia.org/wiki/Total_least_squares

于 2012-09-03T17:19:02.973 回答
0

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

在此处输入图像描述

于 2016-06-04T10:09:37.507 回答