Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fwildclusterboot submission #546

Open
11 of 13 tasks
s3alfisc opened this issue Jun 25, 2022 · 94 comments
Open
11 of 13 tasks

fwildclusterboot submission #546

s3alfisc opened this issue Jun 25, 2022 · 94 comments

Comments

@s3alfisc
Copy link

s3alfisc commented Jun 25, 2022

Submitting Author Name: Alexander Fischer
Submitting Author Github Handle: @s3alfisc
Other Package Authors Github handles: (comma separated, delete if none) @droodman
Repository: https://github.com/s3alfisc/fwildclusterboot/tree/master
Version submitted: 0.9.1 (in ropensci branch)
Submission type: Stats
Badge grade: silver
Editor: @helske
Reviewers: @meghapsimatrix, @markean

Due date for @meghapsimatrix: 2023-04-17

Due date for @markean: 2023-05-29
Archive: TBD
Version accepted: TBD
Language: en

  • Paste the full DESCRIPTION file inside a code block below:
Package: fwildclusterboot
Title: Fast Wild Cluster Bootstrap Inference for Linear Models
Version: 0.13.2
Authors@R: c(
    person("Alexander", "Fischer", , "[email protected]", role = c("aut", "cre")),
    person("David", "Roodman", role = "aut"),
    person("Achim", "Zeileis", role = "ctb",
           comment = "Author of included sandwich fragments"),
    person("Nathaniel", "Graham", role = "ctb",
           comment = "Contributor to included sandwich fragments"),
    person("Susanne", "Koell", role = "ctb",
           comment = "Contributor to included sandwich fragments"),
    person("Laurent", "Berge", role = "ctb",
           comment = "Author of included fixest fragments"),
    person("Sebastian", "Krantz", role = "ctb")
  )
Description: Implementation of fast algorithms for wild cluster bootstrap
    inference developed in 'Roodman et al' (2019, 'STATA' Journal,
    <doi:10.1177/1536867X19830877>) and 'MacKinnon et al' (2022), which
    makes it feasible to quickly calculate bootstrap test statistics based
    on a large number of bootstrap draws even for large samples.  Multiple
    bootstrap types as described in 'MacKinnon, Nielsen & Webb' (2022) are
    supported.  Further, 'multiway' clustering, regression weights,
    bootstrap weights, fixed effects and 'subcluster' bootstrapping are
    supported. Further, both restricted ('WCR') and unrestricted ('WCU')
    bootstrap are supported. Methods are provided for a variety of fitted
    models, including 'lm()', 'feols()' (from package 'fixest') and
    'felm()' (from package 'lfe').  Additionally implements a
    'heteroskedasticity-robust' ('HC1') wild bootstrap.  Last, the package
    provides an R binding to 'WildBootTests.jl', which provides additional
    speed gains and functionality, including the 'WRE' bootstrap for
    instrumental variable models (based on models of type 'ivreg()' from
    package 'ivreg') and hypotheses with q > 1.
License: GPL-3
URL: https://s3alfisc.github.io/fwildclusterboot/
BugReports: https://github.com/s3alfisc/fwildclusterboot/issues/
Imports:
    collapse,
    dqrng,
    dreamerr,
    Formula,
    generics,
    gtools,
    JuliaConnectoR,
    MASS,
    Matrix,
    Rcpp,
    rlang,
    summclust
Suggests:
    bench,
    broom,
    clubSandwich,
    covr,
    data.table,
    fabricatr,
    fixest,
    gt,
    ivreg,
    knitr,
    lfe,
    lmtest,
    modelsummary,
    rmarkdown,
    sandwich,
    testthat (>= 3.0.0),
    tibble
LinkingTo:
    Rcpp,
    RcppArmadillo,
    RcppEigen
VignetteBuilder:
    knitr
Config/testthat/edition: 3
Encoding: UTF-8
Language: en-US
LazyData: true
Roxygen: list(markdown = TRUE, roclets = c ("namespace", "rd",
    "srr::srr_stats_roclet"))
RoxygenNote: 7.2.1
SystemRequirements: Version Requirements to run the wild bootstrap through
    Julia - Julia (>= 1.8), WildBootTests.jl (>=0.9).  Julia is
    downloadable via the official Julia website
    (https://julialang.org/downloads/), WildBootTests.jl via Julia's
    package manager (https://docs.julialang.org/en/v1/stdlib/Pkg/) or its
    github repository (https://github.com/droodman/WildBootTests.jl)

Pre-submission Inquiry

General Information

  • Who is the target audience and what are scientific applications of this package?
    The target audience is academic social scientists (economics, political science, sociology). fwildclusterboot should be used whenever regression errors are "clustered" into few groups, in which case inference based on asymptotic approximations might fail.

  • 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.

fwildclusterboot is the first R-implementation of the 'fast' wild cluster bootstrap algorithm outlined in Roodman et al (2019, Stata Journal) and implemented in Stata via the boottest package. Recently, @droodman has also ported the algorithm to Julia. Besides implementing the "fast & wild" algorithm in native R, fwildclusterboot also allows to call WildBootTests.jl via the JuliaConnectoR package. The "fast" algorithm is significantly faster than any other R-implementations of the wild cluster bootstrap to date (e.g. see here).

Yes.

Badging

At a minimal level, I strive for a silver badge.

  1. Compliance with a good number of standards; 2) I strive for compliance with all standards regarding a) documentation and b) testing.

Technical checks

Confirm each of the following by checking the box.

pkgcheck::pkgcheck() currently fails on my machine with the following error message: "Error in normalizePath(path.expand(path), winslash, mustWork).: path[1]="C:/.../fwildclusterboot/NA" The system cannot find the specified file. It also fails on github-actions on the ropensci branch.

Also, note that the CMD checks currently fail on github actions as the gtools package has been orphaned - I am monitoring the situation, but it looks like the package will not be removed from CRAN.

This package:

Publication options

  • Do you intend for this package to go on CRAN? The package is already on CRAN. In case major changes are suggested during the review, I would consider integrating them into a successor package (e.g. 'fwildclusterboot2').
  • Do you intend for this package to go on Bioconductor?

Code of conduct

@ropensci-review-bot
Copy link
Collaborator

Thanks for submitting to rOpenSci, our editors and @ropensci-review-bot will reply soon. Type @ropensci-review-bot help for help.

@ropensci-review-bot
Copy link
Collaborator

Error (500). The editorcheck service is currently unavailable

@emilyriederer
Copy link

@ropensci-review-bot check package

@ropensci-review-bot
Copy link
Collaborator

Thanks, about to send the query.

@ropensci-review-bot
Copy link
Collaborator

Error (500). The editorcheck service is currently unavailable

@s3alfisc
Copy link
Author

Hi @emilyriederer, is it possible that the editor check bot fails because I have submitted the package via a side-branch? @mpadge mentioned in the pre-submission that some of the automated tools might fail in this case, but suggested to nevertheless submit via a non default branch for testing purposes.

@emilyriederer
Copy link

Looks like @mpadge beat me to this but it appears we have our answer. Marc, I assume we shall wait to proceed until this issue is closed? Thanks!

@mpadge
Copy link
Member

mpadge commented Jun 28, 2022

Thanks @emilyriederer, because of this submission we now have an ability to process packages with non-default review branches. You (or indeed @s3alfisc) may call check package at any time. (But I've noted to @s3alfisc elsewhere that R CMD check currently fails on his package because our check systems don't have Julia installed.)

@s3alfisc
Copy link
Author

Thanks @mpadge - it looks like I have some work to do :) I will trigger check page once I believe I have managed to align the package with all pkgcheck requirements!

@s3alfisc
Copy link
Author

@ropensci-review-bot check package

@ropensci-review-bot
Copy link
Collaborator

Thanks, about to send the query.

@ropensci-review-bot
Copy link
Collaborator

🚀

Editor check started

👋

@ropensci-review-bot
Copy link
Collaborator

Checks for fwildclusterboot (v0.10)

git hash: 274030f8

  • ✔️ Package is already on CRAN.
  • ✔️ has a 'codemeta.json' file.
  • ✔️ has a 'contributing' file.
  • ✔️ uses 'roxygen2'.
  • ✔️ 'DESCRIPTION' has a URL field.
  • ✔️ 'DESCRIPTION' has a BugReports field.
  • ✔️ Package has at least one HTML vignette
  • ✖️ These functions do not have examples: [check_mboottest_args_plus, check_r_lean, cpp_get_nb_threads, eigenMapMatMult, model_matrix, nobs.boottest, teststat].
  • ✖️ Function names are duplicated in other packages
  • ✔️ Package has continuous integration checks.
  • ✖️ Package coverage failed
  • ✖️ R CMD check found 1 error.
  • ✔️ R CMD check found no warnings.

Important: All failing checks above must be addressed prior to proceeding

Package License: GPL-3


1. rOpenSci Statistical Standards (srr package)

This package is in the following category:

  • Regression and Supervised Learning

✔️ All applicable standards [v0.1.0] have been documented in this package (70 complied with; 46 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 385
internal fwildclusterboot 104
internal stats 80
internal utils 8
internal graphics 3
internal compiler 1
imports collapse 14
imports dreamerr 10
imports generics 5
imports dqrng 5
imports Matrix 3
imports Matrix.utils 3
imports JuliaConnectoR 1
imports Formula NA
imports Rcpp NA
suggests fabricatr 6
suggests fixest NA
suggests lfe NA
suggests ivreg NA
suggests clubSandwich NA
suggests sandwich NA
suggests lmtest NA
suggests data.table NA
suggests covr NA
suggests knitr NA
suggests rmarkdown NA
suggests broom NA
suggests modelsummary NA
suggests bench NA
suggests testthat NA
suggests tibble NA
linking_to Rcpp NA
linking_to RcppArmadillo NA
linking_to RcppEigen 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

length (36), call (31), list (28), c (16), lapply (13), vapply (13), as.vector (11), names (11), t (11), drop (10), stop (10), unique (10), rep (9), ifelse (8), paste0 (8), data.frame (7), match.call (7), which (7), as.matrix (6), ncol (6), nrow (6), replace (6), sqrt (6), mode (5), seq_along (5), vector (5), as.numeric (4), for (4), is.null (4), mean (4), Reduce (4), sample (4), sum (4), switch (4), tcrossprod (4), abs (3), col (3), colnames (3), environment (3), q (3), as.integer (2), attr (2), crossprod (2), getOption (2), if (2), loadedNamespaces (2), min (2), norm (2), paste (2), Recall (2), solve (2), suppressWarnings (2), append (1), as.character (1), as.factor (1), cbind (1), class (1), do.call (1), exp (1), integer (1), is.na (1), is.numeric (1), logical (1), max (1), message (1), sample.int (1), seq (1), sort (1), Sys.getenv (1), try (1), unlist (1)

fwildclusterboot

get_ssc_julia (8), check_set_full_enumeration (7), set_seed (7), teststat (6), boot_algo_julia (5), crosstab (4), get_cluster (4), model_matrix (4), boot_algo2 (3), cpp_get_nb_threads (3), eigenMapMatMult (3), get_bootstrap_pvalue (3), get_ssc (3), demean_fe (2), gtools_permutations (2), preprocess2.felm (2), preprocess2.fixest (2), preprocess2.lm (2), transform_fe (2), boottest (1), boottest.felm (1), boottest.fixest (1), boottest.ivreg (1), boottest.lm (1), check_boottest_args_plus (1), check_mboottest_args_plus (1), check_params_in_model (1), check_r_lean (1), check_set_nthreads (1), confint.boottest (1), crosstab4 (1), get_seed (1), get_start_vals (1), getBoottest_boot_algo (1), getBoottest_nthreads (1), glance.boottest (1), invert_p_val (1), mboottest (1), mboottest.felm (1), mboottest.fixest (1), mboottest.lm (1), model_matrix.felm (1), model_matrix.lm (1), nobs.boottest (1), nobs.mboottest (1), p_val_null2 (1), p_val_null2_x (1), p_val_null2_x_sign_level (1), preprocess2.ivreg (1), to_integer (1), wildboottestHC (1)

stats

weights (24), model.matrix (12), formula (8), coef (6), na.omit (6), model.frame (5), nobs (4), aggregate (3), model.response (3), na.exclude (3), reformulate (2), na.action (1), na.pass (1), rlnorm (1), update (1)

collapse

fsum (7), GRP (4), qF (3)

dreamerr

validate_dots (10)

utils

data (7), combn (1)

fabricatr

draw_binary (2), draw_normal_icc (2), draw_ordered (1), fabricate (1)

dqrng

dqsample (4), dqset.seed (1)

generics

tidy (4), glance (1)

graphics

abline (3)

Matrix

t (2), Diagonal (1)

Matrix.utils

aggregate.Matrix (3)

compiler

cmpfun (1)

JuliaConnectoR

juliaImport (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 C++ (8% in 2 files) and R (92% in 28 files)
  • 2 authors
  • 2 vignettes
  • 1 internal data file
  • 9 imported packages
  • 33 exported functions (median 8 lines of code)
  • 121 non-exported functions in R (median 26 lines of code)
  • 13 R functions (median 17 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 28 88.2
files_src 2 79.1
files_vignettes 2 85.7
files_tests 17 95.3
loc_R 3873 93.2
loc_src 325 37.1
loc_vignettes 436 74.7
loc_tests 5291 98.3 TRUE
num_vignettes 2 89.2
data_size_total 14024 72.7
data_size_median 14024 81.0
n_fns_r 154 85.7
n_fns_r_exported 33 80.4
n_fns_r_not_exported 121 87.1
n_fns_src 13 35.0
n_fns_per_file_r 3 55.2
n_fns_per_file_src 6 61.3
num_params_per_fn 2 11.9
loc_per_fn_r 23 66.0
loc_per_fn_r_exp 8 16.3
loc_per_fn_r_not_exp 26 73.5
loc_per_fn_src 17 59.6
rel_whitespace_R 18 92.7
rel_whitespace_src 30 48.8
rel_whitespace_vignettes 43 83.2
rel_whitespace_tests 11 96.1 TRUE
doclines_per_fn_exp 29 31.0
doclines_per_fn_not_exp 0 0.0 TRUE
fn_call_network_size 132 83.4

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

R-CMD-check

GitHub Workflow Results

id name conclusion sha run_number date
2828472276 pages build and deployment success b71a32 155 2022-08-09
2827237407 pkgcheck failure 274030 24 2022-08-09
2862000970 pkgdown failure 85eba8 101 2022-08-15
2862000975 R-CMD-check failure 85eba8 458 2022-08-15
2862000968 test-coverage failure 85eba8 435 2022-08-15

3b. goodpractice results

R CMD check with rcmdcheck

R CMD check generated the following error:

  1. checking tests ...
    Running ‘testthat.R’
    ERROR
    Running the tests in ‘tests/testthat.R’ failed.
    Last 13 lines of output:
    1. ├─fwildclusterboot::boottest(...) at test_fixest_sugar.R:44:2
    2. └─fwildclusterboot:::boottest.fixest(...)
    3. └─fwildclusterboot:::preprocess2.fixest(...)
    4. └─fwildclusterboot:::get_cluster(...)
      
    5.   ├─stats::model.frame(clustid_fml, cluster_tmp, na.action = na.pass)
      
    6.   └─stats::model.frame.default(clustid_fml, cluster_tmp, na.action = na.pass)
      
    7.     ├─base::as.data.frame(data)
      
    8.     └─base::as.data.frame.default(data)
      

── Error (test_multicollinearity.R:16:3): test multicollinearity ───────────────
Error in feols(Y ~ X1 + X2, data = data): could not find function "feols"

[ FAIL 2 | WARN 4 | SKIP 15 | PASS 59 ]
Error: Test failures
Execution halted

R CMD check generated the following notes:

  1. checking installed package size ... NOTE
    installed size is 7.0Mb
    sub-directories of 1Mb or more:
    libs 5.9Mb
  2. checking R code for possible problems ... NOTE
    mboottest.lm: no visible binding for global variable ‘teststat_boot’
    Undefined global functions or variables:
    teststat_boot

R CMD check generated the following test_fail:

  1. library(testthat)

library(fwildclusterboot)

test_check("fwildclusterboot")
The Julia environment variable 'JULIA_BINDIR' could not be found.Therefore, all tests that involve 'WildBootTests.jl' will be skipped.
Error in i(treatment, ideology1) : could not find function "i"
test_tidy.R, q = 1 skipped as 'JULIA_BINDIR' not found.
test_tidy.R, q > 1 skipped as 'JULIA_BINDIR' not found.
Loading required namespace: data.table
test-error_warning.R with q = 1 skipped as JULIA_BINDIR not found.
test-error_warning.R with q > 1 skipped as JULIA_BINDIR not found.
Loading required package: Matrix
Error in post1 | SEclusters :
operations are possible only for numeric, logical or complex types
Error in post1 | 0 | 0 | SEclusters :
operations are possible only for numeric, logical or complex types
Error in post1 | Utility_state :
operations are possible only for numeric, logical or complex types
Error in post1 | SEclusters :
operations are possible only for numeric, logical or complex types
Error in post1 | 0 | 0 | SEclusters :
operations are possible only for numeric, logical or complex types
Error in post1 | Utility_state :
operations are possible only for numeric, logical or complex types
Error in post1 | SEclusters :
operations are possible only for numeric, logical or complex types
Error in post1 | 0 | 0 | SEclusters :
operations are possible only for numeric, logical or complex types
Error in post1 | Utility_state :
operations are possible only for numeric, logical or complex types
test-global_vars.R skipped as JULIA_BINDR not found.
test-method_equivalence.R I skipped as JULIA_BINDR not found.
test-method_equivalence.R II skipped as JULIA_BINDR not found.
test-r-vs-julia.R skipped as JULIA_BINDIR not found.
test-seed.R skipped as JULIA_BINDR not found.
test-tstat_equivalence.R I skipped as JULIA_BINDR not found.
test-tstat_equivalence.R II skipped as JULIA_BINDR not found.
test-stat_equivalence.R III skipped as JULIA_BINDR not found.
Error in Q1_immigration + Q2_defense :
non-numeric argument to binary operator
Error in Q1_immigration + Q2_defense :
non-numeric argument to binary operator
[ FAIL 2 | WARN 4 | SKIP 15 | PASS 59 ]

══ Skipped tests ═══════════════════════════════════════════════════════════════
• empty test (15)

══ Warnings ════════════════════════════════════════════════════════════════════
── Warning (test-uncategorized.R:44:3): uncategorized tests ────────────────────
There are only 64 unique draws from the rademacher distribution for 6 bootstrap clusters. Therefore, B = 64 with full enumeration. Consider using webb weights instead.
Further, note that under full enumeration and with B = 64 bootstrap draws, only 2^(#clusters - 1) = 32 distinct t-statistics and p-values can be computed. For a
more thorough discussion, see Webb Reworking wild bootstrap based inference for clustered errors (2013).
Backtrace:

  1. fwildclusterboot::boottest(...)
    at test-uncategorized.R:44:2
  2. fwildclusterboot:::boottest.fixest(...)
  3. fwildclusterboot:::check_set_full_enumeration(...)
    ── Warning (test-uncategorized.R:52:3): uncategorized tests ────────────────────
    There are only 64 unique draws from the rademacher distribution for 6 bootstrap clusters. Therefore, B = 64 with full enumeration. Consider using webb weights instead.
    Further, note that under full enumeration and with B = 64 bootstrap draws, only 2^(#clusters - 1) = 32 distinct t-statistics and p-values can be computed. For a
    more thorough discussion, see Webb Reworking wild bootstrap based inference for clustered errors (2013).
    Backtrace:
  4. fwildclusterboot::boottest(...)
    at test-uncategorized.R:52:2
  5. fwildclusterboot:::boottest.fixest(...)
  6. fwildclusterboot:::check_set_full_enumeration(...)
    ── Warning (test-uncategorized.R:60:3): uncategorized tests ────────────────────
    There are only 64 unique draws from the rademacher distribution for 6 bootstrap clusters. Therefore, B = 64 with full enumeration. Consider using webb weights instead.
    Further, note that under full enumeration and with B = 64 bootstrap draws, only 2^(#clusters - 1) = 32 distinct t-statistics and p-values can be computed. For a
    more thorough discussion, see Webb Reworking wild bootstrap based inference for clustered errors (2013).
    Backtrace:
  7. fwildclusterboot::boottest(...)
    at test-uncategorized.R:60:2
  8. fwildclusterboot:::boottest.fixest(...)
  9. fwildclusterboot:::check_set_full_enumeration(...)
    ── Warning (test-uncategorized.R:68:3): uncategorized tests ────────────────────
    There are only 64 unique draws from the rademacher distribution for 6 bootstrap clusters. Therefore, B = 64 with full enumeration. Consider using webb weights instead.
    Further, note that under full enumeration and with B = 64 bootstrap draws, only 2^(#clusters - 1) = 32 distinct t-statistics and p-values can be computed. For a
    more thorough discussion, see Webb Reworking wild bootstrap based inference for clustered errors (2013).
    Backtrace:
  10. fwildclusterboot::boottest(...)
    at test-uncategorized.R:68:2
  11. fwildclusterboot:::boottest.fixest(...)
  12. fwildclusterboot:::check_set_full_enumeration(...)

══ Failed tests ════════════════════════════════════════════════════════════════
── Error (test_fixest_sugar.R:44:3): test fixest formula sugar ─────────────────
Error in as.data.frame.default(data): cannot coerce class '"try-error"' to a data.frame
Backtrace:

  1. ├─fwildclusterboot::boottest(...) at test_fixest_sugar.R:44:2
  2. └─fwildclusterboot:::boottest.fixest(...)
  3. └─fwildclusterboot:::preprocess2.fixest(...)
  4. └─fwildclusterboot:::get_cluster(...)
    
  5.   ├─stats::model.frame(clustid_fml, cluster_tmp, na.action = na.pass)
    
  6.   └─stats::model.frame.default(clustid_fml, cluster_tmp, na.action = na.pass)
    
  7.     ├─base::as.data.frame(data)
    
  8.     └─base::as.data.frame.default(data)
    

── Error (test_multicollinearity.R:16:3): test multicollinearity ───────────────
Error in feols(Y ~ X1 + X2, data = data): could not find function "feols"

[ FAIL 2 | WARN 4 | SKIP 15 | PASS 59 ]
Error: Test failures
Execution halted

R CMD check generated the following check_fails:

  1. rcmdcheck_undefined_globals
  2. rcmdcheck_tests_pass
  3. rcmdcheck_reasonable_installed_size

Test coverage with covr

ERROR: Test Coverage Failed

Cyclocomplexity with cyclocomp

The following functions have cyclocomplexity >= 15:

function cyclocomplexity
get_cluster 45
gtools_permutations 34
boot_algo_julia 20
boot_algo2 17
getBoottest_nthreads 16
check_boottest_args_plus 15

Static code analyses with lintr

lintr found the following 35 potential issues:

message number of times
Avoid library() and require() calls in packages 12
Lines should not be more than 80 characters. 23


5. Other Checks

Details of other checks (click to open)

✖️ The following 2 function names are duplicated in other packages:

    • model_matrix from bayesbr, hardhat, mcmcsae, modelr, ZIprop
    • pval from CIPerm, dostats, dostats, GUIDE, learnstats, molic, mosaic, overlapptest, RPtests, timereg


Package Versions

package version
pkgstats 0.1.1.20
pkgcheck 0.1.0.3
srr 0.0.1.176


Editor-in-Chief Instructions:

Processing may not proceed until the items marked with ✖️ have been resolved.

@s3alfisc
Copy link
Author

s3alfisc commented Aug 17, 2022

Hi, I wanted to give some feedback on the state of the package:

  • Over the last weeks, I have integrated new bootstrap variants to the package as recently suggested in MacKinnon, Nielsen & Webb. The new variants seem to perform even better than "old" variants implemented in fwildclusterboot and are also relatively fast to compute.
  • I have spent quite some time on trying to make the package compliant with all pkgchecks - unfortunately, I still fail to run the entire process locally, so please apologize if it will take me one or two more attempts to fully align the package. When running pkgcheck::pkgcheck(), I usually get the following error Error in normalizePath(path.expand(path), winslash, mustWork) : path[1]="C:\Users\...\fwildclusterboot/NA": The system cannot find the file specified. I also cannot get the pkgcheck github action to run with fwildclusterboot. For another package of mine, the pkgcheck action runs flawlessly .
  • As suggested by @mpadge , I have added a clause that will prohibit that unit tests will run if Julia is not installed. Unfortunately, this has affected the CI statistics of the package by disabling any Julia based testing on CI. I am currently investigating this - the computed coverage of 56% does not look very good & is quite a bit higher when adding all tests against Julia (it should be around 85%).

@s3alfisc
Copy link
Author

@ropensci-review-bot check package

@ropensci-review-bot
Copy link
Collaborator

Thanks, about to send the query.

@ropensci-review-bot
Copy link
Collaborator

🚀

Editor check started

👋

@ropensci-review-bot
Copy link
Collaborator

Checks for fwildclusterboot (v0.11)

git hash: 00c38b8d

  • ✔️ Package is already on CRAN.
  • ✔️ has a 'codemeta.json' file.
  • ✔️ has a 'contributing' file.
  • ✖️ The following functions have no documented return values: [boot_ssc, pval, teststat]
  • ✔️ uses 'roxygen2'.
  • ✔️ 'DESCRIPTION' has a URL field.
  • ✔️ 'DESCRIPTION' has a BugReports field.
  • ✔️ Package has at least one HTML vignette
  • ✔️ All functions have examples.
  • ✖️ Function names are duplicated in other packages
  • ✔️ Package has continuous integration checks.
  • ✖️ Package coverage failed
  • ✖️ R CMD check found 1 error.
  • ✔️ R CMD check found no warnings.

Important: All failing checks above must be addressed prior to proceeding

Package License: GPL-3


1. rOpenSci Statistical Standards (srr package)

This package is in the following category:

  • Regression and Supervised Learning

✔️ All applicable standards [v0.1.0] have been documented in this package (70 complied with; 46 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 441
internal fwildclusterboot 113
internal stats 83
internal utils 8
internal graphics 3
internal compiler 1
imports collapse 14
imports dreamerr 10
imports generics 5
imports dqrng 5
imports MASS 4
imports Matrix 3
imports Matrix.utils 3
imports JuliaConnectoR 1
imports summclust 1
imports sandwich 1
imports Formula NA
imports Rcpp NA
suggests fabricatr 6
suggests fixest NA
suggests lfe NA
suggests ivreg NA
suggests clubSandwich NA
suggests lmtest NA
suggests data.table NA
suggests covr NA
suggests knitr NA
suggests rmarkdown NA
suggests broom NA
suggests modelsummary NA
suggests bench NA
suggests testthat NA
suggests tibble NA
linking_to Rcpp NA
linking_to RcppArmadillo NA
linking_to RcppEigen 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

length (40), call (31), list (30), lapply (20), c (16), t (15), vapply (13), as.vector (12), drop (12), names (12), unique (12), stop (10), ifelse (9), Reduce (9), rep (9), paste0 (8), which (8), data.frame (7), match.call (7), mode (7), nrow (7), sqrt (7), vector (7), as.matrix (6), for (6), ncol (6), replace (6), switch (6), seq_along (5), as.numeric (4), crossprod (4), is.null (4), mean (4), sample (4), solve (4), sum (4), tcrossprod (4), abs (3), col (3), colnames (3), environment (3), q (3), as.factor (2), as.integer (2), attr (2), dim (2), getOption (2), if (2), loadedNamespaces (2), matrix (2), min (2), norm (2), paste (2), Recall (2), split (2), suppressWarnings (2), append (1), as.character (1), cbind (1), class (1), colSums (1), diag (1), do.call (1), eval (1), exp (1), integer (1), is.na (1), is.numeric (1), logical (1), max (1), message (1), row (1), sample.int (1), seq (1), sort (1), Sys.getenv (1), try (1), tryCatch (1), unlist (1)

fwildclusterboot

get_ssc_julia (8), check_set_full_enumeration (7), set_seed (7), teststat (6), boot_algo_julia (5), crosstab (4), get_bootstrap_pvalue (4), get_cluster (4), model_matrix (4), boot_algo2 (3), cpp_get_nb_threads (3), eigenMapMatMult (3), get_ssc (3), get_weights (3), matrix_split (3), demean_fe (2), get_scores (2), gtools_permutations (2), preprocess2.felm (2), preprocess2.fixest (2), preprocess2.lm (2), transform_fe (2), boot_algo3 (1), boottest (1), boottest.felm (1), boottest.fixest (1), boottest.ivreg (1), boottest.lm (1), check_boot_algo3 (1), check_boottest_args_plus (1), check_mboottest_args_plus (1), check_params_in_model (1), check_r_lean (1), check_set_nthreads (1), confint.boottest (1), crosstab4 (1), get_seed (1), get_start_vals (1), getBoottest_boot_algo (1), getBoottest_nthreads (1), glance.boottest (1), invert_p_val (1), is_juliaconnector_prepared (1), mboottest (1), mboottest.felm (1), mboottest.fixest (1), mboottest.lm (1), model_matrix.felm (1), p_val_null2 (1), p_val_null2_x (1), p_val_null2_x_sign_level (1), preprocess2.ivreg (1), to_integer (1), wildboottestHC (1)

stats

weights (25), model.matrix (12), formula (8), coef (6), na.omit (6), model.frame (5), nobs (4), aggregate (3), model.response (3), na.exclude (3), reformulate (2), vcov (2), na.action (1), na.pass (1), rlnorm (1), update (1)

collapse

fsum (7), GRP (4), qF (3)

dreamerr

validate_dots (10)

utils

data (7), combn (1)

fabricatr

draw_binary (2), draw_normal_icc (2), draw_ordered (1), fabricate (1)

dqrng

dqsample (4), dqset.seed (1)

generics

tidy (4), glance (1)

MASS

ginv (4)

graphics

abline (3)

Matrix

t (2), Diagonal (1)

Matrix.utils

aggregate.Matrix (3)

compiler

cmpfun (1)

JuliaConnectoR

juliaImport (1)

sandwich

vcovCL (1)

summclust

vcov_CR3J (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 C++ (7% in 3 files) and R (93% in 32 files)
  • 2 authors
  • 3 vignettes
  • 1 internal data file
  • 12 imported packages
  • 28 exported functions (median 9 lines of code)
  • 140 non-exported functions in R (median 24 lines of code)
  • 14 R functions (median 14 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 32 90.5
files_src 3 84.3
files_vignettes 3 92.4
files_tests 17 95.3
loc_R 4252 94.1
loc_src 341 37.9
loc_vignettes 496 77.9
loc_tests 5516 98.5 TRUE
num_vignettes 3 94.2
data_size_total 14024 72.7
data_size_median 14024 81.0
n_fns_r 168 87.0
n_fns_r_exported 28 76.4
n_fns_r_not_exported 140 89.2
n_fns_src 14 36.7
n_fns_per_file_r 3 53.1
n_fns_per_file_src 5 47.8
num_params_per_fn 2 11.9
loc_per_fn_r 23 66.0
loc_per_fn_r_exp 9 19.2
loc_per_fn_r_not_exp 24 70.4
loc_per_fn_src 14 46.6
rel_whitespace_R 19 94.1
rel_whitespace_src 33 52.2
rel_whitespace_vignettes 41 84.9
rel_whitespace_tests 12 96.6 TRUE
doclines_per_fn_exp 30 32.9
doclines_per_fn_not_exp 0 0.0 TRUE
fn_call_network_size 141 84.4

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

R-CMD-check
pkgcheck

GitHub Workflow Results

id name conclusion sha run_number date
2899111163 pages build and deployment success de3182 176 2022-08-21
2921823435 pkgcheck failure 00c38b 41 2022-08-24
2899087820 pkgdown success aba1d7 124 2022-08-21
2921823433 R-CMD-check success 00c38b 484 2022-08-24
2899015892 test-coverage success aba1d7 457 2022-08-21

3b. goodpractice results

R CMD check with rcmdcheck

R CMD check generated the following error:

  1. checking tests ...
    Running ‘testthat.R’
    ERROR
    Running the tests in ‘tests/testthat.R’ failed.
    Last 13 lines of output:
    1. ├─fwildclusterboot::boottest(...) at test-new-bootstrap-variants.R:243:2
    2. └─fwildclusterboot:::boottest.lm(...)
    3. └─fwildclusterboot:::boot_algo_julia(...)
    4. └─JuliaConnectoR::juliaEval("using WildBootTests")
      
    5.   └─JuliaConnectoR::juliaCall("RConnector.mainevalcmd", expr)
      
    6.     ├─base::tryCatch(...)
      
    7.     │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
      
    8.     │   └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
      
    9.     │     └─base (local) doTryCatch(return(expr), name, parentenv, handler)
      
    10.     └─JuliaConnectoR:::doCallJulia(funName, jlargs)
      
    11.       └─JuliaConnectoR:::handleCallbacksAndOutput()
      

[ FAIL 1 | WARN 6 | SKIP 14 | PASS 75 ]
Error: Test failures
Execution halted

R CMD check generated the following notes:

  1. checking installed package size ... NOTE
    installed size is 7.5Mb
    sub-directories of 1Mb or more:
    libs 6.5Mb
  2. checking R code for possible problems ... NOTE
    boot_algo3: no visible binding for '<<-' assignment to ‘beta_2g_tilde’

R CMD check generated the following test_fail:

  1. library(testthat)

library(fwildclusterboot)

test_check("fwildclusterboot")
Loading required namespace: fixest
The variable 'X2' has been removed because of collinearity (see $collin.var).
The Julia environment variable 'JULIA_BINDIR' could not be found.Therefore, all tests that involve 'WildBootTests.jl' will be skipped.
test_tidy.R, q = 1 skipped as 'JULIA_BINDIR' not found.
The Julia environment variable 'JULIA_BINDIR' could not be found.Therefore, all tests that involve 'WildBootTests.jl' will be skipped.
test_tidy.R, q > 1 skipped as 'JULIA_BINDIR' not found.
Loading required namespace: data.table
The Julia environment variable 'JULIA_BINDIR' could not be found.Therefore, all tests that involve 'WildBootTests.jl' will be skipped.
test-error_warning.R with q = 1 skipped as JULIA_BINDIR not found.
Loading required namespace: ivreg
Loading required namespace: clubSandwich
The Julia environment variable 'JULIA_BINDIR' could not be found.Therefore, all tests that involve 'WildBootTests.jl' will be skipped.
test-error_warning.R with q > 1 skipped as JULIA_BINDIR not found.
Error in post1 | SEclusters :
operations are possible only for numeric, logical or complex types
Error in post1 | 0 | 0 | SEclusters :
operations are possible only for numeric, logical or complex types
Error in post1 | Utility_state :
operations are possible only for numeric, logical or complex types
Error in post1 | SEclusters :
operations are possible only for numeric, logical or complex types
Error in post1 | 0 | 0 | SEclusters :
operations are possible only for numeric, logical or complex types
Error in post1 | Utility_state :
operations are possible only for numeric, logical or complex types
Error in post1 | SEclusters :
operations are possible only for numeric, logical or complex types
Error in post1 | 0 | 0 | SEclusters :
operations are possible only for numeric, logical or complex types
Error in post1 | Utility_state :
operations are possible only for numeric, logical or complex types
The Julia environment variable 'JULIA_BINDIR' could not be found.Therefore, all tests that involve 'WildBootTests.jl' will be skipped.
The Julia environment variable 'JULIA_BINDIR' could not be found.Therefore, all tests that involve 'WildBootTests.jl' will be skipped.
test-global_vars.R skipped as JULIA_BINDR not found.
The Julia environment variable 'JULIA_BINDIR' could not be found.Therefore, all tests that involve 'WildBootTests.jl' will be skipped.
test-method_equivalence.R I skipped as JULIA_BINDR not found.
The Julia environment variable 'JULIA_BINDIR' could not be found.Therefore, all tests that involve 'WildBootTests.jl' will be skipped.
test-method_equivalence.R II skipped as JULIA_BINDR not found.
Starting Julia ...
test-r-vs-julia.R skipped as JULIA_BINDIR not found.
The Julia environment variable 'JULIA_BINDIR' could not be found.Therefore, all tests that involve 'WildBootTests.jl' will be skipped.
test-seed.R skipped as JULIA_BINDR not found.
The Julia environment variable 'JULIA_BINDIR' could not be found.Therefore, all tests that involve 'WildBootTests.jl' will be skipped.
test-tstat_equivalence.R I skipped as JULIA_BINDR not found.
The Julia environment variable 'JULIA_BINDIR' could not be found.Therefore, all tests that involve 'WildBootTests.jl' will be skipped.
test-tstat_equivalence.R II skipped as JULIA_BINDR not found.
The Julia environment variable 'JULIA_BINDIR' could not be found.Therefore, all tests that involve 'WildBootTests.jl' will be skipped.
test-stat_equivalence.R III skipped as JULIA_BINDR not found.
Error in Q1_immigration + Q2_defense :
non-numeric argument to binary operator
Error in Q1_immigration + Q2_defense :
non-numeric argument to binary operator
[ FAIL 1 | WARN 6 | SKIP 14 | PASS 75 ]

══ Skipped tests ═══════════════════════════════════════════════════════════════
• empty test (14)

══ Warnings ════════════════════════════════════════════════════════════════════
── Warning (test_multicollinearity.R:17:3): test multicollinearity ─────────────
the matrix is either rank-deficient or indefinite
Backtrace:

  1. lfe::felm(Y ~ X1 + X2, data = data)
    at test_multicollinearity.R:17:2
  2. lfe:::felm.mm(...)
  3. lfe:::newols(...)
  4. lfe:::cholx(cp)
  5. base::chol.default(mat, pivot = TRUE, tol = tol)
    ── Warning (test-new-bootstrap-variants.R:243:3): variants 31 R vs Julia ───────
    There are only 1024 unique draws from the rademacher distribution for 10 bootstrap clusters. Therefore, B = 1024 with full enumeration. Consider using webb weights instead.
    Further, note that under full enumeration and with B = 1024 bootstrap draws, only 2^(#clusters - 1) = 512 distinct t-statistics and p-values can be computed. For a
    more thorough discussion, see Webb Reworking wild bootstrap based inference for clustered errors (2013).
    Backtrace:
  6. fwildclusterboot::boottest(...)
    at test-new-bootstrap-variants.R:243:2
  7. fwildclusterboot:::boottest.lm(...)
  8. fwildclusterboot:::check_set_full_enumeration(...)
    ── Warning (test-uncategorized.R:45:3): uncategorized tests ────────────────────
    There are only 64 unique draws from the rademacher distribution for 6 bootstrap clusters. Therefore, B = 64 with full enumeration. Consider using webb weights instead.
    Further, note that under full enumeration and with B = 64 bootstrap draws, only 2^(#clusters - 1) = 32 distinct t-statistics and p-values can be computed. For a
    more thorough discussion, see Webb Reworking wild bootstrap based inference for clustered errors (2013).
    Backtrace:
  9. fwildclusterboot::boottest(...)
    at test-uncategorized.R:45:2
  10. fwildclusterboot:::boottest.fixest(...)
  11. fwildclusterboot:::check_set_full_enumeration(...)
    ── Warning (test-uncategorized.R:53:3): uncategorized tests ────────────────────
    There are only 64 unique draws from the rademacher distribution for 6 bootstrap clusters. Therefore, B = 64 with full enumeration. Consider using webb weights instead.
    Further, note that under full enumeration and with B = 64 bootstrap draws, only 2^(#clusters - 1) = 32 distinct t-statistics and p-values can be computed. For a
    more thorough discussion, see Webb Reworking wild bootstrap based inference for clustered errors (2013).
    Backtrace:
  12. fwildclusterboot::boottest(...)
    at test-uncategorized.R:53:2
  13. fwildclusterboot:::boottest.fixest(...)
  14. fwildclusterboot:::check_set_full_enumeration(...)
    ── Warning (test-uncategorized.R:61:3): uncategorized tests ────────────────────
    There are only 64 unique draws from the rademacher distribution for 6 bootstrap clusters. Therefore, B = 64 with full enumeration. Consider using webb weights instead.
    Further, note that under full enumeration and with B = 64 bootstrap draws, only 2^(#clusters - 1) = 32 distinct t-statistics and p-values can be computed. For a
    more thorough discussion, see Webb Reworking wild bootstrap based inference for clustered errors (2013).
    Backtrace:
  15. fwildclusterboot::boottest(...)
    at test-uncategorized.R:61:2
  16. fwildclusterboot:::boottest.fixest(...)
  17. fwildclusterboot:::check_set_full_enumeration(...)
    ── Warning (test-uncategorized.R:69:3): uncategorized tests ────────────────────
    There are only 64 unique draws from the rademacher distribution for 6 bootstrap clusters. Therefore, B = 64 with full enumeration. Consider using webb weights instead.
    Further, note that under full enumeration and with B = 64 bootstrap draws, only 2^(#clusters - 1) = 32 distinct t-statistics and p-values can be computed. For a
    more thorough discussion, see Webb Reworking wild bootstrap based inference for clustered errors (2013).
    Backtrace:
  18. fwildclusterboot::boottest(...)
    at test-uncategorized.R:69:2
  19. fwildclusterboot:::boottest.fixest(...)
  20. fwildclusterboot:::check_set_full_enumeration(...)

══ Failed tests ════════════════════════════════════════════════════════════════
── Error (test-new-bootstrap-variants.R:243:3): variants 31 R vs Julia ─────────
Error: Evaluation in Julia failed.
Original Julia error message:
LoadError: ArgumentError: Package WildBootTests not found in current path.

  • Run import Pkg; Pkg.add("WildBootTests") to install the WildBootTests package.
    Stacktrace:
    [1] macro expansion
    @ ./loading.jl:1163 [inlined]
    [2] macro expansion
    @ ./lock.jl:223 [inlined]
    [3] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1144
    [4] eval
    @ ./boot.jl:368 [inlined]
    [5] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:1428
    [6] include_string (repeats 2 times)
    @ ./loading.jl:1438 [inlined]
    [7] mainevalcmd(str::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:150
    [8] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base ./essentials.jl:729
    [9] invokelatest(::Any, ::Any, ::Vararg{Any})
    @ Base ./essentials.jl:726
    [10] evaluate!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:67
    [11] evaluate_checked!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:55
    [12] serve_repl(sock::Sockets.TCPSocket)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:185
    [13] serve(port_hint::Int64; multiclient::Bool, portfile::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:152
    [14] top-level scope
    @ /usr/local/lib/R/site-library/JuliaConnectoR/Julia/main.jl:23
    [15] include(mod::Module, _path::String)
    @ Base ./Base.jl:419
    [16] exec_options(opts::Base.JLOptions)
    @ Base ./client.jl:303
    [17] _start()
    @ Base ./client.jl:522
    in expression starting at string:1
    Backtrace:
    1. ├─fwildclusterboot::boottest(...) at test-new-bootstrap-variants.R:243:2
    2. └─fwildclusterboot:::boottest.lm(...)
    3. └─fwildclusterboot:::boot_algo_julia(...)
    4. └─JuliaConnectoR::juliaEval("using WildBootTests")
      
    5.   └─JuliaConnectoR::juliaCall("RConnector.mainevalcmd", expr)
      
    6.     ├─base::tryCatch(...)
      
    7.     │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
      
    8.     │   └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
      
    9.     │     └─base (local) doTryCatch(return(expr), name, parentenv, handler)
      
  1.     └─JuliaConnectoR:::doCallJulia(funName, jlargs)
    
  2.       └─JuliaConnectoR:::handleCallbacksAndOutput()
    

[ FAIL 1 | WARN 6 | SKIP 14 | PASS 75 ]
Error: Test failures
Execution halted

R CMD check generated the following check_fails:

  1. rcmdcheck_tests_pass
  2. rcmdcheck_reasonable_installed_size

Test coverage with covr

ERROR: Test Coverage Failed

Cyclocomplexity with cyclocomp

The following functions have cyclocomplexity >= 15:

function cyclocomplexity
get_cluster 45
gtools_permutations 34
boot_algo3 23
boot_algo_julia 21
getBoottest_nthreads 16
check_boottest_args_plus 15

Static code analyses with lintr

lintr found the following 33 potential issues:

message number of times
Avoid library() and require() calls in packages 13
Lines should not be more than 80 characters. 20


5. Other Checks

Details of other checks (click to open)

✖️ The following function name is duplicated in other packages:

    • pval from CIPerm, dostats, dostats, GUIDE, learnstats, molic, mosaic, overlapptest, RPtests, timereg


Package Versions

package version
pkgstats 0.1.1.20
pkgcheck 0.1.0.9
srr 0.0.1.178


Editor-in-Chief Instructions:

Processing may not proceed until the items marked with ✖️ have been resolved.

@s3alfisc
Copy link
Author

I just ran the pkgcheck action in my own repo, and - even though the pkgcheck still complained about my compliance with standards - it finished! This of course means that from now on, I will be able to test in my own repo and can stop polluting this space 😄

@s3alfisc
Copy link
Author

@ropensci-review-bot check package

@ropensci-review-bot
Copy link
Collaborator

Thanks, about to send the query.

@ropensci-review-bot
Copy link
Collaborator

🚀

Editor check started

👋

@ropensci-review-bot
Copy link
Collaborator

Checks for fwildclusterboot (v0.11.2)

git hash: 94019e7e

  • ✔️ Package is already on CRAN.
  • ✔️ has a 'codemeta.json' file.
  • ✔️ has a 'contributing' file.
  • ✖️ The following function has no documented return value: [sunab]
  • ✔️ uses 'roxygen2'.
  • ✔️ 'DESCRIPTION' has a URL field.
  • ✔️ 'DESCRIPTION' has a BugReports field.
  • ✔️ Package has at least one HTML vignette
  • ✖️ These functions do not have examples: [sunab].
  • ✔️ Package has continuous integration checks.
  • ✖️ Package coverage failed
  • ✖️ R CMD check found 1 error.
  • ✖️ R CMD check found 2 warnings.
  • 👀 Function names are duplicated in other packages

Important: All failing checks above must be addressed prior to proceeding

(Checks marked with 👀 may be optionally addressed.)

Package License: GPL-3


1. rOpenSci Statistical Standards (srr package)

This package is in the following category:

  • Regression and Supervised Learning

✔️ All applicable standards [v0.1.0] have been documented in this package (70 complied with; 46 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 516
internal fwildclusterboot 128
internal stats 84
internal utils 9
internal graphics 3
internal compiler 1
imports collapse 14
imports dreamerr 10
imports generics 5
imports dqrng 5
imports MASS 4
imports Matrix 3
imports Matrix.utils 3
imports JuliaConnectoR 1
imports summclust 1
imports sandwich 1
imports Formula NA
imports Rcpp NA
suggests fabricatr 6
suggests fixest NA
suggests lfe NA
suggests ivreg NA
suggests clubSandwich NA
suggests lmtest NA
suggests data.table NA
suggests covr NA
suggests knitr NA
suggests rmarkdown NA
suggests broom NA
suggests modelsummary NA
suggests bench NA
suggests testthat NA
suggests tibble NA
suggests did2s NA
linking_to Rcpp NA
linking_to RcppArmadillo NA
linking_to RcppEigen 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

length (44), list (34), call (31), c (22), lapply (22), names (18), t (15), unique (15), drop (13), vapply (13), as.vector (12), paste0 (12), data.frame (10), rep (10), stop (10), ifelse (9), mode (9), Reduce (9), vector (9), which (9), for (8), nrow (8), sqrt (8), match.call (7), as.matrix (6), ncol (6), replace (6), sum (6), switch (6), is.null (5), matrix (5), seq_along (5), as.numeric (4), crossprod (4), gsub (4), mean (4), sample (4), solve (4), tcrossprod (4), abs (3), col (3), colnames (3), colSums (3), environment (3), getOption (3), if (3), min (3), paste (3), q (3), unlist (3), as.factor (2), as.integer (2), attr (2), cbind (2), grepl (2), loadedNamespaces (2), max (2), norm (2), Recall (2), return (2), sign (2), split (2), sprintf (2), substr (2), suppressWarnings (2), Sys.getenv (2), append (1), as.character (1), class (1), diag (1), dim (1), do.call (1), eval (1), exp (1), integer (1), is.na (1), is.numeric (1), isTRUE (1), logical (1), message (1), nchar (1), row (1), sample.int (1), sapply (1), seq (1), sort (1), tryCatch (1)

fwildclusterboot

format_message (8), get_ssc_julia (8), check_set_full_enumeration (7), set_seed (7), teststat (6), boot_algo_julia (5), crosstab (4), get_bootstrap_pvalue (4), get_cluster (4), boot_algo2 (3), cpp_get_nb_threads (3), eigenMapMatMult (3), get_ssc (3), get_weights (3), model_matrix (3), process_R (3), boottest (2), demean_fe (2), get_scores (2), gtools_permutations (2), matrix_split (2), preprocess2.felm (2), preprocess2.fixest (2), preprocess2.lm (2), transform_fe (2), boot_aggregate (1), boot_algo3 (1), boot_algo3_crv1 (1), boot_algo3_crv3 (1), boottest.felm (1), boottest.fixest (1), boottest.ivreg (1), boottest.lm (1), check_boot_algo3 (1), check_boottest_args_plus (1), check_engine_btype (1), check_mboottest_args_plus (1), check_params_in_model (1), check_r_lean (1), check_set_nthreads (1), confint.boottest (1), crosstab4 (1), format_alert (1), format_error (1), format_warning (1), get_c_all_boot_cpp (1), get_se_all_boot_cpp (1), get_seed (1), get_start_vals (1), getBoottest_engine (1), getBoottest_nthreads (1), glance.boottest (1), invert_p_val (1), is_juliaconnector_prepared (1), manipulate_object (1), p_val_null2 (1), p_val_null2_x (1), p_val_null2_x_sign_level (1), preprocess2.ivreg (1), to_integer (1), wildboottestHC (1)

stats

weights (24), model.matrix (13), formula (8), coef (7), na.omit (6), model.frame (5), nobs (4), aggregate (3), model.response (3), na.exclude (3), reformulate (2), vcov (2), na.action (1), na.pass (1), rlnorm (1), update (1)

collapse

fsum (7), GRP (4), qF (3)

dreamerr

validate_dots (10)

utils

data (7), combn (1), txtProgressBar (1)

fabricatr

draw_binary (2), draw_normal_icc (2), draw_ordered (1), fabricate (1)

dqrng

dqsample (4), dqset.seed (1)

generics

tidy (4), glance (1)

MASS

ginv (4)

graphics

abline (3)

Matrix

t (2), Diagonal (1)

Matrix.utils

aggregate.Matrix (3)

compiler

cmpfun (1)

JuliaConnectoR

juliaImport (1)

sandwich

vcovCL (1)

summclust

vcov_CR3J (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 C++ (10% in 4 files) and R (90% in 34 files)
  • 2 authors
  • 3 vignettes
  • 1 internal data file
  • 12 imported packages
  • 34 exported functions (median 9 lines of code)
  • 168 non-exported functions in R (median 20 lines of code)
  • 21 R functions (median 17 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 34 91.4
files_src 4 87.0
files_vignettes 3 92.4
files_tests 18 95.7
loc_R 4677 94.8
loc_src 500 46.8
loc_vignettes 586 81.7
loc_tests 5821 98.6 TRUE
num_vignettes 3 94.2
data_size_total 14024 72.7
data_size_median 14024 81.0
n_fns_r 202 89.9
n_fns_r_exported 34 81.0
n_fns_r_not_exported 168 91.5
n_fns_src 21 47.2
n_fns_per_file_r 3 55.2
n_fns_per_file_src 5 53.2
num_params_per_fn 2 11.9
loc_per_fn_r 18 54.7
loc_per_fn_r_exp 9 19.2
loc_per_fn_r_not_exp 20 63.0
loc_per_fn_src 17 59.6
rel_whitespace_R 20 95.3 TRUE
rel_whitespace_src 30 58.7
rel_whitespace_vignettes 35 84.9
rel_whitespace_tests 13 97.2 TRUE
doclines_per_fn_exp 31 34.8
doclines_per_fn_not_exp 0 0.0 TRUE
fn_call_network_size 181 87.5

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

R-CMD-check
pkgcheck

GitHub Workflow Results

id name conclusion sha run_number date
3118455761 pages build and deployment success e98a12 189 2022-09-24
3118431180 pkgcheck NA ee479f 93 2022-09-24
3118431181 pkgdown success ee479f 138 2022-09-24
3118431178 R-CMD-check success ee479f 542 2022-09-24
3118431179 test-coverage success ee479f 478 2022-09-24

3b. goodpractice results

R CMD check with rcmdcheck

R CMD check generated the following error:

  1. checking tests ...
    Running ‘testthat.R’
    ERROR
    Running the tests in ‘tests/testthat.R’ failed.
    Last 13 lines of output:
    4. ├─fwildclusterboot::boottest(...)
    5. └─fwildclusterboot:::boottest.ivreg(...)
    6. └─fwildclusterboot:::set_seed(...)
    7. └─JuliaConnectoR::juliaEval("using StableRNGs")
    8. └─JuliaConnectoR::juliaCall("RConnector.mainevalcmd", expr)
    9. ├─base::tryCatch(...)
    10. │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
    11. │ └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
    12. │ └─base (local) doTryCatch(return(expr), name, parentenv, handler)
    13. └─JuliaConnectoR:::doCallJulia(funName, jlargs)
    14. └─JuliaConnectoR:::handleCallbacksAndOutput()

[ FAIL 16 | WARN 11 | SKIP 0 | PASS 414 ]
Error: Test failures
Execution halted

R CMD check generated the following warnings:

  1. checking dependencies in R code ... WARNING
    '::' or ':::' import not declared from: ‘rstudioapi’
    'loadNamespace' or 'requireNamespace' call not declared from: ‘rstudioapi’
  2. checking S3 generic/method consistency ... WARNING
    tidy:
    function(x, ...)
    tidy.boottest:
    function(object, ...)

tidy:
function(x, ...)
tidy.mboottest:
function(object, ...)

See section ‘Generic functions and methods’ in the ‘Writing R
Extensions’ manual.

R CMD check generated the following notes:

  1. checking installed package size ... NOTE
    installed size is 8.8Mb
    sub-directories of 1Mb or more:
    libs 7.7Mb
  2. checking R code for possible problems ... NOTE
    .wrap_message_line: no visible global function definition for ‘.bold’
    .wrap_message_line: no visible global function definition for ‘.italic’
    .wrap_message_line: no visible global function definition for ‘.blue’
    Undefined global functions or variables:
    .blue .bold .italic

R CMD check generated the following test_fail:

  1. library(testthat)

library(fwildclusterboot)

test_check("fwildclusterboot")
Loading required namespace: fixest
The variable 'X2' has been removed because of collinearity (see $collin.var).
Starting Julia ...
Loading required namespace: data.table
R
Variables 'log_income::17.2069212919256:Q1_immigration::3' and 'log_income::18.0802367820713:Q1_immigration::3' have been removed because of collinearity (see $collin.var).
NOTE: 2 fixed-effect singletons were removed (2 observations).
WildBootTests.jl
Loading required namespace: ivreg
Part 1: Full enumeration Tests (deterministic)
start ols/wls
type: rademacher p-val: two-tailed null imposed: TRUE
rademacher
two-tailed
TRUE
type: rademacher p-val: equal-tailed null imposed: TRUE
rademacher
equal-tailed
TRUE
type: rademacher p-val: > null imposed: TRUE
rademacher

TRUE
type: rademacher p-val: < null imposed: TRUE
rademacher
<
TRUE
julia connector prepared? TRUEPart 1: Full enumeration Tests (deterministic)
start ols/wls
type: rademacher p-val: two-tailed null imposed: TRUE
rademacher
two-tailed
TRUE
Variance contained negative values in the diagonal and was 'fixed' (a la Cameron, Gelbach & Miller 2011).
Variance contained negative values in the diagonal and was 'fixed' (a la Cameron, Gelbach & Miller 2011).
Variance contained negative values in the diagonal and was 'fixed' (a la Cameron, Gelbach & Miller 2011).
Variance contained negative values in the diagonal and was 'fixed' (a la Cameron, Gelbach & Miller 2011).
boottest()
boottest()
start ols/wls
Part 1: Large B Tests
start ols/wls
type: rademacher p-val: two-tailed null imposed: TRUE
rademacher
two-tailed
TRUE
The Julia environment variable 'JULIA_BINDIR' could not be found.Therefore, all tests that involve 'WildBootTests.jl' will be skipped.
julia connector prepared? TRUE
The Julia environment variable 'JULIA_BINDIR' could not be found.Therefore, all tests that involve 'WildBootTests.jl' will be skipped.
julia connector prepared? TRUE
The Julia environment variable 'JULIA_BINDIR' could not be found.Therefore, all tests that involve 'WildBootTests.jl' will be skipped.
julia connector prepared? TRUE
[ FAIL 16 | WARN 11 | SKIP 0 | PASS 414 ]

══ Warnings ════════════════════════════════════════════════════════════════════
── Warning (test_tidy.R:22:5): test tidiers with q = 1 ─────────────────────────
There are only 1024 unique draws from the rademacher distribution for 10 bootstrap clusters. Therefore, B = 1024 with full enumeration. Consider using webb weights instead.
Further, note that under full enumeration and with B = 1024 bootstrap draws, only 2^(#clusters - 1) = 512 distinct t-statistics and p-values can be computed. For a
more thorough discussion, see Webb Reworking wild bootstrap based inference for clustered errors (2013).
Backtrace:

  1. fwildclusterboot::boottest(...)
    at test_tidy.R:22:4
  2. fwildclusterboot:::boottest.lm(...)
  3. fwildclusterboot:::check_set_full_enumeration(...)
    ── Warning (test_tidy.R:28:5): test tidiers with q = 1 ─────────────────────────
    There are only 1024 unique draws from the rademacher distribution for 10 bootstrap clusters. Therefore, B = 1024 with full enumeration. Consider using webb weights instead.
    Further, note that under full enumeration and with B = 1024 bootstrap draws, only 2^(#clusters - 1) = 512 distinct t-statistics and p-values can be computed. For a
    more thorough discussion, see Webb Reworking wild bootstrap based inference for clustered errors (2013).
    Backtrace:
  4. fwildclusterboot::boottest(...)
    at test_tidy.R:28:4
  5. fwildclusterboot:::boottest.lm(...)
  6. fwildclusterboot:::check_set_full_enumeration(...)
    ── Warning (test-error_warning.R:1208:9): errors and warnings q = 1 ────────────
    Currently, boottest() calculates confidence intervals for one-sided
    hypotheses only for engine = 'WildBootTests.jl'.
    Backtrace:
  7. testthat::expect_error(...)
    at test-error_warning.R:1208:8
  8. fwildclusterboot:::boottest.fixest(...)
  9. fwildclusterboot:::r_algo_checks(...)
    ── Warning (test-error_warning.R:1220:9): errors and warnings q = 1 ────────────
    Currently, boottest() calculates confidence intervals for one-sided
    hypotheses only for engine = 'WildBootTests.jl'.
    Backtrace:
  10. testthat::expect_error(...)
    at test-error_warning.R:1220:8
  11. fwildclusterboot:::boottest.felm(...)
  12. fwildclusterboot:::r_algo_checks(...)
    ── Warning (test-method_equivalence.R:135:5): Do different, but equivalent ways to specify
    linear models lead to equivalent results? ──
    Negative eigenvalues set to zero in multiway clustered variance matrix. See felm(...,psdef=FALSE)
    Backtrace:
  13. lfe::felm(...)
    at test-method_equivalence.R:135:4
  14. lfe:::felm.mm(...)
  15. lfe:::newols(...)
    ── Warning (test-method_equivalence.R:160:5): Do different, but equivalent ways to specify
    linear models lead to equivalent results? ──
    Negative eigenvalues set to zero in multiway clustered variance matrix. See felm(...,psdef=FALSE)
    Backtrace:
  16. lfe::felm(...)
    at test-method_equivalence.R:160:4
  17. lfe:::felm.mm(...)
  18. lfe:::newols(...)
    ── Warning (test-method_equivalence.R:167:5): Do different, but equivalent ways to specify
    linear models lead to equivalent results? ──
    Negative eigenvalues set to zero in multiway clustered variance matrix. See felm(...,psdef=FALSE)
    Backtrace:
  19. lfe::felm(...)
    at test-method_equivalence.R:167:4
  20. lfe:::felm.mm(...)
  21. lfe:::newols(...)
    ── Warning (test-uncategorized.R:45:3): uncategorized tests ────────────────────
    There are only 64 unique draws from the rademacher distribution for 6 bootstrap clusters. Therefore, B = 64 with full enumeration. Consider using webb weights instead.
    Further, note that under full enumeration and with B = 64 bootstrap draws, only 2^(#clusters - 1) = 32 distinct t-statistics and p-values can be computed. For a
    more thorough discussion, see Webb Reworking wild bootstrap based inference for clustered errors (2013).
    Backtrace:
  22. fwildclusterboot::boottest(...)
    at test-uncategorized.R:45:2
  23. fwildclusterboot:::boottest.fixest(...)
  24. fwildclusterboot:::check_set_full_enumeration(...)
    ── Warning (test-uncategorized.R:53:3): uncategorized tests ────────────────────
    There are only 64 unique draws from the rademacher distribution for 6 bootstrap clusters. Therefore, B = 64 with full enumeration. Consider using webb weights instead.
    Further, note that under full enumeration and with B = 64 bootstrap draws, only 2^(#clusters - 1) = 32 distinct t-statistics and p-values can be computed. For a
    more thorough discussion, see Webb Reworking wild bootstrap based inference for clustered errors (2013).
    Backtrace:
  25. fwildclusterboot::boottest(...)
    at test-uncategorized.R:53:2
  26. fwildclusterboot:::boottest.fixest(...)
  27. fwildclusterboot:::check_set_full_enumeration(...)
    ── Warning (test-uncategorized.R:61:3): uncategorized tests ────────────────────
    There are only 64 unique draws from the rademacher distribution for 6 bootstrap clusters. Therefore, B = 64 with full enumeration. Consider using webb weights instead.
    Further, note that under full enumeration and with B = 64 bootstrap draws, only 2^(#clusters - 1) = 32 distinct t-statistics and p-values can be computed. For a
    more thorough discussion, see Webb Reworking wild bootstrap based inference for clustered errors (2013).
    Backtrace:
  28. fwildclusterboot::boottest(...)
    at test-uncategorized.R:61:2
  29. fwildclusterboot:::boottest.fixest(...)
  30. fwildclusterboot:::check_set_full_enumeration(...)
    ── Warning (test-uncategorized.R:69:3): uncategorized tests ────────────────────
    There are only 64 unique draws from the rademacher distribution for 6 bootstrap clusters. Therefore, B = 64 with full enumeration. Consider using webb weights instead.
    Further, note that under full enumeration and with B = 64 bootstrap draws, only 2^(#clusters - 1) = 32 distinct t-statistics and p-values can be computed. For a
    more thorough discussion, see Webb Reworking wild bootstrap based inference for clustered errors (2013).
    Backtrace:
  31. fwildclusterboot::boottest(...)
    at test-uncategorized.R:69:2
  32. fwildclusterboot:::boottest.fixest(...)
  33. fwildclusterboot:::check_set_full_enumeration(...)

══ Failed tests ════════════════════════════════════════════════════════════════
── Error (test_tidy.R:35:5): test tidiers with q = 1 ───────────────────────────
Error: Evaluation in Julia failed.
Original Julia error message:
LoadError: ArgumentError: Package StableRNGs not found in current path.

  • Run import Pkg; Pkg.add("StableRNGs") to install the StableRNGs package.
    Stacktrace:
    [1] macro expansion
    @ ./loading.jl:1163 [inlined]
    [2] macro expansion
    @ ./lock.jl:223 [inlined]
    [3] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1144
    [4] eval
    @ ./boot.jl:368 [inlined]
    [5] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:1428
    [6] include_string (repeats 2 times)
    @ ./loading.jl:1438 [inlined]
    [7] mainevalcmd(str::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:150
    [8] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base ./essentials.jl:729
    [9] invokelatest(::Any, ::Any, ::Vararg{Any})
    @ Base ./essentials.jl:726
    [10] evaluate!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:67
    [11] evaluate_checked!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:55
    [12] serve_repl(sock::Sockets.TCPSocket)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:185
    [13] serve(port_hint::Int64; multiclient::Bool, portfile::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:152
    [14] top-level scope
    @ /usr/local/lib/R/site-library/JuliaConnectoR/Julia/main.jl:23
    [15] include(mod::Module, _path::String)
    @ Base ./Base.jl:419
    [16] exec_options(opts::Base.JLOptions)
    @ Base ./client.jl:303
    [17] _start()
    @ Base ./client.jl:522
    in expression starting at string:1
    Backtrace:
    1. ├─fwildclusterboot::boottest(...) at test_tidy.R:35:4
    2. └─fwildclusterboot:::boottest.lm(...)
    3. └─fwildclusterboot:::set_seed(seed = seed, engine = engine, type = type)
    4. └─JuliaConnectoR::juliaEval("using StableRNGs")
      
    5.   └─JuliaConnectoR::juliaCall("RConnector.mainevalcmd", expr)
      
    6.     ├─base::tryCatch(...)
      
    7.     │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
      
    8.     │   └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
      
    9.     │     └─base (local) doTryCatch(return(expr), name, parentenv, handler)
      
  1.     └─JuliaConnectoR:::doCallJulia(funName, jlargs)
    
  2.       └─JuliaConnectoR:::handleCallbacksAndOutput()
    

── Error (test_tidy.R:82:3): test tidiers with q > 1 ───────────────────────────
Error: Evaluation in Julia failed.
Original Julia error message:
LoadError: ArgumentError: Package StableRNGs not found in current path.

  • Run import Pkg; Pkg.add("StableRNGs") to install the StableRNGs package.
    Stacktrace:
    [1] macro expansion
    @ ./loading.jl:1163 [inlined]
    [2] macro expansion
    @ ./lock.jl:223 [inlined]
    [3] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1144
    [4] eval
    @ ./boot.jl:368 [inlined]
    [5] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:1428
    [6] include_string (repeats 2 times)
    @ ./loading.jl:1438 [inlined]
    [7] mainevalcmd(str::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:150
    [8] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base ./essentials.jl:729
    [9] invokelatest(::Any, ::Any, ::Vararg{Any})
    @ Base ./essentials.jl:726
    [10] evaluate!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:67
    [11] evaluate_checked!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:55
    [12] serve_repl(sock::Sockets.TCPSocket)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:185
    [13] serve(port_hint::Int64; multiclient::Bool, portfile::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:152
    [14] top-level scope
    @ /usr/local/lib/R/site-library/JuliaConnectoR/Julia/main.jl:23
    [15] include(mod::Module, _path::String)
    @ Base ./Base.jl:419
    [16] exec_options(opts::Base.JLOptions)
    @ Base ./client.jl:303
    [17] _start()
    @ Base ./client.jl:522
    in expression starting at string:1
    Backtrace:
    1. ├─fwildclusterboot::mboottest(...) at test_tidy.R:82:2
    2. └─fwildclusterboot:::mboottest.lm(...)
    3. └─fwildclusterboot:::set_seed(...)
    4. └─JuliaConnectoR::juliaEval("using StableRNGs")
      
    5.   └─JuliaConnectoR::juliaCall("RConnector.mainevalcmd", expr)
      
    6.     ├─base::tryCatch(...)
      
    7.     │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
      
    8.     │   └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
      
    9.     │     └─base (local) doTryCatch(return(expr), name, parentenv, handler)
      
  1.     └─JuliaConnectoR:::doCallJulia(funName, jlargs)
    
  2.       └─JuliaConnectoR:::handleCallbacksAndOutput()
    

── Failure (test-error_warning.R:625:7): errors and warnings q = 1 ─────────────
boottest(...) did not throw the expected message.
── Failure (test-error_warning.R:638:9): errors and warnings q = 1 ─────────────
boottest(...) did not throw the expected message.
── Failure (test-error_warning.R:650:9): errors and warnings q = 1 ─────────────
boottest(...) did not throw the expected message.
── Error (test-error_warning.R:246:9): errors and warnings q = 1 ───────────────
Error: Evaluation in Julia failed.
Original Julia error message:
LoadError: ArgumentError: Package StableRNGs not found in current path.

  • Run import Pkg; Pkg.add("StableRNGs") to install the StableRNGs package.
    Stacktrace:
    [1] macro expansion
    @ ./loading.jl:1163 [inlined]
    [2] macro expansion
    @ ./lock.jl:223 [inlined]
    [3] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1144
    [4] eval
    @ ./boot.jl:368 [inlined]
    [5] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:1428
    [6] include_string (repeats 2 times)
    @ ./loading.jl:1438 [inlined]
    [7] mainevalcmd(str::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:150
    [8] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base ./essentials.jl:729
    [9] invokelatest(::Any, ::Any, ::Vararg{Any})
    @ Base ./essentials.jl:726
    [10] evaluate!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:67
    [11] evaluate_checked!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:55
    [12] serve_repl(sock::Sockets.TCPSocket)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:185
    [13] serve(port_hint::Int64; multiclient::Bool, portfile::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:152
    [14] top-level scope
    @ /usr/local/lib/R/site-library/JuliaConnectoR/Julia/main.jl:23
    [15] include(mod::Module, _path::String)
    @ Base ./Base.jl:419
    [16] exec_options(opts::Base.JLOptions)
    @ Base ./client.jl:303
    [17] _start()
    @ Base ./client.jl:522
    in expression starting at string:1
    Backtrace:
    1. ├─base::suppressWarnings(...) at test-error_warning.R:246:8
    2. │ └─base::withCallingHandlers(...)
    3. ├─testthat::expect_warning(...)
    4. │ └─testthat:::expect_condition_matching(...)
    5. │ └─testthat:::quasi_capture(...)
    6. │ ├─testthat (local) .capture(...)
    7. │ │ └─base::withCallingHandlers(...)
    8. │ └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
    9. ├─fwildclusterboot::boottest(...)
  1. └─fwildclusterboot:::boottest.lm(...)
  2. └─fwildclusterboot:::set_seed(seed = seed, engine = engine, type = type)
  3. └─JuliaConnectoR::juliaEval("using StableRNGs")
    
  4.   └─JuliaConnectoR::juliaCall("RConnector.mainevalcmd", expr)
    
  5.     ├─base::tryCatch(...)
    
  6.     │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
    
  7.     │   └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
    
  8.     │     └─base (local) doTryCatch(return(expr), name, parentenv, handler)
    
  9.     └─JuliaConnectoR:::doCallJulia(funName, jlargs)
    
  10.       └─JuliaConnectoR:::handleCallbacksAndOutput()
    

── Error (test-error_warning.R:1509:5): error warning IV/WRE and q > 1 ─────────
Error: Evaluation in Julia failed.
Original Julia error message:
LoadError: ArgumentError: Package StableRNGs not found in current path.

  • Run import Pkg; Pkg.add("StableRNGs") to install the StableRNGs package.
    Stacktrace:
    [1] macro expansion
    @ ./loading.jl:1163 [inlined]
    [2] macro expansion
    @ ./lock.jl:223 [inlined]
    [3] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1144
    [4] eval
    @ ./boot.jl:368 [inlined]
    [5] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:1428
    [6] include_string (repeats 2 times)
    @ ./loading.jl:1438 [inlined]
    [7] mainevalcmd(str::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:150
    [8] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base ./essentials.jl:729
    [9] invokelatest(::Any, ::Any, ::Vararg{Any})
    @ Base ./essentials.jl:726
    [10] evaluate!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:67
    [11] evaluate_checked!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:55
    [12] serve_repl(sock::Sockets.TCPSocket)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:185
    [13] serve(port_hint::Int64; multiclient::Bool, portfile::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:152
    [14] top-level scope
    @ /usr/local/lib/R/site-library/JuliaConnectoR/Julia/main.jl:23
    [15] include(mod::Module, _path::String)
    @ Base ./Base.jl:419
    [16] exec_options(opts::Base.JLOptions)
    @ Base ./client.jl:303
    [17] _start()
    @ Base ./client.jl:522
    in expression starting at string:1
    Backtrace:
    1. ├─testthat::expect_warning(...) at test-error_warning.R:1509:4
    2. │ └─testthat:::expect_condition_matching(...)
    3. │ └─testthat:::quasi_capture(...)
    4. │ ├─testthat (local) .capture(...)
    5. │ │ └─base::withCallingHandlers(...)
    6. │ └─rlang::eval_bare(quo_get_expr(.quo), quo_get_env(.quo))
    7. ├─base::suppressMessages(...)
    8. │ └─base::withCallingHandlers(...)
    9. ├─fwildclusterboot::boottest(...)
  1. └─fwildclusterboot:::boottest.ivreg(...)
  2. └─fwildclusterboot:::set_seed(...)
  3. └─JuliaConnectoR::juliaEval("using StableRNGs")
    
  4.   └─JuliaConnectoR::juliaCall("RConnector.mainevalcmd", expr)
    
  5.     ├─base::tryCatch(...)
    
  6.     │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
    
  7.     │   └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
    
  8.     │     └─base (local) doTryCatch(return(expr), name, parentenv, handler)
    
  9.     └─JuliaConnectoR:::doCallJulia(funName, jlargs)
    
  10.       └─JuliaConnectoR:::handleCallbacksAndOutput()
    

── Error (test-full-enumeration.R:295:13): test full enumeration cases: r and julia ──
Error: Evaluation in Julia failed.
Original Julia error message:
LoadError: ArgumentError: Package StableRNGs not found in current path.

  • Run import Pkg; Pkg.add("StableRNGs") to install the StableRNGs package.
    Stacktrace:
    [1] macro expansion
    @ ./loading.jl:1163 [inlined]
    [2] macro expansion
    @ ./lock.jl:223 [inlined]
    [3] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1144
    [4] eval
    @ ./boot.jl:368 [inlined]
    [5] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:1428
    [6] include_string (repeats 2 times)
    @ ./loading.jl:1438 [inlined]
    [7] mainevalcmd(str::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:150
    [8] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base ./essentials.jl:729
    [9] invokelatest(::Any, ::Any, ::Vararg{Any})
    @ Base ./essentials.jl:726
    [10] evaluate!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:67
    [11] evaluate_checked!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:55
    [12] serve_repl(sock::Sockets.TCPSocket)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:185
    [13] serve(port_hint::Int64; multiclient::Bool, portfile::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:152
    [14] top-level scope
    @ /usr/local/lib/R/site-library/JuliaConnectoR/Julia/main.jl:23
    [15] include(mod::Module, _path::String)
    @ Base ./Base.jl:419
    [16] exec_options(opts::Base.JLOptions)
    @ Base ./client.jl:303
    [17] _start()
    @ Base ./client.jl:522
    in expression starting at string:1
    Backtrace:
    1. ├─base::suppressWarnings(...) at test-full-enumeration.R:295:12
    2. │ └─base::withCallingHandlers(...)
    3. ├─fwildclusterboot::boottest(...)
    4. └─fwildclusterboot:::boottest.lm(...)
    5. └─fwildclusterboot:::set_seed(seed = seed, engine = engine, type = type)
    6. └─JuliaConnectoR::juliaEval("using StableRNGs")
      
    7.   └─JuliaConnectoR::juliaCall("RConnector.mainevalcmd", expr)
      
    8.     ├─base::tryCatch(...)
      
    9.     │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
      
  1.     │   └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
    
  2.     │     └─base (local) doTryCatch(return(expr), name, parentenv, handler)
    
  3.     └─JuliaConnectoR:::doCallJulia(funName, jlargs)
    
  4.       └─JuliaConnectoR:::handleCallbacksAndOutput()
    

── Error (test-global_vars.R:18:5): global engine ──────────────────────────────
Error: Evaluation in Julia failed.
Original Julia error message:
LoadError: ArgumentError: Package StableRNGs not found in current path.

  • Run import Pkg; Pkg.add("StableRNGs") to install the StableRNGs package.
    Stacktrace:
    [1] macro expansion
    @ ./loading.jl:1163 [inlined]
    [2] macro expansion
    @ ./lock.jl:223 [inlined]
    [3] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1144
    [4] eval
    @ ./boot.jl:368 [inlined]
    [5] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:1428
    [6] include_string (repeats 2 times)
    @ ./loading.jl:1438 [inlined]
    [7] mainevalcmd(str::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:150
    [8] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base ./essentials.jl:729
    [9] invokelatest(::Any, ::Any, ::Vararg{Any})
    @ Base ./essentials.jl:726
    [10] evaluate!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:67
    [11] evaluate_checked!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:55
    [12] serve_repl(sock::Sockets.TCPSocket)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:185
    [13] serve(port_hint::Int64; multiclient::Bool, portfile::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:152
    [14] top-level scope
    @ /usr/local/lib/R/site-library/JuliaConnectoR/Julia/main.jl:23
    [15] include(mod::Module, _path::String)
    @ Base ./Base.jl:419
    [16] exec_options(opts::Base.JLOptions)
    @ Base ./client.jl:303
    [17] _start()
    @ Base ./client.jl:522
    in expression starting at string:1
    Backtrace:
    1. ├─base::suppressWarnings(...) at test-global_vars.R:18:4
    2. │ └─base::withCallingHandlers(...)
    3. ├─fwildclusterboot::boottest(...)
    4. └─fwildclusterboot:::boottest.lm(...)
    5. └─fwildclusterboot:::set_seed(seed = seed, engine = engine, type = type)
    6. └─JuliaConnectoR::juliaEval("using StableRNGs")
      
    7.   └─JuliaConnectoR::juliaCall("RConnector.mainevalcmd", expr)
      
    8.     ├─base::tryCatch(...)
      
    9.     │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
      
  1.     │   └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
    
  2.     │     └─base (local) doTryCatch(return(expr), name, parentenv, handler)
    
  3.     └─JuliaConnectoR:::doCallJulia(funName, jlargs)
    
  4.       └─JuliaConnectoR:::handleCallbacksAndOutput()
    

── Error (test-method_equivalence.R:1227:5): Do different, but equivalent ways to specify
linear models lead to equivalent results? ──
Error: Evaluation in Julia failed.
Original Julia error message:
LoadError: ArgumentError: Package StableRNGs not found in current path.

  • Run import Pkg; Pkg.add("StableRNGs") to install the StableRNGs package.
    Stacktrace:
    [1] macro expansion
    @ ./loading.jl:1163 [inlined]
    [2] macro expansion
    @ ./lock.jl:223 [inlined]
    [3] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1144
    [4] eval
    @ ./boot.jl:368 [inlined]
    [5] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:1428
    [6] include_string (repeats 2 times)
    @ ./loading.jl:1438 [inlined]
    [7] mainevalcmd(str::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:150
    [8] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base ./essentials.jl:729
    [9] invokelatest(::Any, ::Any, ::Vararg{Any})
    @ Base ./essentials.jl:726
    [10] evaluate!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:67
    [11] evaluate_checked!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:55
    [12] serve_repl(sock::Sockets.TCPSocket)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:185
    [13] serve(port_hint::Int64; multiclient::Bool, portfile::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:152
    [14] top-level scope
    @ /usr/local/lib/R/site-library/JuliaConnectoR/Julia/main.jl:23
    [15] include(mod::Module, _path::String)
    @ Base ./Base.jl:419
    [16] exec_options(opts::Base.JLOptions)
    @ Base ./client.jl:303
    [17] _start()
    @ Base ./client.jl:522
    in expression starting at string:1
    Backtrace:
    1. └─fwildclusterboot (local) create_models(clustid = "group_id1") at test-method_equivalence.R:1227:4
    2. ├─base::assign(...) at test-method_equivalence.R:187:8
    3. ├─base::suppressWarnings(...)
    4. │ └─base::withCallingHandlers(...)
    5. ├─fwildclusterboot::boottest(...)
    6. └─fwildclusterboot:::boottest.lm(...)
    7. └─fwildclusterboot:::set_seed(seed = seed, engine = engine, type = type)
      
    8.   └─JuliaConnectoR::juliaEval("using StableRNGs")
      
    9.     └─JuliaConnectoR::juliaCall("RConnector.mainevalcmd", expr)
      
  1.       ├─base::tryCatch(...)
    
  2.       │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
    
  3.       │   └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
    
  4.       │     └─base (local) doTryCatch(return(expr), name, parentenv, handler)
    
  5.       └─JuliaConnectoR:::doCallJulia(funName, jlargs)
    
  6.         └─JuliaConnectoR:::handleCallbacksAndOutput()
    

── Error (test-new-bootstrap-variants.R:271:5): variants 31 R vs Julia ─────────
Error: Evaluation in Julia failed.
Original Julia error message:
LoadError: ArgumentError: Package StableRNGs not found in current path.

  • Run import Pkg; Pkg.add("StableRNGs") to install the StableRNGs package.
    Stacktrace:
    [1] macro expansion
    @ ./loading.jl:1163 [inlined]
    [2] macro expansion
    @ ./lock.jl:223 [inlined]
    [3] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1144
    [4] eval
    @ ./boot.jl:368 [inlined]
    [5] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:1428
    [6] include_string (repeats 2 times)
    @ ./loading.jl:1438 [inlined]
    [7] mainevalcmd(str::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:150
    [8] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base ./essentials.jl:729
    [9] invokelatest(::Any, ::Any, ::Vararg{Any})
    @ Base ./essentials.jl:726
    [10] evaluate!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:67
    [11] evaluate_checked!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:55
    [12] serve_repl(sock::Sockets.TCPSocket)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:185
    [13] serve(port_hint::Int64; multiclient::Bool, portfile::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:152
    [14] top-level scope
    @ /usr/local/lib/R/site-library/JuliaConnectoR/Julia/main.jl:23
    [15] include(mod::Module, _path::String)
    @ Base ./Base.jl:419
    [16] exec_options(opts::Base.JLOptions)
    @ Base ./client.jl:303
    [17] _start()
    @ Base ./client.jl:522
    in expression starting at string:1
    Backtrace:
    1. ├─fwildclusterboot::boottest(...) at test-new-bootstrap-variants.R:271:4
    2. └─fwildclusterboot:::boottest.lm(...)
    3. └─fwildclusterboot:::set_seed(seed = seed, engine = engine, type = type)
    4. └─JuliaConnectoR::juliaEval("using StableRNGs")
      
    5.   └─JuliaConnectoR::juliaCall("RConnector.mainevalcmd", expr)
      
    6.     ├─base::tryCatch(...)
      
    7.     │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
      
    8.     │   └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
      
    9.     │     └─base (local) doTryCatch(return(expr), name, parentenv, handler)
      
  1.     └─JuliaConnectoR:::doCallJulia(funName, jlargs)
    
  2.       └─JuliaConnectoR:::handleCallbacksAndOutput()
    

── Error (test-r-vs-julia.R:86:15): test r against Julia I: stochastic tests ───
Error: Evaluation in Julia failed.
Original Julia error message:
LoadError: ArgumentError: Package StableRNGs not found in current path.

  • Run import Pkg; Pkg.add("StableRNGs") to install the StableRNGs package.
    Stacktrace:
    [1] macro expansion
    @ ./loading.jl:1163 [inlined]
    [2] macro expansion
    @ ./lock.jl:223 [inlined]
    [3] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1144
    [4] eval
    @ ./boot.jl:368 [inlined]
    [5] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:1428
    [6] include_string (repeats 2 times)
    @ ./loading.jl:1438 [inlined]
    [7] mainevalcmd(str::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:150
    [8] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base ./essentials.jl:729
    [9] invokelatest(::Any, ::Any, ::Vararg{Any})
    @ Base ./essentials.jl:726
    [10] evaluate!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:67
    [11] evaluate_checked!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:55
    [12] serve_repl(sock::Sockets.TCPSocket)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:185
    [13] serve(port_hint::Int64; multiclient::Bool, portfile::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:152
    [14] top-level scope
    @ /usr/local/lib/R/site-library/JuliaConnectoR/Julia/main.jl:23
    [15] include(mod::Module, _path::String)
    @ Base ./Base.jl:419
    [16] exec_options(opts::Base.JLOptions)
    @ Base ./client.jl:303
    [17] _start()
    @ Base ./client.jl:522
    in expression starting at string:1
    Backtrace:
    1. ├─base::suppressWarnings(...) at test-r-vs-julia.R:86:14
    2. │ └─base::withCallingHandlers(...)
    3. ├─fwildclusterboot::boottest(...)
    4. └─fwildclusterboot:::boottest.lm(...)
    5. └─fwildclusterboot:::set_seed(seed = seed, engine = engine, type = type)
    6. └─JuliaConnectoR::juliaEval("using StableRNGs")
      
    7.   └─JuliaConnectoR::juliaCall("RConnector.mainevalcmd", expr)
      
    8.     ├─base::tryCatch(...)
      
    9.     │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
      
  1.     │   └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
    
  2.     │     └─base (local) doTryCatch(return(expr), name, parentenv, handler)
    
  3.     └─JuliaConnectoR:::doCallJulia(funName, jlargs)
    
  4.       └─JuliaConnectoR:::handleCallbacksAndOutput()
    

── Error (test-seed.R:31:7): seed works for OLS ────────────────────────────────
Error: Evaluation in Julia failed.
Original Julia error message:
LoadError: ArgumentError: Package StableRNGs not found in current path.

  • Run import Pkg; Pkg.add("StableRNGs") to install the StableRNGs package.
    Stacktrace:
    [1] macro expansion
    @ ./loading.jl:1163 [inlined]
    [2] macro expansion
    @ ./lock.jl:223 [inlined]
    [3] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1144
    [4] eval
    @ ./boot.jl:368 [inlined]
    [5] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:1428
    [6] include_string (repeats 2 times)
    @ ./loading.jl:1438 [inlined]
    [7] mainevalcmd(str::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:150
    [8] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base ./essentials.jl:729
    [9] invokelatest(::Any, ::Any, ::Vararg{Any})
    @ Base ./essentials.jl:726
    [10] evaluate!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:67
    [11] evaluate_checked!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:55
    [12] serve_repl(sock::Sockets.TCPSocket)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:185
    [13] serve(port_hint::Int64; multiclient::Bool, portfile::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:152
    [14] top-level scope
    @ /usr/local/lib/R/site-library/JuliaConnectoR/Julia/main.jl:23
    [15] include(mod::Module, _path::String)
    @ Base ./Base.jl:419
    [16] exec_options(opts::Base.JLOptions)
    @ Base ./client.jl:303
    [17] _start()
    @ Base ./client.jl:522
    in expression starting at string:1
    Backtrace:
    1. ├─base::suppressMessages(...) at test-seed.R:31:6
    2. │ └─base::withCallingHandlers(...)
    3. ├─fwildclusterboot::boottest(...)
    4. └─fwildclusterboot:::boottest.lm(...)
    5. └─fwildclusterboot:::set_seed(seed = seed, engine = engine, type = type)
    6. └─JuliaConnectoR::juliaEval("using StableRNGs")
      
    7.   └─JuliaConnectoR::juliaCall("RConnector.mainevalcmd", expr)
      
    8.     ├─base::tryCatch(...)
      
    9.     │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
      
  1.     │   └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
    
  2.     │     └─base (local) doTryCatch(return(expr), name, parentenv, handler)
    
  3.     └─JuliaConnectoR:::doCallJulia(funName, jlargs)
    
  4.       └─JuliaConnectoR:::handleCallbacksAndOutput()
    

── Error (test-tstat_equivalence.R:428:19): t-stat equivalence OLS - WildBootTests ──
Error: Evaluation in Julia failed.
Original Julia error message:
LoadError: ArgumentError: Package StableRNGs not found in current path.

  • Run import Pkg; Pkg.add("StableRNGs") to install the StableRNGs package.
    Stacktrace:
    [1] macro expansion
    @ ./loading.jl:1163 [inlined]
    [2] macro expansion
    @ ./lock.jl:223 [inlined]
    [3] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1144
    [4] eval
    @ ./boot.jl:368 [inlined]
    [5] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:1428
    [6] include_string (repeats 2 times)
    @ ./loading.jl:1438 [inlined]
    [7] mainevalcmd(str::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:150
    [8] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base ./essentials.jl:729
    [9] invokelatest(::Any, ::Any, ::Vararg{Any})
    @ Base ./essentials.jl:726
    [10] evaluate!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:67
    [11] evaluate_checked!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:55
    [12] serve_repl(sock::Sockets.TCPSocket)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:185
    [13] serve(port_hint::Int64; multiclient::Bool, portfile::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:152
    [14] top-level scope
    @ /usr/local/lib/R/site-library/JuliaConnectoR/Julia/main.jl:23
    [15] include(mod::Module, _path::String)
    @ Base ./Base.jl:419
    [16] exec_options(opts::Base.JLOptions)
    @ Base ./client.jl:303
    [17] _start()
    @ Base ./client.jl:522
    in expression starting at string:1
    Backtrace:
    1. ├─base::suppressWarnings(...) at test-tstat_equivalence.R:428:18
    2. │ └─base::withCallingHandlers(...)
    3. ├─fwildclusterboot::boottest(...)
    4. └─fwildclusterboot:::boottest.lm(...)
    5. └─fwildclusterboot:::set_seed(seed = seed, engine = engine, type = type)
    6. └─JuliaConnectoR::juliaEval("using StableRNGs")
      
    7.   └─JuliaConnectoR::juliaCall("RConnector.mainevalcmd", expr)
      
    8.     ├─base::tryCatch(...)
      
    9.     │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
      
  1.     │   └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
    
  2.     │     └─base (local) doTryCatch(return(expr), name, parentenv, handler)
    
  3.     └─JuliaConnectoR:::doCallJulia(funName, jlargs)
    
  4.       └─JuliaConnectoR:::handleCallbacksAndOutput()
    

── Error (test-tstat_equivalence.R:882:5): t-stat equivalence OLS q > 1 ────────
Error: Evaluation in Julia failed.
Original Julia error message:
LoadError: ArgumentError: Package StableRNGs not found in current path.

  • Run import Pkg; Pkg.add("StableRNGs") to install the StableRNGs package.
    Stacktrace:
    [1] macro expansion
    @ ./loading.jl:1163 [inlined]
    [2] macro expansion
    @ ./lock.jl:223 [inlined]
    [3] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1144
    [4] eval
    @ ./boot.jl:368 [inlined]
    [5] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:1428
    [6] include_string (repeats 2 times)
    @ ./loading.jl:1438 [inlined]
    [7] mainevalcmd(str::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:150
    [8] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base ./essentials.jl:729
    [9] invokelatest(::Any, ::Any, ::Vararg{Any})
    @ Base ./essentials.jl:726
    [10] evaluate!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:67
    [11] evaluate_checked!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:55
    [12] serve_repl(sock::Sockets.TCPSocket)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:185
    [13] serve(port_hint::Int64; multiclient::Bool, portfile::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:152
    [14] top-level scope
    @ /usr/local/lib/R/site-library/JuliaConnectoR/Julia/main.jl:23
    [15] include(mod::Module, _path::String)
    @ Base ./Base.jl:419
    [16] exec_options(opts::Base.JLOptions)
    @ Base ./client.jl:303
    [17] _start()
    @ Base ./client.jl:522
    in expression starting at string:1
    Backtrace:
    1. └─fwildclusterboot (local) wald_test(run_this_test = TRUE) at test-tstat_equivalence.R:882:4
    2. ├─base::suppressWarnings(...) at test-tstat_equivalence.R:671:8
    3. │ └─base::withCallingHandlers(...)
    4. ├─fwildclusterboot::mboottest(...)
    5. └─fwildclusterboot:::mboottest.lm(...)
    6. └─fwildclusterboot:::set_seed(...)
      
    7.   └─JuliaConnectoR::juliaEval("using StableRNGs")
      
    8.     └─JuliaConnectoR::juliaCall("RConnector.mainevalcmd", expr)
      
    9.       ├─base::tryCatch(...)
      
  1.       │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
    
  2.       │   └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
    
  3.       │     └─base (local) doTryCatch(return(expr), name, parentenv, handler)
    
  4.       └─JuliaConnectoR:::doCallJulia(funName, jlargs)
    
  5.         └─JuliaConnectoR:::handleCallbacksAndOutput()
    

── Error (test-tstat_equivalence.R:966:5): t-stat equivalence IV ───────────────
Error: Evaluation in Julia failed.
Original Julia error message:
LoadError: ArgumentError: Package StableRNGs not found in current path.

  • Run import Pkg; Pkg.add("StableRNGs") to install the StableRNGs package.
    Stacktrace:
    [1] macro expansion
    @ ./loading.jl:1163 [inlined]
    [2] macro expansion
    @ ./lock.jl:223 [inlined]
    [3] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1144
    [4] eval
    @ ./boot.jl:368 [inlined]
    [5] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)
    @ Base ./loading.jl:1428
    [6] include_string (repeats 2 times)
    @ ./loading.jl:1438 [inlined]
    [7] mainevalcmd(str::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:150
    [8] invokelatest(::Any, ::Any, ::Vararg{Any}; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
    @ Base ./essentials.jl:729
    [9] invokelatest(::Any, ::Any, ::Vararg{Any})
    @ Base ./essentials.jl:726
    [10] evaluate!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:67
    [11] evaluate_checked!(call::Main.RConnector.Call, communicator::Main.RConnector.CommunicatoR{Sockets.TCPSocket})
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/evaluating.jl:55
    [12] serve_repl(sock::Sockets.TCPSocket)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:185
    [13] serve(port_hint::Int64; multiclient::Bool, portfile::String)
    @ Main.RConnector /usr/local/lib/R/site-library/JuliaConnectoR/Julia/communicating.jl:152
    [14] top-level scope
    @ /usr/local/lib/R/site-library/JuliaConnectoR/Julia/main.jl:23
    [15] include(mod::Module, _path::String)
    @ Base ./Base.jl:419
    [16] exec_options(opts::Base.JLOptions)
    @ Base ./client.jl:303
    [17] _start()
    @ Base ./client.jl:522
    in expression starting at string:1
    Backtrace:
    1. └─fwildclusterboot (local) iv_test(run_this_test = TRUE) at test-tstat_equivalence.R:966:4
    2. ├─base::suppressWarnings(...) at test-tstat_equivalence.R:931:8
    3. │ └─base::withCallingHandlers(...)
    4. ├─fwildclusterboot::boottest(...)
    5. └─fwildclusterboot:::boottest.ivreg(...)
    6. └─fwildclusterboot:::set_seed(...)
      
    7.   └─JuliaConnectoR::juliaEval("using StableRNGs")
      
    8.     └─JuliaConnectoR::juliaCall("RConnector.mainevalcmd", expr)
      
    9.       ├─base::tryCatch(...)
      
  1.       │ └─base (local) tryCatchList(expr, classes, parentenv, handlers)
    
  2.       │   └─base (local) tryCatchOne(expr, names, parentenv, handlers[[1L]])
    
  3.       │     └─base (local) doTryCatch(return(expr), name, parentenv, handler)
    
  4.       └─JuliaConnectoR:::doCallJulia(funName, jlargs)
    
  5.         └─JuliaConnectoR:::handleCallbacksAndOutput()
    

[ FAIL 16 | WARN 11 | SKIP 0 | PASS 414 ]
Error: Test failures
Execution halted

R CMD check generated the following check_fails:

  1. rcmdcheck_undeclared_imports
  2. rcmdcheck_undeclared_loadnamespace_requirenamespace
  3. rcmdcheck_undefined_globals
  4. rcmdcheck_tests_pass
  5. rcmdcheck_reasonable_installed_size

Test coverage with covr

ERROR: Test Coverage Failed

Cyclocomplexity with cyclocomp

The following functions have cyclocomplexity >= 15:

function cyclocomplexity
get_cluster 35
gtools_permutations 34
boot_algo3 24
boot_aggregate 22
boot_algo_julia 21
getBoottest_nthreads 16
boottest.fixest 15
boottest.lm 15
check_boottest_args_plus 15

Static code analyses with lintr

lintr found the following 70 potential issues:

message number of times
Avoid library() and require() calls in packages 13
Avoid using sapply, consider vapply instead, that's type safe 1
Lines should not be more than 80 characters. 11
Use <-, not =, for assignment. 45


5. Other Checks

Details of other checks (click to open)

✖️ The following 2 function names are duplicated in other packages:

    • format_message from insight
    • pval from CIPerm, dostats, dostats, GUIDE, learnstats, molic, mosaic, overlapptest, RPtests, timereg


Package Versions

package version
pkgstats 0.1.1.44
pkgcheck 0.1.0.24
srr 0.0.1.180


Editor-in-Chief Instructions:

Processing may not proceed until the items marked with ✖️ have been resolved.

@maurolepore
Copy link
Member

Dear @s3alfisc

Today starts my rotation as EiC and I'm reviewing the status of current open reviews.

Thanks a lot for your efforts in meeting our standards. Where are we standing now? Do you feel ready for me to resume the review process? The next step would be to re-run checks and then look for a handling editor.

@s3alfisc
Copy link
Author

s3alfisc commented Feb 1, 2023

Hi @maurolepore - thanks for reaching out - I was actually about to do the same this weekend! Unfortunately, I never got the pkgcheck to run properly, neither on my local machine nor on github actions. But I have not really tried in a while (I had given up at some point) - so I'll try once again and if I cannot get it to run locally, is it ok if I trigger the workflow bot one more time? One complication is that I am running unit tests against WildBootTests.jl, and in order to run the pkgcheck workflows, I'd have to skip those tests, which would lead to a drop in test coverage to around 65%.

@s3alfisc
Copy link
Author

s3alfisc commented Feb 1, 2023

Actually, pkgcheck is now running on my local machine - so I'll respond to it's feedback, update all standards based on a few new features, and will notify you once everything is done!

@s3alfisc
Copy link
Author

s3alfisc commented Feb 1, 2023

I've run the pkgcheck action, with the following results:

  • the pkgcheck coverage test fails, as pkgcheck does not run some tests that my local github actions CI runs (coverage is at 89% running all tests, codecov link)
  • installation on ubuntu-lastest fails. No problems on older versions of ubuntu via github actions.
  • The following functions are used in other packages: pval, error_message - which I think should be fine?

I'll start the bot to confirm all of this later today & then you can decide if you think everything is good enough to proceed, @maurolepore ?

@s3alfisc
Copy link
Author

s3alfisc commented Feb 1, 2023

@ropensci-review-bot check package

@meghapsimatrix
Copy link

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 have (had) with the package authors.
  • 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).

Documentation

The package includes all the following forms of documentation:

  • A statement of need: clearly stating problems the software is designed to solve and its target audience in README
  • Installation instructions: for the development version of package and any non-standard dependencies in README
  • Vignette(s): demonstrating major functionality that runs successfully locally
  • Function Documentation: for all exported functions
  • Examples: (that run successfully locally) for all exported functions
  • Community guidelines: including contribution guidelines in the README or CONTRIBUTING, and DESCRIPTION with URL, BugReports and Maintainer (which may be autogenerated via Authors@R).

Functionality

  • Installation: Installation succeeds as documented.
  • Functionality: Any functional claims of the software have been confirmed.
  • Performance: Any performance claims of the software have been confirmed.
  • Automated tests: Unit tests cover essential functions of the package and a reasonable range of inputs and conditions. All tests pass on the local machine.
  • Packaging guidelines: The package conforms to the rOpenSci packaging guidelines.

Estimated hours spent reviewing:

  • Should the author(s) deem it appropriate, I agree to be acknowledged as a package reviewer ("rev" role) in the package DESCRIPTION file.

Review Comments

This is a great package with super fast implementation of cluster wild bootstrap. Thanks for the opportunity to review.

R CMD check

1 NOTE

❯ checking top-level files ... NOTE
  Non-standard file/directory found at top level:
    ‘codemeta.json’

Comments on vignettes and documentation and comments on trying to use the functions (organized based on sections of the pkgdown website https://s3alfisc.github.io/fwildclusterboot/index.html)

  • README

    • The hex logo appears twice
  • Get Started Vignette

    • The vignette could go over why it is important to run many bootstrap replications. And, what does many mean? Also, is there a point where the number of bootstraps is too excessive?

    • The vignette could also provide a high level overview of the algorithm that makes cluster wild bootstrapping run fast, especially in R. The fastness seems to be the core idea behind the package so some detail on that somewhere on the vignette might be good.

    • Under the The boottest() function section, the text says that you are creating a random dataset but the code shows that you are using the voters dataset.

    • The vignette could also go over when to use which weights. For example, if we have a small number of clusters, Rademacher weights may not be appropriate.

  • Function Reference

    • The functions could be grouped together in some logical way. Right now, the list of functions is organized alphabetically.

    • I like the tidy() implementation a lot. Small improvement would be to change the column names to snake_case and add which types of weights were used to bootstrap (e.g., Rademacher).

    • I am a bit confused about interpreting the plot from the plot() function. A bit more explanation of what the blue and red lines mean could help :)

    • A bit more explanation on the different bootstrap_type options would help too.

    • In the documentation page for boottest it says we can use either boottest's seed argument or set the seed globally using set.seed() and dqrng::dqset.seed(). I tried using the seed argument but was not able to run it. Adding the seed argument directly to the boottest function would be an improvement and make the set up more use-friendly rather than having to set seed using both set.seed()and dqrng::dqset.seed().

    library(fwildclusterboot)
    
    dqrng::dqset.seed(2352342)
    set.seed(23325)
    
    data(voters)
    
    # estimate the regression model via lm
    lm_fit <- lm(
      proposition_vote ~ treatment + ideology1 + log_income + Q1_immigration , 
      data = voters
    )
    
    boot_lm <- boottest(
      lm_fit, 
      clustid = "group_id1",
      param = "treatment",
      B = 9999,
      seed = 20230412
    )
Error: in boottest.lm(lm_fit, clustid = "group_id1", param ...:
 'seed' is not a valid argument of function boottest.lm.
In addition: Warning message:
Please note that the seeding behavior for random number generation for `boottest()` has changed with `fwildclusterboot`
version 0.13.

It will no longer be possible to exactly reproduce results produced by versions lower than 0.13.

If your prior results were produced under sufficiently many bootstrap iterations, none of your conclusions will change.  For
more details about this change, please read the notes in
[news.md](https://cran.r-project.org/web/packages/fwildclusterboot/news/news.html).
This warning is displayed once per session. 
Called from: stop_up(my_call, res)
  • Vignettes fwildclusterboot and fixest

    • This vignette could use more explanation.

@helske
Copy link

helske commented Apr 14, 2023

Thanks for the review @meghapsimatrix! I apologize that unfortunately it seems that the review template link in my email was incorrect, as your review used the basic template used for non-statistical-software packages. Would you mind filling the correct one, which can be found here: https://stats-devguide.ropensci.org/pkgreview.html#pkgrev-template?

@s3alfisc I am still seeking for another reviewer, you might want to hold on with non-trivial software updates and replies until we've gotten a second review as well.

@meghapsimatrix
Copy link

meghapsimatrix commented Apr 14, 2023 via email

@s3alfisc
Copy link
Author

Thanks for your review @meghapsimatrix! I will start incorporating your feedback over the next days and will also reply in more detail =)

@ropensci-review-bot
Copy link
Collaborator

📆 @meghapsimatrix you have 2 days left before the due date for your review (2023-04-17).

@s3alfisc
Copy link
Author

Hi @meghapsimatrix, first of all, thanks for your review! It thought it easiest to address it point by point =)

  • Urgh, the json.meta warning. I have to google how to suppress that message. CRAN also always complains about that file. There's likely a workaround somewhere =)
  • I agree with all of your comments on vignette improvements and have opened a PR. In general, I think that I could do a much better job explaining the different bootstrap types, and also give some more guidance which bootstraps to run (and how to run them). I have added a vignette with a brief literature section on the wild bootstrap, please let me know in case I forgot a key paper!
  • I'll also rethink the fwildclusterboot and fixest vignette - I mostly have it because I would frequently get questions on how to use fixest multiple estimation capabilities with boottest, and thought it might be good to have something to point to.
  • The seed argument has been causing me quite some headache lately. More or less, I just deleted it in the last version I published. The reason for this is that calling set.seed() and dqrng.dqset.seed() in a function overwrites the global seed state, which is likely not super dangerous in the way users might interact with fwildclusterboot, but considered bad practice. I have an entire discussion with myself here =) I should definitely delete the seed argument you found in the vignette though!

Best, Alex

@meghapsimatrix
Copy link

Here is the correct template filled out :) @s3alfisc thanks for addressing my comments :) Great job on this super useful package :)

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

  • 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

  • This package complies with a sufficient number of standards for a silver badge
  • 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.

- G1.0 is well documented. The authors have made clear connections to academic literature.

- G.1.1 is also well documented. The authors provide citations to the novel-ness of the algorithm in general and in R.

- G.1.3 Some statistical terminology could be expanded upon more. For example, vignettes use terms like restricted and unrestricted bootstraps which could use bit more explanation :)

- RE4.18 and 4.3 to 4.5 Summary output and tidy outputs are well done.

For packages aiming for silver or gold badges:

  • This package extends beyond minimal compliance with standards in the following ways: (please describe)

- Compliance with a good number of standards beyond those identified as minimally necessary. Numbers of standards: G : 50 / 68; RE : 20 / 48; Total : 70 / 116

- Demonstrating excellence in compliance with multiple standards from at least two broad sub-categories.The package demonstrates excellence in compliance with G.1.0, G.1.1, RE4.18 and RE4.3 to 4.5

- Generality of usage beyond one single envisioned use case. The package supports ordinary least squares (OLS), fixed effects, and instrumental variables (IV) regression models. Subcluster bootstrapping, multiway bootstrapping, confidence intervals calculations are also supported.

- Internal aspects of package structure and design. Algorithms are written in a way that is efficient, flexible, generalizable, and accurate. Right now the package works for OLS and IV models. More types of models, like multilevel models, could be incorporated.


General Review

Documentation

The package includes all the following forms of documentation:

  • A statement of need clearly stating problems the software is designed to solve and its target audience in README
  • Installation instructions: for the development version of package and any non-standard dependencies in README
  • Community guidelines including contribution guidelines in the README or CONTRIBUTING
  • The documentation is sufficient to enable general use of the package beyond one specific use case

  • Packaging guidelines: The package conforms to the rOpenSci packaging guidelines

Estimated hours spent reviewing: 10 hours

  • Should the author(s) deem it appropriate, I agree to be acknowledged as a package reviewer ("rev" role) in the package DESCRIPTION file.

Further Comments

I already provided narrative comments which have been addressed :) Thanks!!

@s3alfisc
Copy link
Author

Hi Megha, I have opened a (yet incomplete PR) on the dev branch to incorporate your feedback. The idea is to add a "FAQ" vignette in which I will try to explain some key concepts without too much technical jargon. I have also added you as a package contributor!

@meghapsimatrix
Copy link

meghapsimatrix commented Apr 29, 2023 via email

@helske
Copy link

helske commented May 8, 2023

@ropensci-review-bot assign @markean as reviewer

@ropensci-review-bot
Copy link
Collaborator

@markean added to the reviewers list. Review due date is 2023-05-29. Thanks @markean 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.

@ropensci-review-bot
Copy link
Collaborator

@markean: If you haven't done so, please fill this form for us to update our reviewers records.

@ropensci-review-bot
Copy link
Collaborator

📆 @markean you have 2 days left before the due date for your review (2023-05-29).

@markean
Copy link
Member

markean commented May 28, 2023

Hi @s3alfisc. Thank you for submitting your interesting package. I have attached my review below, which is based on the latest GitHub version. Hope it is helpful!

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

  • 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

  • This package complies with a sufficient number of standards for a (bronze/silver/gold) badge
  • 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.

I have checked the standards via the srr package by running srr::srr_report(). The author has put all the tags in a single file and just stated that many standards have been applied (e.g., Done, Yes, Checked, etc.), which makes it rather difficult to see how each standard has been reflected in the code. It would be easier to review if the tags were placed in relevant locations of the package. Below I have some comments on the compliance with standards.

  • G2.3b: It seems many character inputs are case sensitive.
    For example, see below.
library(fwildclusterboot)
lm_fit <- lm(
  proposition_vote ~ treatment + ideology1 + log_income + Q1_immigration,
  data = voters
)
boot <- boottest(lm_fit,
  B = 1000, param = "treatment", clustid = "group_id1",
  type = "NORM"
)
Error: in boottest.lm(lm_fit, B = 1000, param = "...:
 Argument 'type' must be a
single character equal to
'rademacher', 'mammen',
'norm', 'gamma' or 'webb'.
Problem: the value 'NORM'
doesn't match any choice
(note that no partial
matching is performed).
  • RE1.0: Which parameter can be specified as a formula? Do you have any example?

  • RE1.1: Should it be tagged as 'srrstatsNA'?

  • RE3.0, RE3.1: Apart from the code quality, can the error/warning message be suppressed? This is not explicitly stated.

  • RE5.0, RE6.1, RE6.2, RE6.3, RE7.0: No response can be found in the srr-stats-standards.R file. Are they all not applicable?

  • G5.8a, G5.8b: Why are they not applicable? Are they tested?

  • RE4.8 ~ RE7.4 (at the bottom of the srr-stats-standards.R file): No response can be found.

For packages aiming for silver or gold badges:

  • This package extends beyond minimal compliance with standards in the following ways: (please describe)

General Review

Documentation

The package includes all the following forms of documentation:

  • A statement of need clearly stating problems the software is designed to solve and its target audience in README
  • Installation instructions: for the development version of package and any non-standard dependencies in README
  • Community guidelines including contribution guidelines in the README or CONTRIBUTING
  • The documentation is sufficient to enable general use of the package beyond one specific use case

I think adding 'Details' sections in the generic boottest() function would improve general accessability. Some high-level descriptions, such as what each method does depending on the object class or what assumptions are made, would be helpful. See, for example, https://r-pkgs.org/man.html#title-description-details. Although references are introduced in the documentation, many users would not be willing to search for the articles. Additionally, the reference section could adopt a coherent bibliographical style.

Algorithms

It seems there is no way to gracefully interrupt or abort the execution of the boottest() function in an R session.
This can be an issue especially in the bootstrap context where the iteration number could be very large.
It can be difficult address this issue when interfacing with other languages or APIs in R, but I was wondering if this has been considered in the package design.

Visualisation (where appropriate)

In the plot() method, it needs to be explained what the blue and red lines indicate either in the plot itself or in the documentation. Additionally, since it is a generic method, it would be good if the method supports other arguments. It does not accept some common arguments, which contradicts the usage of ... in the documentation.
See below.

library(fwildclusterboot)
lm_fit <- lm(
  proposition_vote ~ treatment + ideology1 + log_income + Q1_immigration,
  data = voters
)
boot <- boottest(lm_fit,
  B = 9999,
  param = "treatment",
  clustid = "group_id1"
)
plot(boot, main = "My Title")
Error: in plot.boottest(boot, main = "Title"):
 'main' is not a valid argument of function plot.boottest.

Package Design

  • The argument R in the boottest() function currently seems to only accept a numeric vector. Many existing R packages for hypothesis testing (e.g., the car package with the hypothesis.matrix argument in the linearHypothesis() function or the multcomp package with the linfct argument in the glht() function) allow users to specify a hypothesis symbolically (or at least using a character vector). Can this feature be added in the package? I believe new users to this package would expect this functionality.

  • Can the seed mechanism be unified using only the set.seed() function? Many users would expect reproducibility by simply using set.seed(), not dqrng::dqset.seed().

Others

The use of rlang for producing informative messages to the console is very good. However, unexpected line breaks occur for lengthy messages. This seems to be caused by manually applied or typed margin columns. Although it is aesthetically pleasing in the source code, I would recommend fixing this issue for general users. See below for example.

library(fwildclusterboot)
lm_fit <- lm(
  proposition_vote ~ treatment + ideology1 + log_income +
    Q1_immigration,
  data = voters
)
boot <- boottest(lm_fit,
  B = 9999,
  clustid = c("group_id1", "group_id2"),
  param = c("treatment", "ideology1"),
  R = c(1, 1, 1),
  r = 2
)
Error in `process_R()`:
! The constraints vector must either be NULL or a numeric of
           the same length as the `param` input vector.

  • Packaging guidelines: The package conforms to the rOpenSci packaging guidelines

Estimated hours spent reviewing: 12 hours

  • Should the author(s) deem it appropriate, I agree to be acknowledged as a package reviewer ("rev" role) in the package DESCRIPTION file.

@s3alfisc
Copy link
Author

Hi @markean,

Thanks a lot for your thorough and very helpful review! One key takeaway from your and @meghapsimatrix's review is that I should assume less specialized knowledge from my package's users and explain multiple concepts in more detail. I will definitely work on that!

Statistical Software Standards

I am sorry about not placing the standard tags in the code - I tried this at some point, but it soon appeared to me that my code would be clustered with tags if I handled it that way. Maybe I should have just done so anyways, and am happy to do it if it helps you assess how the package complies with standards, @markean.

Regarding the standards that you mentioned in more detail:

  • RE1.0: Which parameter can be specified as a formula? Do you have any example?
    The param and clustid arguments can be specified as formula. E.g. you can run boottest() as

    library(fwildclusterboot)
    data(voters)
    fit <- lm(proposition_vote ~ treatment, data = voters)
    boottest(fit, param = ~treatment, clustid = ~group_id1, B = 999)
  • RE1.1: Should it be tagged as 'srrstatsNA'?
    Yes, you are right!

  • RE3.0, RE3.1: Apart from the code quality, can the error/warning message be suppressed? This is not explicitly stated.
    No, this is currently not possible, and I will put a verbose argument on my to do list. Great suggestion, thanks!

  • RE5.0, RE6.1, RE6.2, RE6.3, RE7.0: No response can be found in the srr-stats-standards.R file. Are they all not applicable? Yes, they are either not applicable, or I did not fully understand what they are asking for... 😅 I will make sure to add them to the non-applicable section and add a comment.

  • G5.8a, G5.8b: Why are they not applicable? Are they tested?
    Regarding the zero length data, I thought it would be not applicable, as data is practically never provided to boottest(). For all other non-supported data types, I assumed that I should allow anything that passes through lm() / model.matrix(). The key bottleneck is for models with fixed effect estimation, where I internally transform all model fixed effects to a factor. I have currently one open bug, which occurs when there is a date variable specified in the model. In this case, the creation of the model.frame() of the clustering variable fails. I will have to fix this bug, and add a particular test case. Are there any other special variable types you think I should be testing?

  • RE4.8 ~ RE7.4 (at the bottom of the srr-stats-standards.R file): No response can be found. Yes - for some cases, I did not even try to provide a response, as they appeared too "out of scope". I.e. for
    "RE6.3 Where a model object is used to generate a forecast (for example, through a predict() method), the default plot method should provide clear visual distinction between modelled (interpolated) and forecast (extrapolated) values."
    I did not provide an explanation for applicability or non-applicability, because prediction is clearly so much out of scope. For reasons of housekeeping, it would probably have been better if I had added a "out of scope" or "no forecasting functionality" comment. I will make sure to add these comments.

Other comments

I think adding 'Details' sections in the generic boottest() function would improve general accessability.

This is a great suggestion, I will make sure to add this.

It seems there is no way to gracefully interrupt or abort the execution of the boottest() function in an R session.

In fact I currently don't know how to do this. The "main" algorithm is fully vectorized. The c++ code that cannot be interrupted is either a matrix multiplication via rcpp::eigen or the creation of the G X B bootstrap weights matrix. For the heteroskedastic bootstrap, there are some c++ for loops, and I think that rcpp provides options to (more or less, or even fully) gracefully abort. I will read up on this!

In the plot() method, it needs to be explained what the blue and red lines indicate either in the plot itself or in the documentation. Additionally, since it is a generic method, it would be good if the method supports other arguments. It does not accept some common arguments, which contradicts the usage of ... in the documentation.

All great points, I'll work on that.

  • Regarding multiple contrast tests - I can implement wild bootstrapped F-tests, and so far mostly have not done so because there are other R packages that handle this (e.g. @meghapsimatrix wildmeta) and because the algorithm in the fast and wild paper is quite cumbersome :D But based on the algorithms in the new-ish MacKinnon et al papers, it should be one day of work to implement a Wald test (note that I am always too optimistic with these things). Btw, note that a Wald test can be run via the mboottest() functions, but only through WildBootTests.jl.

Can the seed mechanism be unified using only the set.seed() function? Many users would expect reproducibility by simply using set.seed(), not dqrng::dqset.seed().

Unfortunately, I don't think so. Generation of rademacher, webb and normal weights via dqrng::dqset.seed() is significantly faster than via e.g. stats::sample() (see the benchmark I have once posted here). But unfortunately, the dqrng package does not support Mammen weights. though I think this option will be added soon. So I think that I could fully switch to dqrng for the random sampling for the cluster bootstrap. For the heteroskedastic bootstrap, I sample "directly in rcpp", which does not allow me to call drqrng (at least not without jumping through some hoops and calling it's c/c++ code directly, which I am afraid might be beyond my abilities). So for now, I don't think I can change this, or at least not without significant time investment. One solution could be the following: I could introduce a fwildclusterboot::set_seed() function, that calls set.seed() and dqrng::dqset.seed() and explicitly tells users that both functions are being called. This + very explicit documentation might be a good option?

  • On rlang error message line breaks - I think I introduced these to pass the goodpractice line length checks 😅 There's probably a way to stay within the 80 character limit and not have these annoying breaks in the console. I'll do some googling / ask chatGPT =)

So, this was a very long response - sorry about that 😄. Thanks so much for your review @markean! I will try to address all your (and @meghapsimatrix's) feedback swiftly (I plan to work on it over the next weekend) and will ping you once there are updates / once I am finished.

Best, Alex

@mpadge
Copy link
Member

mpadge commented May 30, 2023

@s3alfisc Perspective from the rOpenSci stats team is that standards documentation should definitely be done inline, at each point in the code at which compliance actually occurs. This enables both easy understanding of compliance, and far easier long-term maintenance for you, as you yourself then don't have to constantly switch back-and-forth between two separate locations for code and compliance documentation. We have also updated our check system to ensure that documentation of stats compliance is not concentrated in a single file, so your package may well fail that check if run again now? (If you want to see, it's probably best to set up our pkgcheck-action workflow in your repo, rather than cluttering the review here with extra checks.) Hope that helps 😃

@s3alfisc
Copy link
Author

Thanks @mpadge! This is the first thing I'll tackle then :)

@s3alfisc
Copy link
Author

Just to give an update - I am working on incorporating feedback into the package (see the dev branch). I hope that I will be done by the end of next weekend.

@jhollist
Copy link
Member

jhollist commented Dec 8, 2023

@s3alfisc I am currently serving as the rOpenSci EIC and just checking in on things.

How's it coming on the updates to your package from the review process?

@s3alfisc
Copy link
Author

Hi @jhollist , thanks for checking up on this.

The honest status update is that I have, to some degree, given up on adressing all of the comments I received out of the review process. The main hurdle are the inline standards documentation via roxygen tags. To some degree, I feel that many of them do not really apply to the package, as fwildclusterboot is not a package for regression fitting but for regression inference. And then with the tags that do apply, it seems like an incredible amount of work to put them in every single spot of the package where they apply. I've started this multiple times but have repeatedly given up.

On the other hand, I did incorporate many of the other points I got feedback on:

I'm not really sure what the best way forward will be. I have quite a bit of time off until the New Year, so chances are I pull myself together and make sure all the tags can be found in the codebase. To put some pressure on me - how about we keep this review open until Jan 2, and if I haven't made sufficient progress until then, we close the review?

Best, Alex

@ldecicco-USGS
Copy link

@helske , do you have any feedback for @s3alfisc ? I'm also going to tag @mpadge concerning the feedback about difficulties in the inline standards documentation via roxygen tags. I have no experience to offer any help on that topic.

@s3alfisc
Copy link
Author

s3alfisc commented Mar 2, 2024

Hi, reposting for visibility a message I sent to @mpadge on the topic:

In my memory, the main thing that I still needed to do for the fwildclusterboot review was to include the srr tags into the fwildclusterboot codebase. For every tag that was relevant, I placed it in at least one point in the codebase - I decided not to place the same tags in each boottest() method, e.g. only boottest_fixest is properly tagged whereas boottest_lm and boottest_lfe are not.
For quite a few tags, I could not find the "one" spot in the codebase, so I left them in the srr file with a comment. For example for a tag as "never compare ints with bools", I could not find a proper spot. I just don't think I do so! Otherwise, many tags are just not relevant - as fwildclusterboot is a post regression method, NA values need to be handled by the regression package which fwildclusterboot supports; or all tags relating predictions.
Beyond my main takeaway from the second review was that I needed to fix the standards and improve the documentation of statistical terms. #546 (comment) For this, I have significantly revised the vignettes at some point, added details sections to the docs, etc. There are other things that I am not perfectionist enough to fix, i.e. a consistent citation format for all references, and then things that I simply cannot fix.

@helske
Copy link

helske commented Mar 4, 2024

@mpadge please correct me if I'm wrong, but my impression on the standard tags is that it is fine to have some general tags relevant for the whole package for example in the main package documentation, e.g., in fwildclusterboot-package.R which could contain some overall info on the package accessible by ?fwildclusterboot (similar text as in the DESCRIPTION). For non-applicable standards, you could also include these in the above file as well, with a short description on why they do not apply, which I see you have already done in the srr-stats-standards.R.

Other than than the placement of the standards, if you feel that you have adequately reacted to all points by the reviewers, then we can ask them to take a look and see if they feel ready to approve the package.

@mpadge
Copy link
Member

mpadge commented Mar 4, 2024

@ldecicco-USGS and @helske I've had a look through the code, and from my side at least would now be happy with the way that the standards have been documented in-line within the code. I've opened a short TODO list for @s3alfisc at s3alfisc/fwildclusterboot#149. Alex, please report back once you've addressed those, and all should be good to proceed. Thanks 👍

@s3alfisc
Copy link
Author

s3alfisc commented Mar 6, 2024

I'll tackle all of your suggestions this weekend. Thanks for the feedback @mpadge! I'll report here once I think I am done =)

@emilyriederer
Copy link

Hey @s3alfisc ! I'm taking over as EoC this quarter and doing a review of currently open issues. Are you still actively working on these changes or should we consider putting this review on hold?

@mpadge
Copy link
Member

mpadge commented Nov 11, 2024

Encouragement from me Ale not to put this hold - it seems like the package is really close 🤞 As always, I'm happy to help any way i can.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests