tests/testthat/test-countreg.R

test_that("NB-2 model runs and returns correct output", {
  data("washington_roads")
  washington_roads$AADTover10k <- ifelse(washington_roads$AADT>10000,1,0)
  model <- countreg(
    Total_crashes ~ lnaadt + lnlength + speed50 + ShouldWidth04 + AADTover10k,
    data = washington_roads, 
    family = 'nb2', 
    method = 'BHHH', 
    max.iters = 500)  # Reduced from 3000
  
  summary(model, confint_level=0.8, digits=4)
  
  expect_s3_class(model, "flexCountReg")
  expect_true(length(model$model$estimate) > 0)
})

test_that("NB-1", {
  data("washington_roads")
  washington_roads$AADTover10k <- ifelse(washington_roads$AADT > 10000, 1, 0)
  model1 <- countreg(Total_crashes ~ lnaadt + speed50,
                     data = washington_roads, family = "NB1",
                     offset = "lnlength",
                     stderr = "robust")
  
  expect_true(length(model1$model$estimate) > 0)
})


test_that("NB-p with sample weights", {
  set.seed(12345)
  data("washington_roads")
  washington_roads$AADT10kplus <- ifelse(washington_roads$AADT>10000,1,0)
  washington_roads$wgt <- runif(nrow(washington_roads))
  model2 <- countreg(Total_crashes ~ lnaadt + lnlength + speed50 + AADT10kplus,
                     data = washington_roads, family = "NBP", 
                     weights = "wgt", max.iters = 500)  # Reduced from 3000
  
  summary(model2)
  
  expect_true(length(model2$model$estimate) > 0)
})

test_that("Poisson-Lognormal", {
  data("washington_roads")
  washington_roads$AADT10kplus <- ifelse(washington_roads$AADT>10000,1,0)
  model <- countreg(
    Total_crashes ~ lnaadt + lnlength + speed50 + AADT10kplus,
    data = washington_roads, 
    family = "PLN", 
    ndraws = 10)  # Already low - good
  
  expect_s3_class(model, "flexCountReg")
  expect_true(length(model$model$estimate) > 0)
})

test_that("Poisson Generalized-Exponential", {
  data("washington_roads")
  washington_roads$AADT10kplus <- ifelse(washington_roads$AADT > 10000, 1, 0)
  
  model <- suppressWarnings(countreg(Animal ~ lnaadt,
                                     data = washington_roads, 
                                     family = "PGE", 
                                     ndraws=5,
                                     method="NM", 
                                     offset = "lnlength",
                                     dis_param_formula_2 = ~ -1+ AADT10kplus,
                                     max.iters = 200))  # Added iteration limit
  
  expect_s3_class(model, "flexCountReg")
})


test_that("Poisson-Inverse-Gaussian Type 1", {
  data("washington_roads")
  washington_roads$AADT10kplus <- ifelse(washington_roads$AADT>10000,1,0)
  model <- countreg(Total_crashes ~ lnaadt + lnlength + speed50 + AADT10kplus,
                    data = washington_roads, family = "PIG1",
                    max.iters = 500)  # Added limit
  
  expect_s3_class(model, "flexCountReg")
  expect_true(length(model$model$estimate) > 0)
})


test_that("Poisson-Inverse-Gaussian Type 2", {
  data("washington_roads")
  washington_roads$AADT10kplus <- ifelse(washington_roads$AADT>10000,1,0)
  model <- countreg(Total_crashes ~ lnaadt + lnlength + speed50 + AADT10kplus,
                    data = washington_roads, family = "PIG2",
                    max.iters = 500)  # Added limit
  
  expect_s3_class(model, "flexCountReg")
  expect_true(length(model$model$estimate) > 0)
})


test_that("Poisson-Lindley", {
  data("washington_roads")
  washington_roads$AADT10kplus <- ifelse(washington_roads$AADT>10000,1,0)
  model <- suppressWarnings(countreg(Rollover ~ lnaadt + lnlength + speed50,
                                     data = washington_roads, family = "PL",
                                     max.iters = 500))  # Added limit
  
  expect_s3_class(model, "flexCountReg")
  expect_true(length(model$model$estimate) > 0)
})

test_that("Poisson-Lindley-Gamma", {
  data("washington_roads")
  washington_roads$AADT10kplus <- ifelse(washington_roads$AADT>10000,1,0)
  model <- countreg(Animal ~ lnaadt + speed50 + AADT10kplus, 
                    offset= "lnlength",
                    data = washington_roads, family = "PLG", ndraws=10, 
                    method="NM", max.iters = 200)  # Added limit
  
  expect_s3_class(model, "flexCountReg")
  expect_true(length(model$model$estimate) > 0)
})

test_that("Poisson-Lindley-Lognormal", {
  data("washington_roads")
  washington_roads$AADT10kplus <- ifelse(washington_roads$AADT>10000,1,0)
  
  model <- suppressWarnings(countreg(
    Animal ~ lnaadt + speed50 + AADT10kplus,
    offset = "lnlength", 
    dis_param_formula_2 = ~ 1 + AADT10kplus, 
    data = washington_roads, family = "PLL", 
    ndraws=10, method="NM", max.iters = 200))  # Added limit
  
  expect_s3_class(model, "flexCountReg")
  expect_true(length(model$model$estimate) > 0)
})

test_that("Poisson-Weibull", {
  data("washington_roads")
  washington_roads$AADT10kplus <- ifelse(washington_roads$AADT>10000,1,0)
  model <- countreg(
    Total_crashes ~ lnaadt + speed50 + AADT10kplus,
    offset = "lnlength", 
    dis_param_formula_1 = ~ 1 + lnlength,
    data = washington_roads, family = "PW", ndraws=50,  # Reduced from 100
    method="BHHH", stderr = "Robust", max.iters = 200)  # Added limit
  
  expect_s3_class(model, "flexCountReg")
  expect_true(length(model$model$estimate) > 0)
})

test_that("Sichel", {
  data("washington_roads")
  washington_roads$AADT10kplus <- ifelse(washington_roads$AADT>10000,1,0)
  
  model <- suppressWarnings(countreg(
    Total_crashes ~ lnaadt + speed50,
    offset = "lnlength", 
    data = washington_roads, family = "SI", 
    method="NM", max.iters = 200))  # Added limit
  
  expect_s3_class(model, "flexCountReg")
  expect_true(length(model$model$estimate) > 0)
})


test_that("Generalized-Waring", {
  data("washington_roads")
  washington_roads$AADT10kplus <- ifelse(washington_roads$AADT>10000,1,0)
  model <- countreg(
    Total_crashes ~ lnaadt + lnlength + speed50 + AADT10kplus,
    data = washington_roads, family = "GW",
    max.iters = 500)  # Added limit
  
  expect_s3_class(model, "flexCountReg")
  expect_true(length(model$model$estimate) > 0)
})

test_that("NB1 with bootstrapping", {
  skip_on_cran()  # Skip on CRAN due to time
  
  data("washington_roads")
  washington_roads$AADT10kplus <- ifelse(washington_roads$AADT>10000,1,0)
  model <- countreg(
    Total_crashes ~ lnaadt + lnlength + speed50 + AADT10kplus,
    data = washington_roads, family = "NB1", 
    bootstraps = 10,  # Reduced from 100!
    max.iters = 200)
  
  expect_s3_class(model, "flexCountReg")
  expect_true(length(model$model$estimate) > 0)
})


test_that("NB2 with underreporting (logit)", {
  data("washington_roads")
  washington_roads$AADT10kplus <- ifelse(washington_roads$AADT>10000,1,0)
  model <- countreg(
    Total_crashes ~ lnaadt + lnlength + speed50 + AADT10kplus,
    data = washington_roads, family = "NB2",
    underreport_formula = ~1 + speed50 + AADT10kplus,
    max.iters = 500)  # Added limit
  
  expect_s3_class(model, "flexCountReg")
  expect_true(length(model$model$estimate) > 0)
})


test_that("Poisson-Lognormal with underreporting (probit)", {
  data("washington_roads")
  washington_roads$AADT10kplus <- ifelse(washington_roads$AADT>10000,1,0)
  model <- countreg(
    Total_crashes ~ lnaadt + lnlength + speed50 + AADT10kplus,
    data = washington_roads, family = "NB2",
    underreport_formula = ~ speed50 + AADT10kplus, 
    underreport_family = "probit",
    max.iters = 500)  # Added limit
  
  expect_s3_class(model, "flexCountReg")
  expect_true(length(model$model$estimate) > 0)
})

test_that("Conway-Maxwell-Poisson Model", {
  data("washington_roads")
  washington_roads$AADT10kplus <- ifelse(washington_roads$AADT>10000,1,0)
  model <- suppressWarnings(countreg(
    Total_crashes ~ lnaadt + speed50 + AADT10kplus,
    data = washington_roads, 
    family = "COM", 
    offset = "lnlength",
    method='BHHH',
    max.iters = 200))  # Added limit
  
  expect_s3_class(model, "flexCountReg")
  expect_true(length(model$model$estimate) > 0)
})

Try the flexCountReg package in your browser

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

flexCountReg documentation built on Jan. 20, 2026, 1:06 a.m.