Effacer les filtres
Effacer les filtres

Standard error of regression curve

16 vues (au cours des 30 derniers jours)
Hakan Süleyman
Hakan Süleyman le 13 Sep 2020
Commenté : Hakan Süleyman le 13 Sep 2020
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 );

Réponse acceptée

Adam Danz
Adam Danz le 13 Sep 2020
Modifié(e) : Adam Danz le 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 commentaires
Adam Danz
Adam Danz le 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 le 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!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Linear and Nonlinear Regression dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by