stan
                                
                                 stan copied to clipboard
                                
                                    stan copied to clipboard
                            
                            
                            
                        Potential issues with slicing
Summary:
CRAN identified with their clang sanitiser tests (see here: https://cran.csiro.au/doc/manuals/r-patched/R-exts.html#Using-Address-Sanitizer) issues in one of my Stan models on CRAN.
When tracing down the log file it appears that statements in the Stan language which use slicing of bigger data-structures are guilty of provoking use of uninitialised memory (and NULL pointers being used where they should not).
Description:
Spoiler alert: I was never myself able to reproduce the problems! Anyway, here are the respective files:
- 
log file from test failure on CRAN: testthat_Rout_fail.txt 
- 
not working Stan model triggering in the above issue: blrm_exnex-0-6-0_stan.txt 
- 
data to run the model as an example: combo3_data_R.txt 
After guessing a bit, I did replace these lines (line 838 of the Stan model); the lines which change is what you should pay attention to as changing these fixed the problem:
      vector[num_mix_comp] mix_lpmf =
          blrm_mix_lpmf_comp(// subset data
              r[obs_gidx],   // <-- this line changes
              n[obs_gidx],   // <-- this line changes
              X_comp[:,obs_gidx],   // <-- this line changes
              finite_cov[:,obs_gidx],  // <-- this line changes
              X_inter[obs_gidx],
              // select EX+NEX of this group
              beta[{g,g+num_groups}], mix_idx_beta, // <-- this line changes
              eta[{g,g+num_groups}], mix_idx_eta).    // <-- this line changes
          // prior weight for each component
          + mix_log_weight[g];
with this, which CRAN now has accepted (line 852):
      vector[num_mix_comp] mix_lpmf =
          blrm_mix_lpmf_comp(// subset data
              g, num_groups,
              obs_gidx,
              r,
              n,
              X_comp,
              finite_cov,
              X_inter,
              // select EX+NEX of this group
              beta, mix_idx_beta,
              eta, mix_idx_eta)
          // prior weight for each component
          + mix_log_weight[g];
So I removed all of the fancier subsetting things from the entire model.
- model which go accepted by CRAN: blrm_exnex-0-6-3_stan.txt
Reproducible Steps:
I was not able to reproduce the findings from CRAN using a CmdStan 2.19 installation. Another route I tried to reproduce this was to use the dedicated Docker images (https://www.rocker-project.org/images/ - the image r-devel-ubsan-clang) which did not help either since it kept crashing way before I was able to run the code in question.
Current Output:
What is interesting to note is that I relatively confident that the 0.6-0 model did compute the right thing as I have a very large SBC battery of tests working on this.
Expected Output:
I would love to change back the Stan model to use the much easier to read subsetting things.
Additional Information:
NA
Current Version:
This affects my R package OncoBayes2 which is build against RStan 2.19.3 / StanHeaders 2.19.2 (this is cmdstan 2.19.1)
Tagging @bob-carpenter , @bgoodri & @seantalts .
Note that RStan uses Stanc2; I don't know if stanc3 is any better or worse. Step 0 in working on this would be to reproduce the error CRAN found.
I see no one really responded hear, so not sure of the status of this issue. @wds15 was this resolved?