Changes in Version 2.2.0
  o BUG FIX, AFFECTS RESULTS: 'control$addPriorConditions' now enters the
    acceptance test of each Metropolis-Hastings step instead of being applied
    once to the whole block. The previous scheme accepted or rejected the
    entire sweep on the final value of psi. Each sub-step is reversible with
    respect to the unconstrained posterior, but their composition is only
    invariant, not reversible, so rejecting the block did not leave the
    constrained posterior p(psi|y) I[psi in A] invariant and the chain
    converged to the wrong distribution. On the dem2gbp benchmark under the
    covariance-stationarity constraint alpha1 + beta < 1, the posterior mean
    of alpha0 was overstated by about 60% and that of alpha1 by about 35%.
    Users who called bayesGARCH() with 'addPriorConditions' should re-run.
    Runs WITHOUT 'addPriorConditions' target the same posterior as before and
    need not be revisited; see the note on numerical changes below for why
    they are nonetheless no longer reproduced bit for bit from a given seed.
  o BUG FIX, AFFECTS RESULTS: the series is now rescaled internally to unit
    root mean square and the draws are mapped back, so that results no longer
    depend on the units of 'y'. The proposals are built from a weighted least
    squares fit whose conditioning depends on the size of y^2 relative to
    alpha0, and whose starting value for alpha0 was a fixed 0.01. On a series
    whose scale was far from unity every alpha and beta move was rejected: the
    move rates were exactly zero, nu was then dragged down to delta, the latent
    variances collapsed, and the root solved in the nu update eventually left
    its bracket and aborted the run. Dividing a series by 100 -- log-returns in
    decimals rather than in percent -- was enough to trigger it. Only alpha0
    carries the scale, and the Normal prior on alpha transforms exactly under
    the map, so the posterior explored is unchanged; the factor is a power of
    two, which makes the rescaling and its inverse exact. Note that the prior
    is stated in the units of 'y': rescaling 'y' without rescaling
    'Sigma.alpha' changes the posterior, as it should.
  o BUG FIX: the rejection-envelope rate of the nu update was solved on the
    fixed interval [1e-5, 500]. The root can lie above 500, for a sharply
    concentrated prior on nu such as lambda = 500 with delta = 500. The bracket
    is now widened geometrically until the endpoints differ in sign, and a
    failure to bracket is reported with a message naming the state instead of
    surfacing as 'f() values at end points not of opposite sign'.
  o BUG FIX: 'control$addPriorConditions' is now validated identically wherever
    it is called. The starting values were checked with isTRUE() while proposed
    states were tested directly, so a function returning a truthy number such
    as 1 was refused up front although the sampler would have accepted it, and
    a function returning NA only at some proposed states aborted the chain
    mid-run with 'missing value where TRUE/FALSE needed'. Both now give one
    message naming the offending parameter vector.
  o Prior variances too concentrated to invert are refused with a clear
    message: 'Sigma.beta' and 'lambda' whose reciprocals overflow, and a
    'Sigma.alpha' that cannot be inverted. 'Sigma.alpha' is inverted in the
    units of 'y', where it is well conditioned, and the precision is then
    mapped to the rescaled units.
  o The symmetry of 'Sigma.alpha' is judged to tolerance rather than by exact
    floating-point equality, so a matrix whose off-diagonal entries are
    arithmetically equal but not bit-identical is accepted; it is symmetrised
    before use. Genuinely asymmetric matrices are still refused.
  o A series on a scale that cannot be represented after squaring is refused
    with a clear message rather than failing inside a Cholesky factorisation or
    returning a chain that never moves.
  o BUG FIX, AFFECTS RESULTS: starting values are now required to lie in the
    support of the posterior, and are rejected with an error naming the row and
    the failed condition otherwise. Every Metropolis-Hastings step only accepts
    a move into the admissible region, so a chain started outside it could never
    enter: the starting value was returned unchanged at every iteration and the
    whole sample consisted of draws the posterior gives zero mass, with no
    warning. A chain started at alpha1 + beta = 1.3 under the covariance
    stationarity constraint returned 200 identical inadmissible draws out of
    200. This was easy to trigger by accident, since the documented advice to
    start from the parameters of a previous estimation step supplies an
    unconstrained estimate; on the dem2gbp benchmark the unconstrained posterior
    puts 62% of its mass outside the covariance stationary region.
  o BUG FIX: the nu step tested 'control$addPriorConditions' inside its
    accept-reject loop, so it exhausted all 50000 proposals whenever no value of
    nu could satisfy the condition, which is the usual case since conditions
    such as alpha1 + beta < 1 do not involve nu. The draw is now taken from the
    full conditional first and the condition applied once afterwards, as an
    independence Metropolis-Hastings step whose ratio reduces to the indicator.
    This is equivalent when the condition is satisfiable and roughly thirty
    times faster when it is not.
  o The default starting value for nu is now the prior mean, delta + 1/lambda,
    rather than a fixed 100. The fixed value lay below the prior support for the
    Normal special case documented under 'lambda = 100, delta = 500'.
  o Unknown components of 'control' are now rejected rather than silently
    ignored, so that a mistyped name is reported instead of leaving the default
    in force. The internal 'hypers' component is no longer reachable through
    'control'; it could be used to replace hyper-parameters that had already
    been validated as arguments of bayesGARCH().
  o 'y' and all hyper-parameters must now be finite. In particular
    'Sigma.beta = Inf' was previously accepted and silently imposed an improper
    prior; other non-finite inputs failed later with implementation-level
    messages from .C() or uniroot().
  o 'control$l.chain', 'control$n.chain', 'control$refresh' and
    'control$digits' must now be finite whole numbers. Fractional values were
    silently truncated, and NA values failed inside the sampling loop or printed
    meaningless progress reports.
  o formSmpl() now requires a non-empty list of matrices sharing the same
    dimensions and column names, and whole-number 'l.bi' and 'batch.size'. In
    particular 'batch.size = Inf' previously returned a single row of NA rather
    than signalling an error.
  o BUG FIX: supplying 'control$n.chain' together with a 'control$start.val'
    matrix of several rows failed with "length of 'dimnames' [2] not equal to
    array extent". Several rows are now used as documented (one per chain), a
    single row or a vector is replicated across chains, and a mismatch
    between the two is reported clearly.
  o BUG FIX: formSmpl() validated the length of 'l.bi' where it meant
    'batch.size'.
  o BUG FIX: a non-finite Metropolis-Hastings ratio, which can arise when two
    log posterior evaluations are both -Inf, made the acceptance test NA and
    aborted the chain. Such a proposal is now rejected.
  o BUG FIX: fixed a potential out-of-bounds write in the simulation branch
    of the C variance recursion. It was unreachable from R, where 'sim' is
    always zero.
  o 'control$l.chain' and 'control$n.chain' are now validated. A 'l.chain' of
    1 previously wrote past the end of the chain.
  o 'y' may now be any numeric vector, including a 'ts' or 'zoo' series,
    which the previous is.vector() test rejected.
  o Progress reports use message() rather than cat(), so they can be silenced
    with suppressMessages(). This applies to bayesGARCH() and formSmpl().
  o Each chain of the returned mcmc.list carries a "move.rates" attribute
    giving the proportion of iterations at which each parameter moved. A high
    rate is not by itself evidence of good mixing: the accepted moves are
    typically small and the chains are strongly autocorrelated.
  o The returned object is built with coda::mcmc.list() rather than by
    setting the class attribute directly.
  o SPEED: about a quarter less time per iteration. mvtnorm::dmvnorm() and
    mvtnorm::rmvnorm(method = "eigen") were replaced, in the alpha step only,
    by internal equivalents that perform the same operations in the same order
    without the argument checking and dispatch that dominated their cost at
    p = 2; these are exact substitutes, and tests pin them against mvtnorm.
    The w and alpha steps now share one evaluation of the conditional variance
    instead of computing it twice, and the Gamma shape in the w step is no
    longer expanded into a vector of identical values. Neither of those
    changes the arithmetic.
  o NUMERICS, changes the low-order bits of the draws: fn.Dd.D() now forms the
    weighted cross-products from the whitened regressors Z := X/sqrt(h),
    through crossprod(), rather than from X/h through t(X/h) %*% X. Both
    compute X' diag(1/h) X. The new form is symmetric by construction, about
    five times closer to the exactly rounded value for that matrix, and about
    an order of magnitude closer for the cross-products of the beta step,
    whose regressors change sign. The posterior precision is then inverted
    through its Cholesky factor rather than by a general LU solve, which is
    both faster and, unlike solve(), returns an exactly symmetric D. That
    removes a latent inconsistency: D is handed to chol(), which reads its
    upper triangle, and to eigen(symmetric = TRUE), which reads its lower one,
    so an asymmetric D meant the covariance used to draw the candidate and the
    covariance used to evaluate its density differed in their last bits. The
    posterior being targeted is unchanged, but a given seed no longer
    reproduces the draws of version 2.1.10 exactly.
  o mvtnorm moved from Imports to Suggests, where it is now used only to test
    the equivalence above.
  o Documented the corrected handling of 'addPriorConditions'.
  o Documentation fix: the default 'control$start.val' was documented as
    c(0.01,0.1,0.7,20); the code uses c(0.01,0.1,0.7,100).
  o Documentation fix: replaced the claims about the sampler's speed and
    mixing with a measured statement. The cost per iteration is modest on
    current hardware, but the default l.chain=10000 yields an effective
    sample size of only a few hundred draws per parameter on dem2gbp.
    Readers are pointed at coda::effectiveSize() and coda::gelman.diag().
  o CITATION file updated to bibentry(); citEntry() and personList() are
    deprecated.
  o Added a testthat suite. The statistical checks, namely the dem2gbp Normal
    benchmark and a regression test pinning the constrained posterior to an
    independently obtained reference, are skipped on CRAN.
  o Removed cvGARCH(), which was never exported, documented or called, and
    the C routines fnFilterAlphaAsymC() and fnFilterWAsymC(), which were
    neither registered nor called.
  o mvtnorm and coda functions are now consistently namespace-qualified.
  o DESCRIPTION: dropped the CRAN-generated Author and Repository fields and
    a RoxygenNote entry for a package that uses no roxygen; added Encoding
    and the 'fnd' role for the author.

Changes in Version 2.1.10
  o Doc fixed
  
Changes in Version 2.1.9
  o References updated
  
Changes in Version 2.1.8
  o Reverted some parts of 2.1.5 to ensure proper versioning
  
Changes in Version 2.1.7
  o Update doc to remove ftp:// sites
  o Update https
  o RegisteringDynamic Symbols

Changes in Version 2.1.5
  o Doc update

Changes in Version 2.1.4
  o Doc update
  o Citation modified
  
Changes in Version 2.1.2
  o Update doc
  o Adapt to new CRAN standards
  o paper added

Changes in Version 2.0.4
  o update info

Changes in Version 2.0.3
  o DESCRIPTION modified
  o references modified

Changes in Version 2.0.2
  o DESCRIPTION file adapted to new standard
  o Vignette modified

Changes in Version 2.0.1
  o new version compiled
  o change of email address
  o change of package's structure
  o speedup of examples
  o change of version number

Changes in Version 1-00.10
  o package vignette modified

Changes in Version 1-00.9
  o new package vignette added
  o changes in documetation.

Changes in Version 1-00.8
  o CITATION file modified.
  o package vignette updated.
  o package vignette published in The R Journal.

Changes in Version 1-00.7
  o CITATION file modified.
  o documentation files modified.
  o package vignette added to \inst\doc.

Changes in Version 1-00.6
  o function addPriorConditions is now a control parameter in bayesGARCH.
  o demo file modified accordingly.
  o documentation modified accordingly.
  o CITATION file modified.
  o remove obsolete vignette

Changes in Version 1-00.05
  o CITATION file corrected

Changes in Version 1-00.04
  o CITATION file modified.
  o changes in documetation.

Changes in Version 1-00.03
  o CITATION file modified.

Changes in Version 1-00.02
  o changes in documentation.

Changes in Version 1-00.01
  o changes in documentation.
