Main Content


Nonlinear regression parameter confidence intervals


ci = nlparci(beta,resid,'covar',sigma)
ci = nlparci(beta,resid,'jacobian',J)
ci = nlparci(...,'alpha',alpha)


ci = nlparci(beta,resid,'covar',sigma) returns the 95% confidence intervals ci for the nonlinear least squares parameter estimates beta. Before calling nlparci, use nlinfit to fit a nonlinear regression model and get the coefficient estimates beta, residuals resid, and estimated coefficient covariance matrix sigma.

ci = nlparci(beta,resid,'jacobian',J) is an alternative syntax that also computes 95% confidence intervals. J is the Jacobian computed by nlinfit. If the 'robust' option is used with nlinfit, use the 'covar' input rather than the 'jacobian' input so that the required sigma parameter takes the robust fitting into account.

ci = nlparci(...,'alpha',alpha) returns 100(1-alpha)% confidence intervals.

nlparci treats NaNs in resid or J as missing values, and ignores the corresponding observations.

The confidence interval calculation is valid for systems where the length of resid exceeds the length of beta and J has full column rank. When J is ill-conditioned, confidence intervals may be inaccurate.


collapse all

Suppose you have data, and want to fit a model of the form


ai are the parameters you want to estimate, xi are the data points, yi are the responses, and εi are noise terms.

Write a function handle that represents the model:

mdl = @(a,x)(a(1) + a(2)*exp(-a(3)*x));

Generate synthetic data with parameters a = [1;3;2], with the x data points distributed exponentially with parameter 2, and normally distributed noise with standard deviation 0.1:

rng(9845,'twister') % for reproducibility
a = [1;3;2];
x = exprnd(2,100,1);
epsn = normrnd(0,0.1,100,1);
y = mdl(a,x) + epsn;

Fit the model to data starting from the arbitrary guess a0 = [2;2;2]:

a0 = [2;2;2];
[ahat,r,J,cov,mse] = nlinfit(x,y,mdl,a0);
ahat = 3×1


Check whether [1;3;2] is in a 95% confidence interval using the Jacobian argument in nlparci:

ci = nlparci(ahat,r,'Jacobian',J)
ci = 3×2

    0.9869    1.0438
    2.9401    3.1058
    1.9963    2.2177

You can obtain the same result using the covariance argument:

ci = nlparci(ahat,r,'covar',cov)
ci = 3×2

    0.9869    1.0438
    2.9401    3.1058
    1.9963    2.2177

Version History

Introduced before R2006a

See Also