Standard error of regression curve

46 ビュー (過去 30 日間)
Hakan Süleyman
Hakan Süleyman 2020 年 9 月 13 日
コメント済み: Hakan Süleyman 2020 年 9 月 13 日
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 );

採用された回答

Adam Danz
Adam Danz 2020 年 9 月 13 日
編集済み: Adam Danz 2020 年 9 月 13 日
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 件のコメント
Adam Danz
Adam Danz 2020 年 9 月 13 日
@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 2020 年 9 月 13 日
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!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLinear and Nonlinear Regression についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by