% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/scores.R
\name{score_bounds}
\alias{score_bounds}
\title{Score difference bounds for a named scoring rule}
\usage{
score_bounds(scoring_rule)
}
\arguments{
\item{scoring_rule}{Character. One of:
\itemize{
\item \code{"brier"}, \code{"spherical"} — bounded, exact finite-sample \code{c}.
\item \code{"winkler"} — descriptive helper for the one-sided CS on the log score.
\item \code{"tick"} — unbounded; returns \code{NULL} with guidance.
\item \code{"crps"}, \code{"crps_normal"}, \code{"crps_empirical"}, \code{"crps_std"} — unbounded;
returns \code{NULL} with guidance.
\item \code{"log"}, \code{"qlike"} — unbounded; returns \code{NULL} with guidance.
}}
}
\value{
Named list with elements lo, hi, c_thm1, c_thm23 for bounded
rules, or NULL for unbounded rules (with an informative message).
}
\description{
Returns lo, hi and the derived scale parameters c_thm1, c_thm23 for the
score difference process
hat_delta_t = S(p, y) - S(q, y),
in those cases where a genuine, theorem-valid bound is available.
}
\details{
Convention (utils.R::score_diff_scales):
c_thm1  = (hi - lo) / 2   # Theorem 1:      |delta_i| <= c
c_thm23 = hi - lo        # Theorems 2 & 3: |delta_i| <= c/2
}
\section{Per-rule notes}{

\itemize{
\item \strong{Brier / Spherical} — individual scores lie in \verb{[-1, 0]} (Brier) or
\verb{[0, 1]} (Spherical), so score differences lie in \verb{[-1, 1]} either way.
This bound is exact and yields finite-sample anytime-valid CS via
Hoeffding/Bernstein.
\item \strong{Winkler} — bounded above by 1; the lower bound is problem-dependent,
so \code{lo = -Inf} and only \code{hi = 1} is used, as a descriptive helper for
the one-sided CS wrapper \code{winkler_cs()}. Not intended for generic
Hoeffding/Bernstein use (Theorem 1 requires a finite symmetric interval).
\item \strong{Tick loss} — unbounded on general financial returns. Any bound
derived from an empirical data range is ex-post and not
filtration-respecting, so it cannot justify finite-sample anytime
validity. Use \code{cs_asymptotic()} for tick comparisons.
\item \strong{CRPS} (normal, t, empirical) — unbounded, since both the predictive
distributions and the realised outcomes are unbounded. A historical
data range is again an ex-post surrogate and does not provide a
theorem-valid \code{c} for Hoeffding/Bernstein. Use \code{cs_asymptotic()}, or
supply genuine ex ante bounds in problem-specific code if available.
\item \strong{Log / QLIKE} — both unbounded. For binary log-score comparisons, use
\code{winkler_score()} + \code{winkler_cs()} when the Winkler construction is
appropriate. For categorical log-score, QLIKE, and other unbounded
score differences, use \code{cs_asymptotic()}, or \code{eprocess_predictable()}
only with genuine ex ante predictable bounds.
}
}

\examples{
score_bounds("brier")
score_bounds("winkler")

}
