tests/testthat/test-mo-bqr-svy.R

# Test for multiple quantile functionality
test_that("mo.bqr.svy basic functionality works", {
  set.seed(789)  # Reproducibility

  # Generate test data
  n <- 25  # Small sample for speed
  x <- rnorm(n)
  y <- 1 + 2*x + rnorm(n, 0, 0.5)
  data <- data.frame(x = x, y = y)

  # Test multiple quantile regression
  quantiles <- c(0.25, 0.5, 0.75)
  fit <- mo.bqr.svy(y ~ x, data = data, quantile = quantiles, max_iter = 1500)

  # Test basic structure
  expect_s3_class(fit, "mo.bqr.svy")
  expect_true(is.list(fit))
  expect_true("fit" %in% names(fit))
  expect_true("quantile" %in% names(fit))
  expect_true("call" %in% names(fit))

  # Test dimensions
  expect_equal(length(fit$fit), 3)  # three quantiles
  expect_equal(fit$quantile, quantiles)

  # Test that each fit has proper structure
  for (i in 1:3) {
    expect_true("directions" %in% names(fit$fit[[i]]))
    expect_true("dir_1" %in% names(fit$fit[[i]]$directions))
    expect_true("beta" %in% names(fit$fit[[i]]$directions$dir_1))
    expect_true("sigma" %in% names(fit$fit[[i]]$directions$dir_1))

    expect_true(all(is.finite(fit$fit[[i]]$directions$dir_1$beta)))
    expect_true(is.finite(fit$fit[[i]]$directions$dir_1$sigma))
  }


  # Extract slope coefficients (assuming "x" is the 2nd coefficient)
  beta1_values <- sapply(fit$fit, function(f) {
    f$directions$dir_1$beta[2]
  })

  # Allow some flexibility due to randomness in simulation
  expect_true(all(diff(beta1_values) >= -0.5))

})

test_that("mo.bqr.svy handles different numbers of quantiles", {
  set.seed(101112)

  n <- 20
  x <- rnorm(n)
  y <- x + rnorm(n, 0, 0.3)
  data <- data.frame(x = x, y = y)

  # Test with 2 quantiles
  fit_2 <- mo.bqr.svy(y ~ x, data = data, quantile = c(0.3, 0.7), max_iter = 1500)
  expect_s3_class(fit_2, "mo.bqr.svy")
  expect_equal(length(fit_2$fit), 2)

  # Test with 5 quantiles
  fit_5 <- mo.bqr.svy(y ~ x, data = data,
                      quantile = c(0.1, 0.25, 0.5, 0.75, 0.9), max_iter = 1500)
  expect_s3_class(fit_5, "mo.bqr.svy")
  expect_equal(length(fit_5$fit), 5)
})

test_that("mo.bqr.svy input validation", {
  n <- 15
  data <- data.frame(x = rnorm(n), y = rnorm(n))

  # Test invalid quantiles
  expect_error(mo.bqr.svy(y ~ x, data = data, quantile = c(0.5, 1.5)))
  expect_error(mo.bqr.svy(y ~ x, data = data, quantile = c(-0.1, 0.5)))
  expect_error(mo.bqr.svy(y ~ x, data = data, quantile = c()))  # empty

  # Test unsorted quantiles
  fit <- mo.bqr.svy(y ~ x, data = data, quantile = c(0.7, 0.3, 0.5), max_iter = 1500)
  expect_equal(fit$quantile, c(0.3, 0.5, 0.7))  # Should be sorted
})

Try the bayesQRsurvey package in your browser

Any scripts or data that you put into this service are public.

bayesQRsurvey documentation built on July 8, 2026, 1:08 a.m.