>  Docs Center  >  Libraries  >  Markwardt  >  MPPROPERR
Libraries

MPPROPERR

MPPROPERR

Name


  MPPROPERR

Author


  Craig B. Markwardt, NASA/GSFC Code 662, Greenbelt, MD 20770
  craigm@lheamail.gsfc.nasa.gov
  UPDATED VERSIONs can be found on my WEB PAGE:
      http://cow.physics.wisc.edu/~craigm/idl/idl.html

Purpose


  Propagate fitted model uncertainties to measured data points

Major Topics


  Curve and Surface Fitting

Calling Sequence


  YCOVAR = MPPROPERR(BEST_FJAC, PCOVAR, PFREE_INDEX, [/DIAGONAL])

Description



  MPPROPERR propagates the parameter uncertainties of a fitted
  model to provide estimates of the model uncertainty at each
  measurement point.
  When fitting a model to data with uncertainties, the parameters
  will have estimated uncertainties. In fact, the parameter
  variance-covariance matrix indicates the estimated uncertainties
  and correlations between parameters. These uncertainties and
  correlations can, in turn, be used to estimate the "error in the
  model" for each measurement point. In a sense, this quantity also
  reflects the sensitivity of the model to each data point.
  The algorithm used by MPPROPERR uses standard propagation of error
  techniques, assuming that errors are small. The input values of
  MPPROPERR should be found from the output keywords of MPFIT or
  MPFITFUN, as documented below.
  The user has a choice whether to compute the *full*
  variance-covariance matrix or not, depending on the setting of the
  DIAGONAL keyword. The full matrix is large, and indicates the
  correlation the sampled model function between each measurement
  point and every other point. The variance terms lie on the
  diagonal, and the covariance terms are on the off-diagonal.
 
  Usually however, the user will want to set /DIAGONAL, which only
  returns the "diagonal" or variance terms, which represent the
  model "uncertainty" at each measurement point. The /DIAGONAL
  setting only controls the amount of data returned to the user.
  the full *parameter* covariance matrix is always used to compute
  the output regardless of the setting for /DIAGONAL.
  When using MPPROPERR, keep in mind the following dimensions of
  the problem:
    NPOINTS - number of measurement points
    NPAR - total number of fit parameters
    NFREE - number of *free* fit parameters
  The inputs to this function are:
    BEST_FJAC - the partial derivative matrix, or Jacobian matrix,
                as estimated by MPFIT or MPFITFUN (see below),
                which has dimensions of ARRAY(NPOINTS,NFREE).
    PCOVAR - the parameter covariance matrix, as estimated by MPFIT
              or MPFITFUN (see below), which has dimensions of
              ARRAY(NPAR,NPAR).
    PFREE_INDEX - an index array which describes which of the
                  parameter set were variable, as returned by MPFIT
                  or MPFITFUN. Of the total parameter set PARMS,
                  only PARMS[PFREE_INDEX] were varied by MPFIT.
  There are special considerations about the values returned by
  MPPROPERR. First, if a parameter is touching a boundary
  limit when the fit is complete, then it will be marked as having
  variance and covariance of zero. To avoid this situation, one can
  re-run MPFIT or MPFITFUN with MAXITER=0 and boundary limits
  disabled. This will permit MPFIT to estimate variance and
  covariance for all parameters, without allowing them to actually
  vary during the fit.
  Also, it is important to have a quality parameter covariance
  matrix PCOVAR. If the matrix is singular or nearly singular, then
  the measurement variances and covariances will not be meaningful.
  It helps to parameterize the problem to minimize parameter
  covariances. Also, consider fitting with double precision
  quantities instead of single precision to minimize the chances of
  round-off error creating a singular covariance matrix.
  IMPORTANT NOTE: the quantities returned by this function are the
  *VARIANCE* and covariance. If the user wishes to compute
  estimated standard deviation, then one should compute
  SQRT(VARIANCE). (see example below)

Inputs



  BEST_FJAC - the Jacobian matrix, as estimated by MPFIT/MPFITFUN
              (returned in keyword BEST_FJAC). This should be an
              array ARRAY(NPOINTS,NFREE) where NFREE is the number
              of free parameters.
  PCOVAR - the full parameter covariance matrix, as returned in the
            COVAR keyword of MPFIT/MPFITFUN. This should be an array
            ARRAY(NPAR,NPAR) where NPAR is the *total* number of
            parameters.

Returns



  The estimated uncertainty at each measurement point, due to
  propagation of errors. The dimensions depend on the value of the
  DIAGONAL keyword.
    DIAGONAL=1: returned value is ARRAY(NPOINTS)
                corresponding to the *VARIANCE* of the model
                function sampled at each measurment point
                **NOTE**: the propagated standard deviation would
                then be SQRT(RESULT).
    DIAGONAL=0: returned value is ARRAY(NPOINTS,NPOINTS)
                corresponding to the variance-covariance matrix of
                the model function, sampled at the measurement
                points.

Keyword Parameters



  DIAGONAL - if set, then compute only the "diagonal" (variance)
              terms. If not set, then propagate the full covariance
              matrix for each measurement point.
  NAN - if set, then ignore NAN values in BEST_FJAC or PCOVAR
        matrices (they would be set to zero).
  PFREE_INDEX - index list of free parameters, as returned in the
                PFREE_INDEX keyword of MPFIT/MPFITFUN. This should
                be an integer array ARRAY(NFREE), such that
                parameters PARMS[PFREE_INDEX] were freely varied during
                the fit, and the remaining parameters were not.
                Thus it should also be the case that PFREE_INDEX
                indicates the rows and columns of the parameter
                covariance matrix which were allowed to vary freely.
                Default: All parameters will be considered free.
 

Example



  ; First, generate some synthetic data
  npts = 200
  x = dindgen(npts) * 0.1 - 10. ; Independent variable
  yi = gauss1(x, [2.2D, 1.4, 3000.]) ; "Ideal" Y variable
  y = yi + randomn(seed, npts) * sqrt(1000. + yi); Measured, w/ noise
  sy = sqrt(1000.D + y) ; Poisson errors
  ; Now fit a Gaussian to see how well we can recover
  p0 = [1.D, 1., 1000.] ; Initial guess (cent, width, area)
  p = mpfitfun('GAUSS1', x, y, sy, p0, $ ; Fit a function
                best_fjac=best_fjac, pfree_index=pfree_index, /calc_fjac, $
                covar=pcovar)
  ; Above statement calculates best Jacobian and parameter
  ; covariance matrix
  ; Propagate errors from parameter covariance matrix to estimated
  ; measurement uncertainty. The /DIAG call returns only the
  ; "diagonal" (variance) term for each measurement.
  ycovar = mpproperr(best_fjac, pcovar, pfree_index=pfree_index, /diagonal)
  sy_prop = sqrt(ycovar) ; Estimated sigma
 

References



  MINPACK-1, Jorge More', available from netlib (www.netlib.org).
  "Optimization Software Guide," Jorge More' and Stephen Wright,
    SIAM, *Frontiers in Applied Mathematics*, Number 14.

Modification History


  Written, 2010-10-27, CM
  Updated documentation, 2011-06-26, CM



© 2024 NV5 Geospatial Solutions, Inc. |  Legal
   Contact Us