2016-06-08 4 views
1

MATLAB에서 lsqlin 함수를 사용하여 선이 (x0, y0)을 통과하는 제약 조건하에 68 개의 샘플을 사용하여 데이터 집합에 직선을 맞 춥니 다. 이것에 대한 신뢰 구간을 어떻게 찾을 수 있습니까?MATLAB에서 선형 커브 피팅에 대한 신뢰 구간

내 코드 (Source)

은 또한 제약 X0 및 Y0의 값을 포함하는 매트 파일로부터 x 및 y 벡터를 포함하는 데이터 세트를 가져.

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);