Standard error of regression curve

31 views (last 30 days)
Hello,
I have two vectors, named as x and y. I would like to estimate the standard error of a regressed curve of these data points. The regression model is defined as ft in the below code. Can you please let me know if there is a way to estimate the standard error of b and m coefficients of this fit type?
x=[2;4;6;9;12;15;18]
y=[188;198;294;433;661;875;1097]
ft = fittype( 'b*x^m');
opts = fitoptions( 'Method', 'NonlinearLeastSquares' );
fitresult= fit( x, y, ft, opts );

Accepted Answer

Adam Danz
Adam Danz on 13 Sep 2020
Edited: Adam Danz on 13 Sep 2020
Follow this answer provided by MathWorks support [here]. Since the degrees of freedom are not defined in that answer, here's a more complete answer:
% Your data and their fit
x=[2;4;6;9;12;15;18]
y=[188;198;294;433;661;875;1097]
ft = fittype( 'b*x^m');
opts = fitoptions( 'Method', 'NonlinearLeastSquares' );
[fitresult, gof] = fit( x, y, ft, opts ); % <-- also include 2nd output!
% Compute standard error of the coefficients.
alpha = 0.95; % Choose an alpha level
ci = confint(fitresult, alpha)
df = gof.dfe;
t = tinv((1+alpha)/2, df);
se = (ci(2,:)-ci(1,:)) ./ (2*t) % Standard Error
% Results in same order as coefficients listed in fitresult.
% se =
% 10.0399163997427 0.0994320537151288
  3 Comments
Adam Danz
Adam Danz on 13 Sep 2020
@Hakan Süleyman you have a good point and now I'm second guessing that approach for nonlinear models.
Unforunately I have to shut down for the day but this discussion linked below might be what you're looking for, particularly Richard Willey's answer.
I'd be interested if you find a more suitable approach and I may look into it later, myself.
Hakan Süleyman
Hakan Süleyman on 13 Sep 2020
The solution provided by MathWorks support (that you shared in your first comment) returns a very logical result. When I also tried the function given in Richard Willey's answer (in the link you provided in your latter comment), it gives exactly the same SE estimates:
x=[2;4;6;9;12;15;18]
y=[188;198;294;433;661;875;1097]
ft = fittype('b*x^m');
opts = fitoptions( 'Method', 'NonlinearLeastSquares' );
[fitresult, gof] = fit( x, y, ft, opts );
coeff=coeffvalues(fitresult);
myFit = NonLinearModel.fit(x,y, 'y ~ b0*x1^b1', [coeff(1), coeff(2)])
myFit.Coefficients.SE
% ans =
%
% 10.0400
% 0.0994
It seems both ways work for custom fit types. I will only need to be sure for the mathematical part. Thanks a lot!

Sign in to comment.

More Answers (0)

Categories

Find more on Linear and Nonlinear Regression in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!