Проблема в воспроизводимости тестов с testthat - PullRequest
0 голосов
/ 20 мая 2019

Я пишу R пакет , потратил одну неделю, гоняясь за одной ошибкой, и написал тесты для нее с разных точек зрения.Одним из них является то, что средний результат статистической выборки находится в определенных пределах.Я добавил set.seed(1) перед отбором проб, чтобы обеспечить воспроизводимость.В выборке используются значения rstan и stats::rbinom.

. Я печатаю среднее значение двух коэффициентов, и распечатка теста отличается на двух разных прогонах.Первый прогон дает:

...
Chain 1: COMPLETED.
[1] 0.3247559
[1] -0.1190542
...

, а второй -:

Chain 1: COMPLETED.
[1] 0.3181746
[1] -0.1384806

Почему это не воспроизводимо?Должен ли я устанавливать другое начальное число?

Полный тест, который использует много функций в пакете, является:

test_that("Adaptive non-parametric learning with posterior samples works well", {

  german <- load_dataset(list(name = k_german_credit))
  n_bootstrap <- 100

  # Get posterior samples
  prior_variance <- 100
  bayes_logit_model <- rstan::stan_model(file = get_rstan_file())
  train_dat <- list(n = german$n,
                    p = german$n_cov + 1,
                    x = cbind(1, german$x),
                    y = 0.5 * (german$y + 1),
                    beta_sd = sqrt(prior_variance))

  set.seed(1)
  stan_vb <- rstan::vb(bayes_logit_model,
                       data = train_dat,
                       output_samples = n_bootstrap,
                       seed = 123,
                       iter = 100)
  stan_vb_sample <- rstan::extract(stan_vb)$beta

  # Use these samples in ANPL with multiple cores
  anpl_samples <- anpl(dataset = german,
                       concentration = 1,
                       n_bootstrap = n_bootstrap,
                       posterior_sample = stan_vb_sample,
                       threshold = 1e-8,
                       num_cores = 2)

  col_means <- colMeans(anpl_samples)
  print(col_means[21])
  print(col_means[22])
  expect_true((col_means[21] >= 0.29) && (col_means[21] <= 0.3),
              "The average coefficient for column 21 is as expected")
  expect_true((col_means[22] >= -0.15) && (col_means[22] <= -0.14),
              "The average coefficient for column 22 is as expected")
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...