# nlparci

Nonlinear regression parameter confidence intervals

## Syntax

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

## Description

`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 `NaN`s 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.

## Examples

collapse all

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

${\mathit{y}}_{\mathit{i}}={\mathit{a}}_{1}+{\mathit{a}}_{2}\mathrm{exp}\left(-{\mathit{a}}_{3}{\mathit{x}}_{\mathit{i}}\right)+{ϵ}_{\mathit{i}}$.

${a}_{i}$ are the parameters you want to estimate, ${x}_{i}$ are the data points, ${y}_{i}$ are the responses, and ${\epsilon }_{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```
```ahat = 3×1 1.0153 3.0229 2.1070 ```

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