software-review
software-review copied to clipboard
Statistical software submission: reviser
Submitting Author Name: Marc Burri Submitting Author Github Handle: @marcburri Other Package Authors Github handles: (comma separated, delete if none) @p-wegmueller Repository: https://github.com/p-wegmueller/reviser Version submitted: Submission type: Stats Badge grade: bronze Editor: @rkillick Reviewers: TBD
Archive: TBD Version accepted: TBD Language: en
- Paste the full DESCRIPTION file inside a code block below:
Package: reviser
Type: Package
Title: Tools for Studying Revision Properties in Real-Time Time Series Vintages
Version: 0.1.0.9000
Authors@R: c(
person("Marc", "Burri", ,"[email protected]", role = c("aut", "cre", "cph"),
comment = c(ORCID = "0000-0001-8974-9090")),
person(given = "Philipp", family = "Wegmueller",
email = "[email protected]", role = c("aut", "cph"))
)
Description: Provides tools to analyze revision properties in real-time time series data.
Maintainers: c(
person("Marc", "Burri", ,"[email protected]",
comment = c(ORCID = "0000-0001-8974-9090")),
person(given = "Philipp", family = "Wegmueller",
email = "[email protected]")
)
License: MIT + file LICENSE
Encoding: UTF-8
LazyData: true
Depends:
R (>= 2.10)
RoxygenNote: 7.3.2
Roxygen: list (markdown = TRUE, roclets = c ("namespace", "rd", "srr::srr_stats_roclet"))
Imports:
magrittr,
dplyr,
tidyr,
ggplot2,
car,
sandwich,
systemfit,
calculus,
rlang,
scales,
tibble,
lubridate,
KFAS
Suggests:
tsbox,
testthat (>= 3.0.0),
knitr,
rmarkdown,
purrr
Config/testthat/edition: 3
VignetteBuilder: knitr
URL: https://p-wegmueller.github.io/reviser/
BugReports: https://github.com/p-wegmueller/reviser/issues
Scope
-
Please indicate which of our statistical package categories this package falls under. (Please check one or more appropriate boxes below):
Statistical Packages
- [ ] Bayesian and Monte Carlo Routines
- [ ] Dimensionality Reduction, Clustering, and Unsupervised Learning
- [ ] Machine Learning
- [ ] Regression and Supervised Learning
- [ ] Exploratory Data Analysis (EDA) and Summary Statistics
- [ ] Spatial Analyses
- [x] Time Series Analyses
- [ ] Probability Distributions
Pre-submission Inquiry
- [x] A pre-submission inquiry has been approved in issue#701
General Information
- Who is the target audience and what are scientific applications of this package?
The target audience of the reviser package includes applied economists, statisticians, data scientists, and official statisticians—particularly those working with macroeconomic indicators such as GDP, inflation, or labor market statistics. It is especially useful for professionals dealing with real-time data, where the first release of a time series is subject to subsequent revisions.
-
Paste your responses to our General Standard G1.1 here, describing whether your software is:
- The first implementation of a novel algorithm; or
- The first implementation within R of an algorithm which has previously been implemented in other languages or contexts; or
- An improvement on other implementations of similar algorithms in R.
#' The function supports multiple models, including the full Kishor-Koenig #' framework, Howrey's model, and a classical approach. It handles data #' preprocessing, estimation of system equations using Seemingly Unrelated #' Regressions (SUR), and application of the Kalman filter. This is #' the first openly available implementation of the Kishor-Koenig model (See #' the vignette \code{vignette("nowcasting_revisions")} for more details).
-
Please include hyperlinked references to all other relevant software. The reviser package sets itself apart from rjd3revisions not only through its focus on advanced analysis of efficient releases and nowcasting performance, but also in its pure R implementation, which avoids external dependencies. In contrast, rjd3revisions relies heavily on Java via the JDemetra+ platform, which can make setup and integration more complex. reviser offers a lightweight, R-native solution for revision analysis, combining user-friendly tools for data wrangling, visualization, and evaluation of release efficiency.
-
(If applicable) Does your package comply with our guidance around Ethics, Data Privacy and Human Subjects Research?
Not applicable
Badging
- What grade of badge are you aiming for? (bronze, silver, gold)
Bronze or silver (TBD)
- If aiming for silver or gold, describe which of the four aspects listed in the Guide for Authors chapter the package fulfils (at least one aspect for silver; three for gold)
Technical checks
Confirm each of the following by checking the box.
- [x] I have read the rOpenSci packaging guide.
- [x] I have read the author guide and I expect to maintain this package for at least 2 years or have another maintainer identified.
- [x] I/we have read the Statistical Software Peer Review Guide for Authors.
- [x] I/we have run
autotestchecks on the package, and ensured no tests fail. - [x] The
srr_stats_pre_submit()function confirms this package may be submitted. - [x] The
pkgcheck()function confirms this package may be submitted - alternatively, please explain reasons for any checks which your package is unable to pass.
This package:
- [x] does not violate the Terms of Service of any service it interacts with.
- [x] has a CRAN and OSI accepted license.
- [x] contains a README with instructions for installing the development version.
Publication options
- [x] Do you intend for this package to go on CRAN?
- [ ] Do you intend for this package to go on Bioconductor?
Code of conduct
- [x] I agree to abide by rOpenSci's Code of Conduct during the review process and in maintaining my package should it be accepted.
Thanks for submitting to rOpenSci, our editors and @ropensci-review-bot will reply soon. Type @ropensci-review-bot help for help.
:rocket:
The following problem was found in your submission template:
- 'statsgrade' variable must be one of [bronze, silver, gold] Editors: Please ensure these problems with the submission template are rectified. Package checks have been started regardless.
:wave:
Checks for reviser (v0.1.0.9000)
git hash: 6e58d67a
- :heavy_check_mark: Package name is available
- :heavy_check_mark: has a 'codemeta.json' file.
- :heavy_check_mark: has a 'contributing' file.
- :heavy_check_mark: uses 'roxygen2'.
- :heavy_check_mark: 'DESCRIPTION' has a URL field.
- :heavy_check_mark: 'DESCRIPTION' has a BugReports field.
- :heavy_check_mark: Package has at least one HTML vignette
- :heavy_check_mark: All functions have examples.
- :heavy_check_mark: Package has continuous integration checks.
- :heavy_check_mark: Package coverage is 78.1%.
- :heavy_check_mark: This is a statistical package which complies with all applicable standards
- :heavy_check_mark: R CMD check found no errors.
- :heavy_check_mark: R CMD check found no warnings.
Package License: MIT + file LICENSE
1. rOpenSci Statistical Standards (srr package)
This package is in the following category:
- Time Series
:heavy_check_mark: All applicable standards [v0.2.0] have been documented in this package (145 complied with; 53 N/A standards)
Click to see the report of author-reported standards compliance of the package with links to associated lines of code, which can be re-generated locally by running the srr_report() function from within a local clone of the repository.
2. Package Dependencies
Details of Package Dependency Usage (click to open)
The table below tallies all function calls to all packages ('ncalls'), both internal (r-base + recommended, along with the package itself), and external (imported and suggested packages). 'NA' values indicate packages to which no identified calls to R functions could be found. Note that these results are generated by an automated code-tagging system which may not be entirely accurate.
| type | package | ncalls |
|---|---|---|
| internal | base | 348 |
| internal | stats | 111 |
| internal | reviser | 52 |
| internal | utils | 29 |
| internal | graphics | 2 |
| imports | magrittr | 174 |
| imports | dplyr | 35 |
| imports | ggplot2 | 25 |
| imports | calculus | 6 |
| imports | sandwich | 4 |
| imports | tibble | 4 |
| imports | car | 2 |
| imports | scales | 2 |
| imports | KFAS | 2 |
| imports | tidyr | 1 |
| imports | systemfit | 1 |
| imports | rlang | NA |
| imports | lubridate | NA |
| suggests | tsbox | NA |
| suggests | testthat | NA |
| suggests | knitr | NA |
| suggests | rmarkdown | NA |
| suggests | purrr | NA |
| linking_to | NA | NA |
Click below for tallies of functions used in each package. Locations of each call within this package may be generated locally by running 's <- pkgstats::pkgstats(<path/to/repo>)', and examining the 'external_calls' table.
base
c (50), list (32), length (17), return (17), paste0 (16), for (14), array (10), diag (10), sqrt (10), as.numeric (9), summary (9), unique (8), by (7), names (7), nrow (7), vapply (7), abs (6), data.frame (6), as.data.frame (5), colnames (5), lapply (5), sign (5), tryCatch (5), col (4), cbind (3), diff (3), logical (3), mean (3), regmatches (3), round (3), setdiff (3), unlist (3), which (3), date (2), deparse (2), factor (2), gsub (2), is.null (2), max (2), merge (2), min (2), rep (2), seq_along (2), sort (2), sum (2), use (2), all (1), as.character (1), as.Date (1), beta (1), cat (1), class (1), difftime (1), dim (1), format (1), formatC (1), if (1), ifelse (1), is.atomic (1), ncol (1), paste (1), rbind (1), row (1), seq (1), seq.Date (1), t (1), table (1), trace (1), units (1), warning (1)
magrittr
%>% (174)
stats
df (57), coef (8), lm (7), coefficients (6), formula (6), frequency (6), pt (4), cor (3), as.formula (2), quantile (2), sd (2), var (2), Box.test (1), friedman.test (1), lag (1), median (1), setNames (1), sigma (1)
reviser
vintages_check (14), kk_matrices (4), check_implicit_missing (3), colors_reviser (3), friedman_test (2), kk_arrange_data (2), kk_equations (2), kk_ols_estim (2), kk_to_ss (2), check_simple_columns (1), compute_revision_stats (1), get_days_to_release (1), get_first_efficient_release (1), get_first_release (1), get_fixed_release (1), get_latest_release (1), get_nth_release (1), get_releases_by_date (1), get_revision_analysis (1), get_revisions (1), kk_nowcast (1), make_explicit_missing (1), plot_vintages (1), print_metrics (1), scale_color_reviser (1), scale_fill_reviser (1), vintages_wide (1)
dplyr
mutate (10), lag (4), left_join (4), n (4), if_else (3), rename (2), select (2), all_of (1), any_of (1), arrange (1), bind_rows (1), desc (1), everything (1)
utils
data (29)
ggplot2
element_text (6), margin (5), aes (4), geom_line (3), element_blank (2), element_line (2), ggplot (1), ggtitle (1), rel (1)
calculus
%mx% (3), %diff% (1), %prod% (1), %sum% (1)
sandwich
vcovHAC (3), NeweyWest (1)
tibble
tibble (4)
car
linearHypothesis (2)
graphics
title (2)
KFAS
KFS (1), SSModel (1)
scales
manual_pal (2)
systemfit
nlsystemfit (1)
tidyr
drop_na (1)
NOTE: Some imported packages appear to have no associated function calls; please ensure with author that these 'Imports' are listed appropriately.
3. Statistical Properties
This package features some noteworthy statistical properties which may need to be clarified by a handling editor prior to progressing.
Details of statistical properties (click to open)
The package has:
- code in R (100% in 7 files) and
- 2 authors
- 6 vignettes
- 1 internal data file
- 13 imported packages
- 19 exported functions (median 57 lines of code)
- 45 non-exported functions in R (median 44 lines of code)
Statistical properties of package structure as distributional percentiles in relation to all current CRAN packages The following terminology is used:
loc= "Lines of Code"fn= "function"exp/not_exp= exported / not exported
All parameters are explained as tooltips in the locally-rendered HTML version of this report generated by the checks_to_markdown() function
The final measure (fn_call_network_size) is the total number of calls between functions (in R), or more abstract relationships between code objects in other languages. Values are flagged as "noteworthy" when they lie in the upper or lower 5th percentile.
| measure | value | percentile | noteworthy |
|---|---|---|---|
| files_R | 7 | 42.8 | |
| files_inst | 1 | 94.5 | |
| files_vignettes | 7 | 98.0 | |
| files_tests | 6 | 78.9 | |
| loc_R | 2430 | 85.7 | |
| loc_inst | 65 | 33.7 | |
| loc_vignettes | 919 | 89.1 | |
| loc_tests | 1454 | 88.8 | |
| num_vignettes | 6 | 97.6 | TRUE |
| data_size_total | 236485 | 87.7 | |
| data_size_median | 236485 | 94.9 | |
| n_fns_r | 64 | 63.0 | |
| n_fns_r_exported | 19 | 65.8 | |
| n_fns_r_not_exported | 45 | 63.1 | |
| n_fns_per_file_r | 8 | 85.2 | |
| num_params_per_fn | 2 | 26.6 | |
| loc_per_fn_r | 45 | 87.5 | |
| loc_per_fn_r_exp | 57 | 82.6 | |
| loc_per_fn_r_not_exp | 44 | 87.7 | |
| rel_whitespace_R | 15 | 81.7 | |
| rel_whitespace_inst | 12 | 29.2 | |
| rel_whitespace_vignettes | 42 | 94.1 | |
| rel_whitespace_tests | 10 | 76.0 | |
| doclines_per_fn_exp | 49 | 61.7 | |
| doclines_per_fn_not_exp | 0 | 0.0 | TRUE |
| fn_call_network_size | 96 | 77.6 |
3a. Network visualisation
Click to see the interactive network visualisation of calls between objects in package
4. goodpractice and other checks
Details of goodpractice checks (click to open)
3a. Continuous Integration Badges
GitHub Workflow Results
| id | name | conclusion | sha | run_number | date |
|---|---|---|---|---|---|
| 15276724645 | pages build and deployment | success | c1dec9 | 109 | 2025-05-27 |
| 15276636982 | pkgcheck | success | 6e58d6 | 37 | 2025-05-27 |
| 15276637001 | pkgdown.yaml | success | 6e58d6 | 132 | 2025-05-27 |
| 15276636984 | R-CMD-check.yaml | success | 6e58d6 | 135 | 2025-05-27 |
| 15276637015 | test-coverage.yaml | success | 6e58d6 | 35 | 2025-05-27 |
3b. goodpractice results
R CMD check with rcmdcheck
R CMD check generated the following note:
- checking package subdirectories ... NOTE Problems with news in ‘NEWS.md’: No news entries found.
Test coverage with covr
Package coverage: 78.14
Cyclocomplexity with cyclocomp
The following functions have cyclocomplexity >= 15:
| function | cyclocomplexity |
|---|---|
| kk_matrices | 47 |
| get_first_efficient_release | 33 |
| kk_ols_estim | 32 |
| kk_nowcast | 31 |
| plot_vintages | 29 |
| vintages_check | 29 |
| get_revision_analysis | 25 |
| get_revisions | 25 |
| get_nth_release | 20 |
Static code analyses with lintr
lintr found the following 29 potential issues:
| message | number of times |
|---|---|
| Avoid library() and require() calls in packages | 20 |
| Lines should not be more than 80 characters. This line is 81 characters. | 1 |
| Lines should not be more than 80 characters. This line is 85 characters. | 2 |
| Lines should not be more than 80 characters. This line is 88 characters. | 1 |
| Lines should not be more than 80 characters. This line is 91 characters. | 1 |
| Lines should not be more than 80 characters. This line is 92 characters. | 1 |
| Lines should not be more than 80 characters. This line is 93 characters. | 1 |
| Lines should not be more than 80 characters. This line is 94 characters. | 1 |
| Lines should not be more than 80 characters. This line is 96 characters. | 1 |
Package Versions
| package | version |
|---|---|
| pkgstats | 0.2.0.58 |
| pkgcheck | 0.1.2.133 |
| srr | 0.1.4.7 |
Editor-in-Chief Instructions:
This package is in top shape and may be passed on to a handling editor
@ropensci-review-bot assign @rkillick as editor
Assigned! @rkillick is now the editor
@ropensci-review-bot assign @compbiodan as reviewer
@compbiodan added to the reviewers list. Review due date is 2025-07-21. Thanks @compbiodan for accepting to review! Please refer to our reviewer guide.
rOpenSci’s community is our best asset. We aim for reviews to be open, non-adversarial, and focused on improving software quality. Be respectful and kind! See our reviewers guide and code of conduct for more.
@CompBioDan: If you haven't done so, please fill this form for us to update our reviewers records.
@ropensci-review-bot assign @AlexGibberd as reviewer
@AlexGibberd added to the reviewers list. Review due date is 2025-07-21. Thanks @AlexGibberd for accepting to review! Please refer to our reviewer guide.
rOpenSci’s community is our best asset. We aim for reviews to be open, non-adversarial, and focused on improving software quality. Be respectful and kind! See our reviewers guide and code of conduct for more.
@AlexGibberd: If you haven't done so, please fill this form for us to update our reviewers records.
:calendar: @compbiodan you have 2 days left before the due date for your review (2025-07-21).
:calendar: @AlexGibberd you have 2 days left before the due date for your review (2025-07-21).
Package Review
Please check off boxes as applicable, and elaborate in comments below. Your review is not limited to these topics, as described in the reviewer guide
-
Briefly describe any working relationship you may have (had) with the package authors (or otherwise remove this statement)
-
[x] As the reviewer I confirm that there are no conflicts of interest for me to review this work (If you are unsure whether you are in conflict, please speak to your editor before starting your review).
Compliance with Standards
- [x] This package complies with a sufficient number of standards for a (bronze/silver/gold) badge
- [x] This grade of badge is the same as what the authors wanted to achieve
The following standards currently deemed non-applicable (through tags of @srrstatsNA) could potentially be applied to future versions of this software: (Please specify)
Please also comment on any standards which you consider either particularly well, or insufficiently, documented.
For packages aiming for silver or gold badges:
- [ ] This package extends beyond minimal compliance with standards in the following ways: (please describe)
General Review
I think the package is useful, well designed, and well documented. I've spent some time trying some of the functions looking at UK based data, and it allows for quick analysis and insights on revision behaviour to be formed.
I also encouraged some of my MSc Statistics students to try the package, and they were also able to produce some interesting visualisations, indicating a relatively good level of usability. Although it's not the main point of the package, the students appreciated the inbuilt datasets on GDP and revisions (however, I wasn't sure exactly where this data came from).
The package in my opinion provides a good R native alternative to rjd3revisions based routines. It also includes some methods for forecasting revisions. I haven't had time to fully test these methods, however, the implementation seems accurate to me.
Further comments on the specifics required by ROpenScience are given below:
Documentation
The package includes all the following forms of documentation:
- [x] A statement of need clearly stating problems the software is designed to solve and its target audience in README
- [x] Installation instructions: for the development version of package and any non-standard dependencies in README
- [x] Community guidelines including contribution guidelines in the README or CONTRIBUTING
- [x] The documentation is sufficient to enable general use of the package beyond one specific use case
The following sections of this template include questions intended to be used as guides to provide general, descriptive responses. Please remove this, and any subsequent lines that are not relevant or necessary for your final review.
Algorithms
- The package leans on lm, systemfit, and KFAS for estimation and algorithmic implementation, all of which are reliable and efficient libraries.
- The estimation procedures for models used, i.e. Kishor-Koenig model appears to be appropriately implemented using the KFAS library to perform efficient Kalman Smoothing, once parameters are estimated via SUR. Although I have not validated this in detail against the method in the original 2012 paper.
Testing
- Tests appear to be extensive and well thought out.
- Potentially one could add a parameter estimation test to the smoother functions. I.e. check the coverage of the KF implementation in a case where we know the generating process, however I think this goes beyond what would be expected here. The implementation looks correct to me, so I would not require further work here.
Visualisation (where appropriate)
- Visualisations are generally straightforward and appropriate in their presentation.
- The visualisations are mainly useful when considering revision analysis, and include appropriate labels and legends.
Package Design
- Is the package well designed for its intended purpose? Yes
- In relation to External Design: Do exported functions and the relationships between them enable general usage of the package? Yes
- In relation to External Design: Do exported functions best serve inter-operability with other packages? Yes
- In relation to Internal Design: Are algorithms implemented appropriately in terms of aspects such as efficiency, flexibility, generality, and accuracy? Yes (via KFAS/systemfit)
- In relation to Internal Design: Could ranges of admissible input structures, or form(s) of output structures, be expanded to enhance inter-operability with other packages? Not in an obvious manner. There is a lot of input checking to meet requirement.
- [x] Packaging guidelines: The package conforms to the rOpenSci packaging guidelines
Estimated hours spent reviewing: 3
- [ ] Should the author(s) deem it appropriate, I agree to be acknowledged as a package reviewer ("rev" role) in the package DESCRIPTION file.
Hi! I just wanted to check if there are any updates or anything needed from my side regarding the reviser package?
Yeah, sorry for lack of progress here @marcburri - seems like you're still waiting for review from @CompBioDan.
@rkillick Any updates from your side?
Chased via email.
Hello @rkillick and @mpadge I wanted to check in if you have any news on the remaining review? We would like to progress with the package sooner or later and would appreciate very much some feedback from that end. Is there anything we can do from our end? Best Philipp