stan-dev / stan

Stan development repository. The master branch contains the current release. The develop branch contains the latest stable development. See the Developer Process Wiki for details.
https://mc-stan.org
BSD 3-Clause "New" or "Revised" License
2.59k stars 370 forks source link

Confusing warning for low-sample-size runs #2064

Open davidmanheim opened 8 years ago

davidmanheim commented 8 years ago

Summary:

When running Stan programs with low sample sizes (under 300 samples,) Stan returns a (confusing/spurious?) warning regarding the warmup.

Description:

When running an analysis with a sample size under 300, the following warning is generated;

WARNING: The initial buffer, adaptation window, and terminal buffer overflow the total number of warmup iterations. Defaulting to a 15%/75%/10% partition, {List of used valuesfor each}

Reproducible Steps:

In R, run;

library(rstan)
stanmodelcode <- "
data {
int<lower=0> N;
real y[N];
} 

parameters {
real mu;
} 

model {
target += normal_lpdf(mu | 0, 10);
target += normal_lpdf(y  | mu, 1);
} 
"

y = rnorm(20) 
dat = list(N = 20, y = y); 
fit = stan(model_code = stanmodelcode, model_name = "example", 
            data = dat, iter = 290, chains = 3, sample_file = 'norm.csv',
            verbose = TRUE)

Current Output:

SAMPLING FOR MODEL 'example' NOW (CHAIN 1).
WARNING: The initial buffer, adaptation window, and terminal buffer
         overflow the total number of warmup iterations.
         Defaulting to a 15%/75%/10% partition,
           init_buffer = 21
           adapt_window = 110
           term_buffer = 14

Chain 1, Iteration:   1 / 290 [  0%]  (Warmup)
{etc. - Runs fine}

Expected Output:

No warning, or perhaps;

WARNING: The number of warmup iterations is below the recommended amount.

Additional Information

This error message occurs even when you specify the number of the buffers and window to rstan;

fit <- stan(model_code = stanmodelcode, model_name = "example", 
            data = dat, iter = 200, chains = 1, 
            control=list(c(adapt_init_buffer=10, adapt_term_buffer=10, adapt_window=10)),verbose =TRUE) 

Current Version:

v2.12.0

bob-carpenter commented 8 years ago

I agree that would be a better warning message.

As an aside, we try to separate usage of "sample" and "draw", with a single sample being made up of multiple draws.

bob-carpenter commented 7 years ago

Add another message that "warmup is less than the recommended minimum 150 iterations" and then continue to dump a more detailed message that indicates it's just detail.