我需要拟合数据,例如在Matlab中,x,y,CI(其中CI是y的置信指数)。
现在,我使用此代码:
pf = polyfit(x, y, 2);
x1 = min(x):.1:max(x);
y1 = polyval(pf, x1);
figure
hold on
errorbar(x, y, CI, 'ko');
plot(x1, y1, 'k');
hold off
当然,合适来自一些错误条,这是正确的。
我希望获得一个更接近具有低置信度指数的点的拟合曲线,并以高置信度指数丢弃这些点。
谢谢你,再见,
贾科莫
答案 0 :(得分:1)
您正在寻找的是加权最小二乘。您可以使用函数lscov
计算它们。在其帮助页面中有一个很好的例子,但我会尝试使其更清晰。
让我们构造一个带有损坏点的简单抛物线
x = (0:0.1:1)';
y = 0.5*x.^2;
y(5) = 3*y(5);
并给予一些权重
w = ones(size(y));
w(5) = 0.1;
接下来构建Vandermonde矩阵(see here for the code)并解决系统
%// V = [x.^2 x ones(size(x))];
V = bsxfun(@power, x, 2:-1:0);
coeff = lscov(V, y, w);
有和没有权重的估计系数是
x^2 x 1
with weights [0.4797 0.0186 -0.0004]
no weights [0.3322 0.1533 -0.0034]
请注意,在您的情况下,w
必须反转。
如果您不想构建Vandermonde矩阵,并且您拥有曲线拟合工具箱的许可证,则可以使用以下代码
ft = fittype('poly2');
opts = fitoptions('Method', 'LinearLeastSquares');
opts.Weights = w;
fitresult = fit(x, y, ft, opts);
并且您将获得相同的结果。