给定两个随机变量/测量值( 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):
以下是我与您的估算师的比较:
答案 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:
这是原始数据的图表,以及我的估算器和你的。
您的估算工具非常不准确,这让我相信您的实施存在缺陷。
编辑#2:
如果a
的计算更正为:
a=(syy-l*syy+sqrt((syy-l*sxx)^2+4*l*sxy^2)) / (2*sxy); %# Forgot parentheses!
更接近,但仍然不如我的准确。
编辑#1:
您可以进一步提高sxx
,syy
和sxy
的准确度,如下所示:
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正交距离回归。黑线给出了最低的绝对值残差和。
以下是情节比较: