Resubmission addressing the CRAN pre-test feedback on 2.1.17: the vignette took about 11 minutes to rebuild, which is more than CRAN can afford to run regularly.
inst/extdata/vignette-simulations.rds and read by the
vignette instead of being recomputed on every build. The generating
script is data-raw/vignette-simulations.R.cache = TRUE from the vignette: with the study
precomputed it buys nothing, and it was what produced the stray cache
directory removed in 2.1.17.Local vignette build time drops from about 3m30s to 35s.
gkwreg timing by
roughly 0.15s. Scenario 1 consequently reported Kumaraswamy as slower
than betareg while the text claimed it was faster. The
models are now compiled before the timed loops.Maintenance release. No changes to the statistical methods or to the exported API.
Version 2.1.16 was used for the JOSS review archive on Zenodo and was never released on CRAN; 2.1.17 is the CRAN update that follows 2.1.14.
inst/CITATION, so that
citation("gkwreg") returns the peer-reviewed reference, and
added that reference to the Description field.utils and grDevices are now declared in
Imports. Both were already used via ::
(utils::modifyList, utils::globalVariables,
grDevices::dev.hold, grDevices::devAskNewPage)
without being declared.Suggests.<U+XXXX> escape sequences, affecting the
LossAversion, ReadingSkills,
gkwreg, anova.gkwreg and
residuals.gkwreg help pages, the README and the
vignette.DESCRIPTION, LICENSE,
NAMESPACE and all package sources to LF line endings.LICENSE to the two-line DCF stub that
License: MIT + file LICENSE requires. It had been replaced
by the full MIT text, which R CMD check reports as “License
stub is invalid DCF”. The full text remains in LICENSE.md
for GitHub.utils::globalVariables(), where
"dkw dmc" was a single string instead of two separate
entries..Rbuildignore and .gitignore so
that build artefacts, session files and cache directories cannot leak
into the tarball.pkgdown site (light theme, KaTeX math
rendering).static_cast<int> overflow in the cache-key generation
used by the TMB models. A safe_int_cast() helper now
prevents undefined behaviour when distribution parameters reach extreme
values during optimisation. Affects gkwreg.cpp,
bkwreg.cpp, kkwreg.cpp,
ekwreg.cpp, mcreg.cpp and
kwreg.cpp.Addresses all remaining issues for CRAN acceptance after archival on 2025-11-30.
inst/WORDLIST with ‘Kumaraswamy’ to resolve
spelling NOTEskip_on_cran() to all test files to reduce check
time from 18min to ~9mincran-comments.md documenting changes since
archival (excluded from build via .Rbuildignore)tempdir()
for session-specific TMB DLL cache~/.cache/gkwreg usage completely removed (fixed in
v2.1.11)This release addresses all issues that led to package archival on 2025-11-30.
RcppArmadillo and
RcppEigen from Imports field in DESCRIPTION
(they remain in LinkingTo only, as they are used solely for
C++ compilation)@import RcppArmadillo roxygen
directiveThe cache policy violation (~/.cache/gkwreg) reported in
version 2.1.6 was already fixed in version 2.1.11. The package now uses
ONLY tempdir() for session-specific temporary cache, fully
complying with CRAN policies.
Other changes:
Introduced a dedicated comparative test suite to
validate gkwreg’s beta family implementation against the
reference betareg package, ensuring numerical accuracy and
reliability.
Confirmed statistical equivalence despite
different internal parameterizations. Tests demonstrate that
gkwreg’s shape-based (gamma,
delta+1) approach produces equivalent statistical models to
betareg’s mean-precision (mu,
phi) approach.
Validated key outputs, showing that log-likelihood, AIC/BIC, fitted values, and predictions are virtually identical between the two packages when fitting the same beta regression model.
Successfully benchmarked gkwreg with
family = "beta" as a robust and reliable
alternative for beta regression, yielding the same inferential
conclusions as the established betareg package.
Verified consistency across multiple scenarios,
including controlled simulations with known parameters and real-world
datasets (GasolineYield, FoodExpenditure),
ensuring robust performance in diverse modeling contexts.
Complete package reformulation following JOSS reviewer feedback to reduce complexity and improve maintainability.
Distribution functions moved to separate package
gkwdist: All d*, p*,
q*, r* density/CDF/quantile/random generation
functions have been extracted to the companion package
gkwdist for cleaner namespace and reduced dependencies. The
gkwreg package now focuses exclusively on regression
modeling.
Univariate fitting functions removed:
gkwfit(), gkwgof(), and
gkwfitall() have been removed to maintain package focus on
regression. Users needing univariate distribution fitting should use the
gkwdist package directly or standard MLE
approaches.
Introduced gkw_control(): All
technical/optimization parameters (method, start, fixed, hessian, maxit,
tolerances, etc.) are now consolidated in a dedicated control function
following the glm.control() design pattern. This
dramatically simplifies the main gkwreg()
interface.
Removed arguments violating separation of
concerns from gkwreg():
plot argument removed (use plot() method
instead)conf.level argument removed (use confint()
method instead)profile, submodels, npoints
arguments removed (focused functionality)Streamlined gkwreg() signature:
Reduced from 15+ arguments to ~12 core arguments, with technical options
delegated to control.
print.gkwreg(), summary.gkwreg(),
print.summary.gkwreg()coef.gkwreg(), vcov.gkwreg(),
fitted.gkwreg()logLik.gkwreg(), AIC.gkwreg(),
BIC.gkwreg(), nobs.gkwreg()confint.gkwreg(), residuals.gkwreg(),
predict.gkwreg()anova.gkwreg(), print.anova.gkwreg(),
lrtest()Comprehensive plot.gkwreg() method
with 6 diagnostic plot types:
Dual graphics system support: Base R graphics
(default) or ggplot2 with automatic grid arrangement via
gridExtra/ggpubr.
Advanced customization: Named-list interface for plot captions (partial customization without repeating all titles), theme control, sampling for large datasets.
predict.gkwreg() with 9 prediction
types:
"response", "variance",
"link", "parameter""alpha", "beta",
"gamma", "delta", "lambda""density",
"probability", "quantile"elementwise argument for CDF/PDF/quantile
calculations.Likelihood ratio tests:
anova.gkwreg() for comparing nested models with automatic
ordering and chi-squared tests; dedicated lrtest() function
for pairwise comparisons.
Information criteria: AIC.gkwreg()
and BIC.gkwreg() with multi-model comparison support
returning data frames.
Extensive Roxygen documentation for all exported functions with detailed examples, mathematical formulas, and usage guidance.
Updated README.md with comprehensive feature overview, quick start guide, advanced examples, and ecosystem comparison table.
NULL default intelligent behavior: Several
arguments default to NULL triggering smart
auto-configuration (e.g., sub.caption, ask,
theme_fn in plot.gkwreg()).
The package now includes a robust testing framework with 1000+ unit tests covering all major functionalities:
gkwreg(): 20 tests for model fitting,
parameter estimation, formula handling, all distribution families, link
functions, and convergencepredict.gkwreg(): 10 tests for
predictions, including response means, densities, CDFs, quantiles, and
parameter extractionresiduals.gkwreg(): 10 tests for all
residual types (response, Pearson, deviance, quantile, standardized,
working, partial)fitted.gkwreg(): 10 tests for fitted
value extraction and validationanova.gkwreg(): 45 tests for model
comparisons, likelihood ratio tests, and nested model hierarchiesprint.gkwreg() and print.summary.gkwreg()coef(),
vcov(), nobs(), confint()summary.gkwreg() including coefficient tables, confidence
intervals, and fit statisticstestthat packagegkwdist packageLink scaling support: Added
link_scale argument to gkwreg() for
controlling transformation intensity.
Performance optimizations: Intelligent caching, sampling support for diagnostics on large datasets, optional Hessian computation.
Breaking Changes: Version 2.0.0 introduces breaking
changes. Code using gkwfit(), gkwgof(),
gkwfitall(), or distribution functions
(dgkw(), etc.) must be updated to use the
gkwdist package or the new gkwreg() interface
with gkw_control().