2016-06-08 70 views
1

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

我的代码(Source):

我导入包含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); 

回答

0

函数bootci可用于查找使用lsqlin时的置信区间。以下是它的使用方法:

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

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

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

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

histogram(residuals);