Skip to content

Commit 4ff4d45

Browse files
authored
Merge pull request #145 from StochasticTree/cran-valgrind-hotfix
Fixed R examples with uninitialized random effects terms (which triggered valgrind errors in CRAN checks)
2 parents 36dc033 + c6c0b6b commit 4ff4d45

8 files changed

+110
-18
lines changed

DESCRIPTION

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,6 @@ SystemRequirements: C++17
4949
Imports:
5050
R6,
5151
stats
52-
URL: https://stochtree.ai
52+
URL: https://stochtree.ai/, https://github.com/StochasticTree/stochtree
53+
BugReports: https://github.com/StochasticTree/stochtree/issues
5354
Config/testthat/edition: 3

R/random_effects.R

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,18 @@ createRandomEffectsModel <- function(num_components, num_groups) {
416416
#' rfx_model <- createRandomEffectsModel(num_components, num_groups)
417417
#' rfx_tracker <- createRandomEffectsTracker(rfx_group_ids)
418418
#' rfx_samples <- createRandomEffectSamples(num_components, num_groups, rfx_tracker)
419+
#' alpha_init <- rep(1,num_components)
420+
#' xi_init <- matrix(rep(alpha_init, num_groups),num_components,num_groups)
421+
#' sigma_alpha_init <- diag(1,num_components,num_components)
422+
#' sigma_xi_init <- diag(1,num_components,num_components)
423+
#' sigma_xi_shape <- 1
424+
#' sigma_xi_scale <- 1
425+
#' rfx_model$set_working_parameter(alpha_init)
426+
#' rfx_model$set_group_parameters(xi_init)
427+
#' rfx_model$set_working_parameter_cov(sigma_alpha_init)
428+
#' rfx_model$set_group_parameter_cov(sigma_xi_init)
429+
#' rfx_model$set_variance_prior_shape(sigma_xi_shape)
430+
#' rfx_model$set_variance_prior_scale(sigma_xi_scale)
419431
#' for (i in 1:3) {
420432
#' rfx_model$sample_random_effect(rfx_dataset=rfx_dataset, residual=outcome,
421433
#' rfx_tracker=rfx_tracker, rfx_samples=rfx_samples,
@@ -458,6 +470,18 @@ resetRandomEffectsModel <- function(rfx_model, rfx_samples, sample_num, sigma_al
458470
#' rfx_model <- createRandomEffectsModel(num_components, num_groups)
459471
#' rfx_tracker <- createRandomEffectsTracker(rfx_group_ids)
460472
#' rfx_samples <- createRandomEffectSamples(num_components, num_groups, rfx_tracker)
473+
#' alpha_init <- rep(1,num_components)
474+
#' xi_init <- matrix(rep(alpha_init, num_groups),num_components,num_groups)
475+
#' sigma_alpha_init <- diag(1,num_components,num_components)
476+
#' sigma_xi_init <- diag(1,num_components,num_components)
477+
#' sigma_xi_shape <- 1
478+
#' sigma_xi_scale <- 1
479+
#' rfx_model$set_working_parameter(alpha_init)
480+
#' rfx_model$set_group_parameters(xi_init)
481+
#' rfx_model$set_working_parameter_cov(sigma_alpha_init)
482+
#' rfx_model$set_group_parameter_cov(sigma_xi_init)
483+
#' rfx_model$set_variance_prior_shape(sigma_xi_shape)
484+
#' rfx_model$set_variance_prior_scale(sigma_xi_scale)
461485
#' for (i in 1:3) {
462486
#' rfx_model$sample_random_effect(rfx_dataset=rfx_dataset, residual=outcome,
463487
#' rfx_tracker=rfx_tracker, rfx_samples=rfx_samples,
@@ -493,15 +517,21 @@ resetRandomEffectsTracker <- function(rfx_tracker, rfx_model, rfx_dataset, resid
493517
#' rng <- createCppRNG(1234)
494518
#' num_groups <- length(unique(rfx_group_ids))
495519
#' num_components <- ncol(rfx_basis)
496-
#' alpha_init <- c(1)
520+
#' rfx_model <- createRandomEffectsModel(num_components, num_groups)
521+
#' rfx_tracker <- createRandomEffectsTracker(rfx_group_ids)
522+
#' rfx_samples <- createRandomEffectSamples(num_components, num_groups, rfx_tracker)
523+
#' alpha_init <- rep(1,num_components)
497524
#' xi_init <- matrix(rep(alpha_init, num_groups),num_components,num_groups)
498525
#' sigma_alpha_init <- diag(1,num_components,num_components)
499526
#' sigma_xi_init <- diag(1,num_components,num_components)
500527
#' sigma_xi_shape <- 1
501528
#' sigma_xi_scale <- 1
502-
#' rfx_model <- createRandomEffectsModel(num_components, num_groups)
503-
#' rfx_tracker <- createRandomEffectsTracker(rfx_group_ids)
504-
#' rfx_samples <- createRandomEffectSamples(num_components, num_groups, rfx_tracker)
529+
#' rfx_model$set_working_parameter(alpha_init)
530+
#' rfx_model$set_group_parameters(xi_init)
531+
#' rfx_model$set_working_parameter_cov(sigma_alpha_init)
532+
#' rfx_model$set_group_parameter_cov(sigma_xi_init)
533+
#' rfx_model$set_variance_prior_shape(sigma_xi_shape)
534+
#' rfx_model$set_variance_prior_scale(sigma_xi_scale)
505535
#' for (i in 1:3) {
506536
#' rfx_model$sample_random_effect(rfx_dataset=rfx_dataset, residual=outcome,
507537
#' rfx_tracker=rfx_tracker, rfx_samples=rfx_samples,
@@ -540,15 +570,21 @@ rootResetRandomEffectsModel <- function(rfx_model, alpha_init, xi_init, sigma_al
540570
#' rng <- createCppRNG(1234)
541571
#' num_groups <- length(unique(rfx_group_ids))
542572
#' num_components <- ncol(rfx_basis)
543-
#' alpha_init <- c(1)
573+
#' rfx_model <- createRandomEffectsModel(num_components, num_groups)
574+
#' rfx_tracker <- createRandomEffectsTracker(rfx_group_ids)
575+
#' rfx_samples <- createRandomEffectSamples(num_components, num_groups, rfx_tracker)
576+
#' alpha_init <- rep(1,num_components)
544577
#' xi_init <- matrix(rep(alpha_init, num_groups),num_components,num_groups)
545578
#' sigma_alpha_init <- diag(1,num_components,num_components)
546579
#' sigma_xi_init <- diag(1,num_components,num_components)
547580
#' sigma_xi_shape <- 1
548581
#' sigma_xi_scale <- 1
549-
#' rfx_model <- createRandomEffectsModel(num_components, num_groups)
550-
#' rfx_tracker <- createRandomEffectsTracker(rfx_group_ids)
551-
#' rfx_samples <- createRandomEffectSamples(num_components, num_groups, rfx_tracker)
582+
#' rfx_model$set_working_parameter(alpha_init)
583+
#' rfx_model$set_group_parameters(xi_init)
584+
#' rfx_model$set_working_parameter_cov(sigma_alpha_init)
585+
#' rfx_model$set_group_parameter_cov(sigma_xi_init)
586+
#' rfx_model$set_variance_prior_shape(sigma_xi_shape)
587+
#' rfx_model$set_variance_prior_scale(sigma_xi_scale)
552588
#' for (i in 1:3) {
553589
#' rfx_model$sample_random_effect(rfx_dataset=rfx_dataset, residual=outcome,
554590
#' rfx_tracker=rfx_tracker, rfx_samples=rfx_samples,

cran-comments.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,20 @@ We have converted `T` and `F` to `TRUE` and `FALSE` in the R code.
2727
> Some code lines in examples are commented out. Please never do that.
2828
2929
We no longer do this, and apologize for the oversight.
30+
31+
## CRAN comments (20250207)
32+
33+
Below we address issues raised by CRAN on Feb 7, 2025
34+
35+
### Valgrind
36+
37+
A valgrind-instrumented version of R exposed memory issues in several examples
38+
in the `stochtree` documentation. The specific issue is
39+
40+
> Conditional jump or move depends on uninitialised value(s)
41+
42+
The examples that triggered this were in fact working with Eigen matrices
43+
with uninitialized values.
44+
45+
This has been corrected and we have verified that running the `stochtree`
46+
examples no longer produce this memcheck error.

man/resetRandomEffectsModel.Rd

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/resetRandomEffectsTracker.Rd

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/rootResetRandomEffectsModel.Rd

Lines changed: 10 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/rootResetRandomEffectsTracker.Rd

Lines changed: 10 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/stochtree-package.Rd

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)