MATLAB 约束下线性曲线拟合的置信区间

Confidence intervals for linear curve fit under constraints in MATLAB

我在 MATLAB 中使用函数 lsqlin 对包含 68 个样本的数据集拟合了一条直线,条件是直线穿过 (x0,y0)。我怎样才能找到这个的置信区间?

我的代码(Source):

我从 mat 文件导入包含 x 和 y 向量的数据集,该文件还包含约束 x0 和 y0 的值。

n = 1; % Degree of polynomial to fit
V(:,n+1) = ones(length(x),1,class(x)); %V=Vandermonde matrix for 'x'
for j = n:-1:1
     V(:,j) = x.*V(:,j+1);
end
d = y; % 'd' is the vector of target values, 'y'.
% There are no inequality constraints in this case, i.e., 
A = [];b = [];
% We use linear equality constraints to force the curve to hit the required point. In
% this case, 'Aeq' is the Vandermoonde matrix for 'x0'
Aeq = x0.^(n:-1:0);
% and 'beq' is the value the curve should take at that point
beq = y0;
%% 
[p, resnorm, residual, exitflag, output, lambda] = lsqlin(V, d, A, b, Aeq, beq);
%%
% We can then use POLYVAL to evaluate the fitted curve
yhat = polyval( p, x );

函数 bootci 可用于在使用 lsqlin 时查找置信区间。使用方法如下:

ci=bootci(68,{@(x,y)func(x,y),x,y},'type','student');

第一个参数是数据点的数量,或者向量x的长度。

第二个参数中的函数基本上应该计算您需要找到置信区间的任何统计数据。在这种情况下,该统计量是我们拟合线的系数。因此,这里的函数 func(x,y) 应该 return 由 lsqnonlin 编辑的回归系数 return。此函数的输入是数据集向量 x 和 y。

第三个和第四个参数允许您指定数据集的分布。您可以通过绘制残差直方图来了解这一点:

histogram(residuals);