Bug-fix release. dk_sustainability_gap() overstated S2 whenever
ageing_costs was non-zero. Also a citation correction and two
documentation changes.
S2 is a permanent change in the primary balance, a share of GDP per year.
dk_sustainability_gap() added the net present value of future ageing
costs, a stock, to it: ageing_costs * (1 + g) / (r - g). For the help
page example (r = 2.5%, g = 1.5%, ageing costs of 2 pp) that put 2.03 of
GDP into the indicator, and S2 came out at 204.9 pp. The correct term is
the annuity value of that present value, which for the permanent step
increase the function assumes is ageing_costs itself, so the example's
S2 is 3.9 pp. The same fix removes two artefacts of the old formula: with
r < g, ageing costs reduced S2, and with r = g, S2 was Inf with a
warning. S1 is unchanged.
Bohn's condition is sufficient for sustainability, not necessary. When
rho is not positive and significant the printed verdict now says the
condition is not met and that this is no evidence of a stabilising
response, rather than "Not sustainable". The sustainable element is
unchanged. The README example also now passes lagged debt, as the
debt argument requires; it passed current debt.
The package cites Blanchard (1990) for the debt dynamics framework, but the
DOI given was 10.1787/budget-v2-art12-en. That DOI resolves, which is why
it survived CRAN's incoming check, but CrossRef records it as a 2003 item in
the OECD Journal on Budgeting carrying no title and no listed authors. It
is not the 1990 paper.
The correct reference is 10.1787/435618162862, "Suggestions for a New Set
of Fiscal Indicators", OECD Economics Department Working Papers, 1990, whose
CrossRef title and year match the claim exactly. Corrected in DESCRIPTION and
in the @references for dk_decompose(), dk_project() and dk_rg().
Passing seed calls set.seed() and does not restore the previous state, so
the caller's stream is left reseeded. That behaviour is unchanged: the
save-and-restore implementation was removed at CRAN's request in 0.1.2
because it manipulated .GlobalEnv, and reinstating it would re-open a
question a reviewer has already settled. It is now stated in a "Random number
generation" section on the help page instead, with the workaround, rather
than being left for users to discover.
dk_gfn() now returns an S3 object of class dk_gfn with dedicated
print() and plot() methods, consistent with other debtkit functions..GlobalEnv modification in dk_fan_chart() seed handling, per CRAN
policy.dk_project() using the standard debt
dynamics equation.dk_decompose().dk_rg().dk_bohn_test(). HAC (Newey-West) standard errors
via robust_se = TRUE.dk_fan_chart()
and dk_estimate_shocks(). Supports bootstrap residual resampling.dk_stress_test(), with optional
data-driven calibration.dk_heat_map().dk_gfn().dk_sustainability_gap().dk_compare().dk_sample_data().