*******************
Reference Forecasts
*******************

To quantify the quality of an initialized forecast, it is useful to judge it against
some simple reference forecast. ``climpred`` currently supports a several reference
forecasts, and we are open to adding other reference forecasts. Consider opening a
`Pull Request <contributing.html>`_ for additional references.

**Persistence Forecast**: Whatever is observed at the time of initialization is
forecasted to persist into the forecast period :cite:p:`Jolliffe2011`.
You can compute this by passing ``reference="persistence"`` into
:py:meth:`.HindcastEnsemble.verify`, :py:meth:`.HindcastEnsemble.bootstrap`,
:py:meth:`.PerfectModelEnsemble.verify` and :py:meth:`.PerfectModelEnsemble.bootstrap`.

**Damped Persistence Forecast**: (*Not Implemented*) The amplitudes of the anomalies
reduce in time exponentially at a time scale of the local autocorrelation :cite:p:`Yuan2016`.

.. math::

    v_{dp}(t) = v(0)e^{-\alpha t}

**Climatology**: The average values at the temporal forecast resolution (e.g., annual,
monthly, daily) over some long period, which is usually 30 years :cite:p:`Jolliffe2011`.
You can compute this by passing ``reference="climatology"`` into
:py:meth:`.HindcastEnsemble.verify`, :py:meth:`.HindcastEnsemble.bootstrap`,
:py:meth:`.PerfectModelEnsemble.verify` and :py:meth:`.PerfectModelEnsemble.bootstrap`.

**Uninitialized**: Uninitialized ensembles are generated by perturbing initial
conditions only at one point in the historical run.
These are generated via micro (round-off error perturbations) or macro (starting from
completely different restart files) methods. Uninitialized ensembles are used to
approximate the magnitude of internal climate variability and to confidently extract
the forced response (ensemble mean) in the climate system. In ``climpred``, we use
uninitialized ensembles as a baseline for how important (reoccurring) initializations
are for lending predictability to the system.
You can compute this by passing ``reference="uninitialized"`` into
:py:meth:`.HindcastEnsemble.verify`, :py:meth:`.HindcastEnsemble.bootstrap`,
:py:meth:`.PerfectModelEnsemble.verify` and :py:meth:`.PerfectModelEnsemble.bootstrap`.
Some modeling centers (such as NCAR)
provide a dynamical uninitialized ensemble (the CESM Large Ensemble) along with their
initialized prediction system (the CESM Decadal Prediction Large Ensemble).
Use :py:meth:`.HindcastEnsemble.add_uninitialized` or
:py:meth:`.PerfectModelEnsemble.add_uninitialized`.
This could be, for example, output from an ``uninitialized`` Large Ensemble.
If ``uninitialzed`` isn't available, one can run
:py:meth:`.HindcastEnsemble.generate_uninitialized` or
:py:meth:`.PerfectModelEnsemble.generate_uninitialized`, which
resamples the ``initialized`` from :py:class:`.HindcastEnsemble` or
``control`` from :py:class:`.PerfectModelEnsemble` to an
``uninitialized`` forecast.

**Random Mechanism**: (*Not Implemented*) A probability distribution is assigned to the
possible range of the variable being forecasted, and a sequence of forecasts is
produced by taking a sequence of independent values from that distribution
:cite:p:`Jolliffe2011`. This would be similar to computing an ``uninitialized``
forecast.

References
##########

.. bibliography::
  :filter: docname in docnames
