Standard error of regression curve

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

Community Treasure Hunt

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

Start Hunting!