tests/testthat/test-countreg.R

# ---------------------------------------------------
# TEST 1 - intercept only - one group
# ---------------------------------------------------
test_that("intercept-only Poisson", {
  skip_on_cran()
  fit <- countreg(
    forml = "dv ~ 1",
    group = NULL,
    data = example01,
    family = "poisson"
  )
  pt <- fit@partable
  avar <- diag(fit@vcov)
  expect_equal(length(pt$par), 3)
  expect_equal(length(avar), 2)

  # LOG-LIKELIHOOD
  comp <- 3.38334
  par <- fit@fit@fit$objective
  expect_equal(par, comp, tolerance = 1e-5, label = "logl")

  # PARAMETER
  # 1. Group weight
  comp <- 6.76966
  par <- pt$par[pt$dest == "groupw"]
  expect_equal(par, comp, tolerance = 1e-5)

  # 2. Regression coefficient
  comp <- 2.55546
  par <- pt$par[pt$dest == "beta"]
  expect_equal(par, comp, tolerance = 1e-5)

  # 3. Overdispersion parameter
  comp <- 0
  par <- pt$par[pt$dest == "overdis"]
  expect_equal(par, comp, tolerance = 1e-5)

  # STANDARD ERRORS
  # 1. Group weight
  comp <- 0.00115
  par <- avar[pt$par_free[pt$dest == "groupw"]]
  expect_equal(par, comp, tolerance = 1e-5)

  # 2. Regression coefficient
  comp <- 0.00009
  par <- avar[pt$par_free[pt$dest == "beta"]]
  expect_equal(par, comp, tolerance = 1e-5)
})


test_that("intercept-only negative binomial", {
  skip_on_cran()
  fit <- countreg(
    forml = "dv ~ 1",
    group = NULL,
    data = example01,
    family = "nbinom"
  )
  pt <- fit@partable
  avar <- diag(fit@vcov)
  expect_equal(length(pt$par), 3)
  expect_equal(length(avar), 3)

  # LOG-LIKELIHOOD
  comp <- 3.12601
  par <- fit@fit@fit$objective
  expect_equal(par, comp, tolerance = 1e-5, label = "logl")

  # PARAMETER
  # 1. Group weight
  comp <- 6.76961
  par <- pt$par[pt$dest == "groupw"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_groupw")

  # 2. Regression coefficient
  comp <- 2.55545
  par <- pt$par[pt$dest == "beta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_beta")

  # 3. Overdispersion parameter
  comp <- 8.62666
  par <- pt$par[pt$dest == "overdis"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_overdis")

  # STANDARD ERRORS
  # 1. Group weight
  comp <- 0.00115
  par <- avar[pt$par_free[pt$dest == "groupw"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_groupw")

  # 2. Regression coefficient
  comp <- 0.00022
  par <- avar[pt$par_free[pt$dest == "beta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_beta")

  # 3. Overdispersion parameter
  comp <- 0.51543
  par <- avar[pt$par_free[pt$dest == "overdis"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_overdis")
})


# ---------------------------------------------------
# TEST 2 - intercept-only - two groups
# ---------------------------------------------------
test_that("two-group intercept-only Poisson", {
  skip_on_cran()
  fit <- countreg(
    forml = "dv ~ 1",
    group = "treat",
    data = example01,
    family = "poisson"
  )
  pt <- fit@partable
  avar <- diag(fit@vcov)
  expect_equal(length(pt$par), 6)
  expect_equal(length(avar), 4)

  # LOG-LIKELIHOOD
  comp <- 3.31971
  par <- fit@fit@fit$objective
  expect_equal(par, comp, tolerance = 1e-5, label = "logl")

  # PARAMETER
  # 1. Group weight
  comp <- c(6.05912, 6.09357)
  par <- pt$par[pt$dest == "groupw"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_groupw")

  # 2. Regression coefficient
  comp <- c(2.44539, 2.65140)
  par <- pt$par[pt$dest == "beta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_beta")

  # 3. Overdispersion parameter
  comp <- c(0, 0)
  par <- pt$par[pt$dest == "overdis"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_overdis")

  # STANDARD ERRORS
  # 1. Group weight
  comp <- c(0.00234, 0.00226)
  par <- avar[pt$par_free[pt$dest == "groupw"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_groupw")

  # 2. Regression coefficient
  comp <- c(0.00020, 0.00016)
  par <- avar[pt$par_free[pt$dest == "beta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_beta")
})


test_that("two-group intercept-only negative binomial", {
  skip_on_cran()
  fit <- countreg(
    forml = "dv ~ 1",
    group = "treat",
    data = example01,
    family = "nbinom"
  )
  pt <- fit@partable
  avar <- diag(fit@vcov)
  expect_equal(length(pt$par), 6)
  expect_equal(length(avar), 6)

  # LOG-LIKELIHOOD
  comp <- 3.09931
  par <- fit@fit@fit$objective
  expect_equal(par, comp, tolerance = 1e-5, label = "logl")

  # PARAMETER
  # 1. Group weight
  comp <- c(6.05912, 6.09357)
  par <- pt$par[pt$dest == "groupw"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_groupw")

  # 2. Regression coefficient
  comp <- c(2.44539, 2.65140)
  par <- pt$par[pt$dest == "beta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_beta")

  # 3. Overdispersion parameter
  comp <- c(7.90338, 11.58069)
  par <- pt$par[pt$dest == "overdis"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_overdis")

  # STANDARD ERRORS
  # 1. Group weight
  comp <- c(0.00233, 0.00226)
  par <- avar[pt$par_free[pt$dest == "groupw"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_groupw")

  # 2. Regression coefficient
  comp <- c(0.00050, 0.00035)
  par <- avar[pt$par_free[pt$dest == "beta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_beta")

  # 3. Overdispersion parameter
  comp <- c(0.88228, 2.20150)
  par <- avar[pt$par_free[pt$dest == "overdis"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_overdis")
})


# ---------------------------------------------------
# TEST 3 - one manifest covariate - two groups
# ---------------------------------------------------
test_that("two-group one manifest covariate Poisson", {
  skip_on_cran()
  fit <- countreg(
    forml = "dv ~ z12",
    group = "treat",
    data = example01,
    family = "poisson",
    se = TRUE
  )
  pt <- fit@partable
  avar <- diag(fit@vcov)
  expect_equal(length(pt$par), 12)
  expect_equal(length(avar), 10)

  # LOG-LIKELIHOOD
  comp <- 4.73872
  par <- fit@fit@fit$objective
  expect_equal(par, comp, tolerance = 1e-5, label = "logl")

  # PARAMETER
  # 1. Group weight
  comp <- c(6.05912, 6.09357)
  par <- pt$par[pt$dest == "groupw"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_groupw")

  # 2. Regression coefficient
  comp <- c(2.65523, -0.16981, 2.83597, -0.14146)
  par <- pt$par[pt$dest == "beta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_beta")

  # 3. Overdispersion parameter
  comp <- c(0, 0)
  par <- pt$par[pt$dest == "overdis"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_overdis")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(1.36293, 1.40557)
  par <- pt$par[pt$dest == "mu_z"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_z")

  # 4.2 Variances
  comp <- c(1.59051, 1.48010)
  par <- pt$par[pt$dest == "Sigma_z" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_var")


  # STANDARD ERRORS
  # 1. Group weight
  comp <- c(0.00234, 0.00226)
  par <- avar[pt$par_free[pt$dest == "groupw"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_groupw")

  # 2. Regression coefficient
  comp <- c(0.00039, 0.00015, 0.00034, 0.00012)
  par <- avar[pt$par_free[pt$dest == "beta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_beta")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(0.00372, 0.00334)
  par <- avar[pt$par_free[pt$dest == "mu_z"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_z")

  # 4.2 Variances
  comp <- c(0.01182, 0.00989)
  par <- avar[pt$par_free[pt$dest == "Sigma_z"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_z_var")
})


test_that("two-group one manifest covariate negative binomial", {
  skip_on_cran()
  fit <- countreg(
    forml = "dv ~ z12",
    group = "treat",
    data = example01,
    family = "nbinom",
    se = TRUE
  )
  pt <- fit@partable
  avar <- diag(fit@vcov)
  expect_equal(length(pt$par), 12)
  expect_equal(length(avar), 12)

  # LOG-LIKELIHOOD
  comp <- 4.62806
  par <- fit@fit@fit$objective
  expect_equal(par, comp, tolerance = 1e-5, label = "logl")

  # PARAMETER
  # 1. Group weight
  comp <- c(6.05912, 6.09357)
  par <- pt$par[pt$dest == "groupw"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_groupw")

  # 2. Regression coefficient
  comp <- c(2.65465, -0.16934, 2.83624, -0.14166)
  par <- pt$par[pt$dest == "beta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_beta")

  # 3. Overdispersion parameter
  comp <- c(12.08287, 17.89945)
  par <- pt$par[pt$dest == "overdis"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_overdis")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(1.36293, 1.40557)
  par <- pt$par[pt$dest == "mu_z"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_z")

  # 4.2 Variances
  comp <- c(1.59050, 1.48011)
  par <- pt$par[pt$dest == "Sigma_z" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_var")


  # STANDARD ERRORS
  # 1. Group weight
  comp <- c(0.00234, 0.00226)
  par <- avar[pt$par_free[pt$dest == "groupw"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_groupw")

  # 2. Regression coefficient
  comp <- c(0.00082, 0.00028, 0.00063, 0.00021)
  par <- avar[pt$par_free[pt$dest == "beta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_beta")

  # 3. Overdispersion parameter
  comp <- c(3.12545, 8.45198)
  par <- avar[pt$par_free[pt$dest == "overdis"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_overdis")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(0.00372, 0.00334)
  par <- avar[pt$par_free[pt$dest == "mu_z"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_z")

  # 4.2 Variances
  comp <- c(0.01182, 0.00989)
  par <- avar[pt$par_free[pt$dest == "Sigma_z"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_z_var")
})


# ---------------------------------------------------
# TEST 4 - three manifest covariates - two groups
# ---------------------------------------------------
test_that("two-group three manifest covariates Poisson", {
  skip_on_cran()
  fit <- countreg(
    forml = "dv ~ z12 + z11 + z21",
    group = "treat",
    data = example01,
    family = "poisson",
    se = TRUE
  )
  # Converged?
  conv <- fit@fit@fit$convergence
  expect_equal(conv, 0)

  pt <- fit@partable
  avar <- diag(fit@vcov)
  expect_equal(length(pt$par), 30)
  expect_equal(length(avar), 28)

  # LOG-LIKELIHOOD
  comp <- 7.27241
  par <- fit@fit@fit$objective
  expect_equal(par, comp, tolerance = 1e-5, label = "logl")

  # PARAMETER
  # 1. Group weight
  comp <- c(6.05912, 6.09357)
  par <- pt$par[pt$dest == "groupw"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_groupw")

  # 2. Regression coefficient
  comp <- c(
    2.34110, -0.08721, -0.07893, 0.08227,
    2.62149, -0.09299, -0.04680, 0.05441
  )
  par <- pt$par[pt$dest == "beta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_beta")

  # 3. Overdispersion parameter
  comp <- c(0, 0)
  par <- pt$par[pt$dest == "overdis"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_overdis")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(
    1.36293, 1.59813, 3.90927,
    1.40558, 1.56209, 3.99473
  )
  par <- pt$par[pt$dest == "mu_z"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_z")

  # 4.2 Variances
  comp <- c(
    1.59049, 1.68417, 0.95031,
    1.48009, 1.36278, 0.83293
  )
  par <- pt$par[pt$dest == "Sigma_z" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_var")

  # 4.3 Covariances
  comp <- c(
    1.02240, -0.63361, -0.50519,
    0.86383, -0.56871, -0.46656
  )
  par <- pt$par[pt$dest == "Sigma_z" & pt$type == "cov"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_cov")


  # STANDARD ERRORS
  # 1. Group weight
  comp <- c(0.00234, 0.00226)
  par <- avar[pt$par_free[pt$dest == "groupw"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_groupw")

  # 2. Regression coefficient
  comp <- c(
    0.00763, 0.00027, 0.00021, 0.00034,
    0.00711, 0.00021, 0.00020, 0.00030
  )
  par <- avar[pt$par_free[pt$dest == "beta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_beta")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(
    0.00372, 0.00394, 0.00222,
    0.00334, 0.00307, 0.00188
  )
  par <- avar[pt$par_free[pt$dest == "mu_z"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_z")

  # 4.2 Variances
  comp <- c(
    0.01182, 0.01325, 0.00422,
    0.00989, 0.00838, 0.00313
  )
  par <- avar[pt$par_free[pt$dest == "Sigma_z" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_z_var")

  # 4.3 Covariances
  comp <- c(
    0.00870, 0.00447, 0.00434,
    0.00624, 0.00351, 0.00305
  )
  par <- avar[pt$par_free[pt$dest == "Sigma_z" & pt$type == "cov"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_z_cov")
})


test_that("two-group three manifest covariates negative binomial", {
  skip_on_cran()
  fit <- countreg(
    forml = "dv ~ z12 + z11 + z21",
    group = "treat",
    data = example01,
    family = "nbinom",
    se = TRUE
  )
  # Converged?
  conv <- fit@fit@fit$convergence
  expect_equal(conv, 0)

  pt <- fit@partable
  avar <- diag(fit@vcov)
  expect_equal(length(pt$par), 30)
  expect_equal(length(avar), 30)

  # LOG-LIKELIHOOD
  comp <- 7.18300
  par <- fit@fit@fit$objective
  expect_equal(par, comp, tolerance = 1e-5, label = "logl")

  # PARAMETER
  # 1. Group weight
  comp <- c(6.05912, 6.09357)
  par <- pt$par[pt$dest == "groupw"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_groupw")

  # 2. Regression coefficient
  comp <- c(
    2.33834, -0.08674, -0.07975, 0.08312,
    2.63161, -0.09387, -0.04665, 0.05214
  )
  par <- pt$par[pt$dest == "beta"] |> round(5)
  expect_equal(par, comp, tolerance = 1e-5, label = "par_beta")

  # 3. Overdispersion parameter
  comp <- c(14.17296, 19.56794)
  par <- pt$par[pt$dest == "overdis"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_overdis")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(
    1.36293, 1.59813, 3.90927,
    1.40557, 1.56208, 3.99473
  )
  par <- pt$par[pt$dest == "mu_z"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_z")

  # 4.2 Variances
  comp <- c(
    1.59051, 1.68417, 0.95030,
    1.48011, 1.36278, 0.83293
  )
  par <- pt$par[pt$dest == "Sigma_z" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_var")

  # 4.3 Covariances
  comp <- c(
    1.02241, -0.63361, -0.50518,
    0.86384, -0.56872, -0.46656
  )
  par <- pt$par[pt$dest == "Sigma_z" & pt$type == "cov"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_cov")


  # STANDARD ERRORS
  # 1. Group weight
  comp <- c(0.00234, 0.00226)
  par <- avar[pt$par_free[pt$dest == "groupw"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_groupw")

  # 2. Regression coefficient
  comp <- c(
    0.01303, 0.00047, 0.00037, 0.00058,
    0.01184, 0.00036, 0.00034, 0.00050
  )
  par <- avar[pt$par_free[pt$dest == "beta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_beta")

  # 3. Overdispersion parameter
  comp <- c(5.07994, 11.22616)
  par <- avar[pt$par_free[pt$dest == "overdis"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_overdis")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(
    0.00372, 0.00393, 0.00222,
    0.00334, 0.00308, 0.00188
  )
  par <- avar[pt$par_free[pt$dest == "mu_z"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_z")

  # 4.2 Variances
  comp <- c(
    0.01182, 0.01325, 0.00422,
    0.00989, 0.00838, 0.00313
  )
  par <- avar[pt$par_free[pt$dest == "Sigma_z" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_z_var")

  # 4.3 Covariances
  comp <- c(
    0.00870, 0.00447, 0.00434,
    0.00624, 0.00351, 0.00305
  )
  par <- avar[pt$par_free[pt$dest == "Sigma_z" & pt$type == "cov"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_z_cov")
})


# ---------------------------------------------------
# TEST 5 - one latent covariate - two groups
# ---------------------------------------------------
test_that("two-group one latent covariate Poisson", {
  skip_on_cran()
  fit <- countreg(
    forml = "dv ~ eta1",
    lv = list(eta1 = c("z21", "z22")),
    group = "treat",
    data = example01,
    family = "poisson",
    se = TRUE
  )
  # Converged?
  conv <- fit@fit@fit$convergence
  expect_equal(conv, 0L)

  # Correct parameter estimates?
  pt <- fit@partable
  avar <- diag(fit@vcov)
  expect_equal(length(pt$par), 24)
  expect_equal(length(avar), 18)

  # LOG-LIKELIHOOD
  comp <- 5.41229
  par <- fit@fit@fit$objective
  expect_equal(par, comp, tolerance = 1e-5, label = "logl")

  # PARAMETER
  # 1. Group weight
  comp <- c(6.05912, 6.09357)
  par <- pt$par[pt$dest == "groupw"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(0.42565, 0.81313)
  par <- pt$par[pt$dest == "beta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_beta")

  # 2.2 gamma
  comp <- c(0.50043, 0.45471)
  par <- pt$par[pt$dest == "gamma"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_gamma")

  # 3. Overdispersion parameter
  comp <- c(0, 0)
  par <- pt$par[pt$dest == "overdis"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_overdis")

  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(c(0, 1.45445), 2)
  par <- pt$par[pt$dest == "nu"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_nu")

  # 5.2 Lambda
  comp <- rep(c(1, 0.72492), 2)
  par <- pt$par[pt$dest == "Lambda"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_lambda")

  # 5.3 Theta
  comp <- c(0.52596, 0.35650, 0.50998, 0.35629)
  par <- pt$par[pt$dest == "Theta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(3.93444, 3.97110)
  par <- pt$par[pt$dest == "mu_eta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_eta")

  # 6.2 Variances
  comp <- c(0.42556, 0.32470)
  par <- pt$par[pt$dest == "Sigma_eta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_eta_var")

  # STANDARD ERRORS
  # 1. Group weight
  comp <- c(0.00234, 0.00226)
  par <- avar[pt$par_free[pt$dest == "groupw"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(0.04255, 0.04600)
  par <- avar[pt$par_free[pt$dest == "beta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_beta")

  # 2.2 gamma
  comp <- c(0.00258, 0.00281)
  par <- avar[pt$par_free[pt$dest == "gamma"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_gamma")

  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(0.04933, 2)
  par <- avar[pt$par_free[pt$dest == "nu"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_nu")

  # 5.2 Lambda
  comp <- rep(0.00311, 2)
  par <- avar[pt$par_free[pt$dest == "Lambda"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_lambda")

  # 5.3 Theta
  comp <- c(0.00292, 0.00111, 0.00261, 0.00101)
  par <- avar[pt$par_free[pt$dest == "Theta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(0.00196, 0.00165)
  par <- avar[pt$par_free[pt$dest == "mu_eta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_eta")

  # 6.2 Variances
  comp <- c(0.00404, 0.00285)
  par <- avar[pt$par_free[pt$dest == "Sigma_eta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_var")
})


test_that("two-group one latent covariate negative binomial", {
  skip_on_cran()
  fit <- countreg(
    forml = "dv ~ eta1",
    lv = list(eta1 = c("z21", "z22")),
    group = "treat",
    data = example01,
    family = "nbinom",
    se = TRUE
  )
  # Converged?
  conv <- fit@fit@fit$convergence
  expect_equal(conv, 0)

  # Correct parameter estimates?
  pt <- fit@partable
  avar <- diag(fit@vcov)
  expect_equal(length(pt$par), 24)
  expect_equal(length(avar), 20)

  # LOG-LIKELIHOOD
  comp <- 5.36203
  par <- fit@fit@fit$objective
  expect_equal(par, comp, tolerance = 1e-5, label = "logl")

  # PARAMETER
  # 1. Group weight
  comp <- c(6.05912, 6.09357)
  par <- pt$par[pt$dest == "groupw"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(1.39488, 1.38017)
  par <- pt$par[pt$dest == "beta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_beta")

  # 2.2 gamma
  comp <- c(0.26256, 0.31877)
  par <- pt$par[pt$dest == "gamma"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_gamma")

  # 3. Overdispersion parameter
  comp <- c(9.58424, 15.98937)
  par <- pt$par[pt$dest == "overdis"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_overdis")

  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(c(0, -0.74553), 2)
  par <- pt$par[pt$dest == "nu"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_nu")

  # 5.2 Lambda
  comp <- rep(c(1, 1.2814), 2)
  par <- pt$par[pt$dest == "Lambda"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_lambda")

  # 5.3 Theta
  comp <- c(0.66769, 0.03286, 0.57080, 0.16991)
  par <- pt$par[pt$dest == "Theta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(3.87379, 3.95331)
  par <- pt$par[pt$dest == "mu_eta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_eta")

  # 6.2 Variances
  comp <- c(0.45845, 0.22501)
  par <- pt$par[pt$dest == "Sigma_eta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_eta_var")


  # STANDARD ERRORS
  # 1. Group weight
  comp <- c(0.00234, 0.00226)
  par <- avar[pt$par_free[pt$dest == "groupw"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(0.03008, 0.04599)
  par <- avar[pt$par_free[pt$dest == "beta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_beta")

  # 2.2 gamma
  comp <- c(0.00185, 0.00285)
  par <- avar[pt$par_free[pt$dest == "gamma"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_gamma")

  # 3. Overdispersion parameter
  comp <- c(1.57327, 7.36865)
  par <- avar[pt$par_free[pt$dest == "overdis"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_overdis")

  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(0.12104, 2)
  par <- avar[pt$par_free[pt$dest == "nu"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_nu")

  # 5.2 Lambda
  comp <- rep(0.00765, 2)
  par <- avar[pt$par_free[pt$dest == "Lambda"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_lambda")

  # 5.3 Theta
  comp <- c(0.00215, 0.00001, 0.00221, 0.00181)
  par <- avar[pt$par_free[pt$dest == "Theta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(0.00088, 0.00127)
  par <- avar[pt$par_free[pt$dest == "mu_eta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_eta")

  # 6.2 Variances
  comp <- c(0.00389, 0.00098)
  par <- avar[pt$par_free[pt$dest == "Sigma_eta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_var")
})


# ---------------------------------------------------
# TEST 6 - two latent covariates - two groups
# ---------------------------------------------------
test_that("two-group two latent covariates Poisson", {
  skip_on_cran()
  fit <- countreg(
    forml = "dv ~ eta1 + eta2",
    lv = list(
      eta1 = c("z21", "z22"),
      eta2 = c("z41", "z42", "z43")
    ),
    group = "treat",
    data = example01,
    family = "poisson",
    se = TRUE
  )
  # Converged?
  conv <- fit@fit@fit$convergence
  expect_equal(conv, 0)

  # Correct parameter estimates?
  pt <- fit@partable
  avar <- diag(fit@vcov)
  expect_equal(length(pt$par), 60)
  expect_equal(length(avar), 40)

  # LOG-LIKELIHOOD
  comp <- 11.09449
  par <- fit@fit@fit$objective
  expect_equal(par, comp, tolerance = 1e-5, label = "logl")


  # PARAMETER
  # 1. Group weight
  comp <- c(6.05912, 6.09357)
  par <- pt$par[pt$dest == "groupw"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(0.63028, 0.55231)
  par <- pt$par[pt$dest == "beta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_beta")

  # 2.2 gamma
  comp <- c(0.46326, -0.03616, 0.50796, 0.02916)
  par <- pt$par[pt$dest == "gamma"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_gamma")

  # 3. Overdispersion parameter
  comp <- c(0, 0)
  par <- pt$par[pt$dest == "overdis"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_overdis")

  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(c(0, 1.35728, 0, -0.09500, -0.45658), 2)
  par <- pt$par[pt$dest == "nu"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_nu")

  # 5.2 Lambda
  comp <- rep(c(1, 0.74971, rep(0, 5), 1, 1.28107, 1.36110), 2)
  par <- pt$par[pt$dest == "Lambda"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_lambda")

  # 5.3 Theta
  comp <- c(
    0.52566, 0.33860, 1.53647, 1.43656, 1.39938,
    0.52605, 0.35564, 1.36698, 1.56639, 1.02974
  )
  par <- pt$par[pt$dest == "Theta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(3.93991, 1.57989, 3.97623, 1.65178)
  par <- pt$par[pt$dest == "mu_eta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_eta")

  # 6.2 Variances
  comp <- c(0.43188, 1.89513, 0.31349, 2.16220)
  par <- pt$par[pt$dest == "Sigma_eta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_eta_var")

  # 6.3 Covariances
  comp <- c(-0.34766, -0.41424)
  par <- pt$par[pt$dest == "Sigma_eta" & pt$type == "cov"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_eta_cov")


  # STANDARD ERRORS
  # 1. Group weight
  comp <- c(0.00234, 0.00226)
  par <- avar[pt$par_free[pt$dest == "groupw"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(0.06556, 0.09605)
  par <- avar[pt$par_free[pt$dest == "beta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_beta")

  # 2.2 gamma
  comp <- c(0.00340, 0.00044, 0.00508, 0.00040)
  par <- avar[pt$par_free[pt$dest == "gamma"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_gamma")

  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(c(0.04997, 0.01275, 0.01540), 2)
  par <- avar[pt$par_free[pt$dest == "nu"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_nu")

  # 5.2 Lambda
  comp <- rep(c(0.00315, 0.00307, 0.00404), 2)
  par <- avar[pt$par_free[pt$dest == "Lambda"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_lambda")

  # 5.3 Theta
  comp <- c(
    0.00314, 0.00109, 0.01784, 0.02554, 0.02826,
    0.00256, 0.00099, 0.01433, 0.02544, 0.03841
  )
  par <- avar[pt$par_free[pt$dest == "Theta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(0.00194, 0.00606, 0.00156, 0.00518)
  par <- avar[pt$par_free[pt$dest == "mu_eta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_eta")

  # 6.2 Variances
  comp <- c(0.00431, 0.04134, 0.00277, 0.05227)
  par <- avar[pt$par_free[pt$dest == "Sigma_eta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_var")

  # 6.3 Covariances
  comp <- c(0.00478, 0.00470)
  par <- avar[pt$par_free[pt$dest == "Sigma_eta" & pt$type == "cov"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_cov")
})



test_that("two-group two latent covariates negative binomial", {
  skip_on_cran()
  fit <- countreg(
    forml = "dv ~ eta1 + eta2",
    lv = list(
      eta1 = c("z21", "z22"),
      eta2 = c("z41", "z42", "z43")
    ),
    group = "treat",
    data = example01,
    family = "nbinom",
    se = TRUE
  )
  # Converged?
  conv <- fit@fit@fit$convergence
  expect_equal(conv, 0)

  # Correct parameter estimates?
  pt <- fit@partable
  avar <- diag(fit@vcov)
  expect_equal(length(pt$par), 60)
  expect_equal(length(avar), 42)

  # LOG-LIKELIHOOD
  comp <- 11.03596
  par <- fit@fit@fit$objective
  expect_equal(par, comp, tolerance = 1e-5, label = "logl")

  # PARAMETER
  # 1. Group weight
  comp <- c(6.05912, 6.09357)
  par <- pt$par[pt$dest == "groupw"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(1.42405, 1.53285)
  par <- pt$par[pt$dest == "beta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_beta")

  # 2.2 gamma
  comp <- c(0.28020, -0.06825, 0.28419, -0.01419)
  par <- pt$par[pt$dest == "gamma"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_gamma")

  # 3. Overdispersion parameter
  comp <- c(14.00803, 18.66380)
  par <- pt$par[pt$dest == "overdis"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_overdis")

  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(c(0, 1.08882, 0, -0.07963, -0.73781), 2)
  par <- pt$par[pt$dest == "nu"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_nu")

  # 5.2 Lambda
  comp <- rep(c(1, 0.81774, rep(0, 5), 1, 1.27078, 1.53127), 2)
  par <- pt$par[pt$dest == "Lambda"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_lambda")

  # 5.3 Theta
  comp <- c(
    0.45836, 0.25828, 1.61553, 1.61485, 1.17764,
    0.45605, 0.28609, 1.68552, 2.03674, 0.28088
  )
  par <- pt$par[pt$dest == "Theta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(3.94419, 1.58128, 3.96585, 1.684321)
  par <- pt$par[pt$dest == "mu_eta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_eta")

  # 6.2 Variances
  comp <- c(0.48812, 1.66195, 0.34983, 2.08168)
  par <- pt$par[pt$dest == "Sigma_eta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_eta_var")

  # 6.3 Covariances
  comp <- c(-0.30853, -0.30940)
  par <- pt$par[pt$dest == "Sigma_eta" & pt$type == "cov"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_eta_cov")


  # STANDARD ERRORS
  # 1. Group weight
  comp <- c(0.00234, 0.00226)
  par <- avar[pt$par_free[pt$dest == "groupw"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(0.03527, 0.04232)
  par <- avar[pt$par_free[pt$dest == "beta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_beta")

  # 2.2 gamma
  comp <- c(0.00184, 0.00041, 0.00227, 0.00024)
  par <- avar[pt$par_free[pt$dest == "gamma"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_gamma")

  # 3. Overdispersion parameter
  comp <- c(6.3742, 12.7716)
  par <- avar[pt$par_free[pt$dest == "overdis"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_overdis")

  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(c(0.09798, 0.01402, 0.01389), 2)
  par <- avar[pt$par_free[pt$dest == "nu"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_nu")

  # 5.2 Lambda
  comp <- rep(c(0.00622, 0.00330, 0.00322), 2)
  par <- avar[pt$par_free[pt$dest == "Lambda"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_lambda")

  # 5.3 Theta
  comp <- c(
    0.00353, 0.00140, 0.01872, 0.02576, 0.03203,
    0.00250, 0.00110, 0.01433, 0.02167, 0.00095
  )
  par <- avar[pt$par_free[pt$dest == "Theta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(0.00192, 0.00559, 0.00145, 0.00276)
  par <- avar[pt$par_free[pt$dest == "mu_eta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_eta")

  # 6.2 Variances
  comp <- c(0.00496, 0.02802, 0.00237, 0.02454)
  par <- avar[pt$par_free[pt$dest == "Sigma_eta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_var")

  # 6.3 Covariances
  comp <- c(0.00399, 0.00287)
  par <- avar[pt$par_free[pt$dest == "Sigma_eta" & pt$type == "cov"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_cov")
})


# ---------------------------------------------------
# TEST 7 - one latent, one manifest covariates - two groups
# ---------------------------------------------------
test_that("two-group one latent, one manifest covariate Poisson", {
  skip_on_cran()
  fit <- countreg(
    forml = "dv ~ eta1 + z12",
    lv = list(eta1 = c("z41", "z42", "z43")),
    group = "treat",
    data = example01,
    family = "poisson",
    se = TRUE
  )

  # Converged?
  conv <- fit@fit@fit$convergence
  expect_equal(conv, 0)

  # Correct parameter estimates?
  pt <- fit@partable
  avar <- diag(fit@vcov)
  expect_equal(length(pt$par), 38)
  expect_equal(length(avar), 32)

  # LOG-LIKELIHOOD
  comp <- 10.40298
  par <- fit@fit@fit$objective
  expect_equal(par, comp, tolerance = 1e-5, label = "logl")


  # PARAMETER
  # 1. Group weight
  comp <- c(6.05912, 6.09357)
  par <- pt$par[pt$dest == "groupw"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(2.76045, -0.14176, 2.86583, -0.12890)
  par <- pt$par[pt$dest == "beta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_beta")

  # 2.2 gamma
  comp <- c(-0.09412, -0.02862)
  par <- pt$par[pt$dest == "gamma"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_gamma")

  # 3. Overdispersion parameter
  comp <- c(0, 0)
  par <- pt$par[pt$dest == "overdis"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_overdis")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(1.35905, 1.39256)
  par <- pt$par[pt$dest == "mu_z"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_z")

  # 4.2 Variances
  comp <- c(1.59276, 1.49301)
  par <- pt$par[pt$dest == "Sigma_z" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_var")

  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(c(0, -0.09046, -0.43259), 2)
  par <- pt$par[pt$dest == "nu"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_nu")

  # 5.2 Lambda
  comp <- rep(c(1, 1.27837, 1.34651), 2)
  par <- pt$par[pt$dest == "Lambda"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_lambda")

  # 5.3 Theta
  comp <- c(
    1.51950, 1.46891, 1.45808,
    1.36367, 1.51842, 1.08572
  )
  par <- pt$par[pt$dest == "Theta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(1.58518, 1.64336)
  par <- pt$par[pt$dest == "mu_eta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_eta")

  # 6.2 Variances
  comp <- c(1.87179, 2.13073)
  par <- pt$par[pt$dest == "Sigma_eta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_eta_var")

  # 7. Latent-Manifest Covariances
  comp <- c(0.50240, 0.68700)
  par <- pt$par[pt$dest == "Sigma_z_lv"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_eta_cov")


  # STANDARD ERRORS
  # 1. Group weight
  comp <- c(0.00234, 0.00226)
  par <- avar[pt$par_free[pt$dest == "groupw"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(0.00070, 0.00018, 0.00048, 0.00015)
  par <- avar[pt$par_free[pt$dest == "beta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_beta")

  # 2.2 gamma
  comp <- c(0.00024, 0.00014)
  par <- avar[pt$par_free[pt$dest == "gamma"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_gamma")

  # # 3. Overdispersion parameter
  # comp <- c(9.21046, 7.77312)
  # par <- avar[pt$par_free[pt$dest == "overdis"]]
  # expect_equal(par, comp, tolerance = 1e-5, label = "se_overdis")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(0.00370, 0.00323)
  par <- avar[pt$par_free[pt$dest == "mu_z"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_z")

  # 4.2 Variances
  comp <- c(0.01190, 0.01034)
  par <- avar[pt$par_free[pt$dest == "Sigma_z" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_z_var")


  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(c(0.01280, 0.01482), 2)
  par <- avar[pt$par_free[pt$dest == "nu"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_nu")

  # 5.2 Lambda
  comp <- rep(c(0.00310, 0.00384), 2)
  par <- avar[pt$par_free[pt$dest == "Lambda"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_lambda")

  # 5.3 Theta
  comp <- c(
    0.01775, 0.02544, 0.02820,
    0.01410, 0.02401, 0.03513
  )
  par <- avar[pt$par_free[pt$dest == "Theta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(0.00625, 0.00539)
  par <- avar[pt$par_free[pt$dest == "mu_eta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_eta")

  # 6.2 Variances
  comp <- c(0.03885, 0.05531)
  par <- avar[pt$par_free[pt$dest == "Sigma_eta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_var")

  # 7. Latent-manifest Covariances
  comp <- c(0.00957, 0.01124)
  par <- avar[pt$par_free[pt$dest == "Sigma_z_lv"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_cov")
})


test_that("two-group one latent, one manifest covariate negative binomial", {
  skip_on_cran()
  fit <- countreg(
    forml = "dv ~ eta1 + z12",
    lv = list(eta1 = c("z41", "z42", "z43")),
    group = "treat",
    data = example01,
    family = "nbinom",
    se = TRUE
  )
  # Converged?
  conv <- fit@fit@fit$convergence
  expect_equal(conv, 0)

  # Correct parameter estimates?
  pt <- fit@partable
  avar <- diag(fit@vcov)
  expect_equal(length(pt$par), 38)
  expect_equal(length(avar), 34)

  # LOG-LIKELIHOOD
  comp <- 10.30759
  par <- fit@fit@fit$objective
  expect_equal(par, comp, tolerance = 1e-5, label = "logl")

  # PARAMETER
  # 1. Group weight
  comp <- c(6.05912, 6.09357)
  par <- pt$par[pt$dest == "groupw"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(2.74023, -0.14692, 2.86376, -0.13065)
  par <- pt$par[pt$dest == "beta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_beta")

  # 2.2 gamma
  comp <- c(-0.07545, -0.02587)
  par <- pt$par[pt$dest == "gamma"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_gamma")

  # 3. Overdispersion parameter
  comp <- c(13.57181, 18.25335)
  par <- pt$par[pt$dest == "overdis"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_overdis")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(1.35814, 1.39329)
  par <- pt$par[pt$dest == "mu_z"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_z")

  # 4.2 Variances
  comp <- c(1.59198, 1.49435)
  par <- pt$par[pt$dest == "Sigma_z" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_var")

  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(c(0, -0.10521, -0.46664), 2)
  par <- pt$par[pt$dest == "nu"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_nu")

  # 5.2 Lambda
  comp <- rep(c(1, 1.28735, 1.36718), 2)
  par <- pt$par[pt$dest == "Lambda"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_lambda")

  # 5.3 Theta
  comp <- c(
    1.55109, 1.45711, 1.36321,
    1.38212, 1.52278, 1.04421
  )
  par <- pt$par[pt$dest == "Theta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(1.58199, 1.64565)
  par <- pt$par[pt$dest == "mu_eta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_eta")

  # 6.2 Variances
  comp <- c(1.84814, 2.11163)
  par <- pt$par[pt$dest == "Sigma_eta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_eta_var")

  # 7. Latent-Manifest Covariances
  comp <- c(0.49467, 0.68556)
  par <- pt$par[pt$dest == "Sigma_z_lv"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_eta_cov")


  # STANDARD ERRORS
  # 1. Group weight
  comp <- c(0.00234, 0.00226)
  par <- avar[pt$par_free[pt$dest == "groupw"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(0.00119, 0.00030, 0.00086, 0.00024)
  par <- avar[pt$par_free[pt$dest == "beta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_beta")

  # 2.2 gamma
  comp <- c(0.00031, 0.00020)
  par <- avar[pt$par_free[pt$dest == "gamma"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_gamma")

  # 3. Overdispersion parameter
  comp <- c(4.58670, 8.98671)
  par <- avar[pt$par_free[pt$dest == "overdis"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_overdis")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(0.00370, 0.00322)
  par <- avar[pt$par_free[pt$dest == "mu_z"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_z")

  # 4.2 Variances
  comp <- c(0.01187, 0.01038)
  par <- avar[pt$par_free[pt$dest == "Sigma_z" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_z_var")


  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(c(0.01298, 0.01573), 2)
  par <- avar[pt$par_free[pt$dest == "nu"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_nu")

  # 5.2 Lambda
  comp <- rep(c(0.00314, 0.00415), 2)
  par <- avar[pt$par_free[pt$dest == "Lambda"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_lambda")

  # 5.3 Theta
  comp <- c(
    0.01820, 0.02698, 0.03034,
    0.01421, 0.02492, 0.03872
  )
  par <- avar[pt$par_free[pt$dest == "Theta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(0.00617, 0.00527)
  par <- avar[pt$par_free[pt$dest == "mu_eta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_eta")

  # 6.2 Variances
  comp <- c(0.03743, 0.05461)
  par <- avar[pt$par_free[pt$dest == "Sigma_eta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_var")

  # 7. Latent-manifest Covariances
  comp <- c(0.00928, 0.01120)
  par <- avar[pt$par_free[pt$dest == "Sigma_z_lv"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_cov")
})


# ---------------------------------------------------
# TEST 8 - one latent, two manifest covariates - two groups
# ---------------------------------------------------
test_that("two-group one latent, two manifest covariates Poisson", {
  skip_on_cran()
  fit <- countreg(
    forml = "dv ~ eta1 + z12 + z21",
    lv = list(eta1 = c("z41", "z42", "z43")),
    group = "treat",
    data = example01,
    family = "poisson",
    se = TRUE
  )
  # Converged?
  conv <- fit@fit@fit$convergence
  expect_equal(conv, 0)

  # Correct parameter estimates?
  pt <- fit@partable
  avar <- diag(fit@vcov)
  expect_equal(length(pt$par), 48)
  expect_equal(length(avar), 42)

  # LOG-LIKELIHOOD
  comp <- 11.58595
  par <- fit@fit@fit$objective
  expect_equal(par, comp, tolerance = 1e-5, label = "logl")

  # PARAMETER
  # 1. Group weight
  comp <- c(6.05912, 6.09357)
  par <- pt$par[pt$dest == "groupw"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(
    2.36960, -0.10848, 0.08538,
    2.57967, -0.10664, 0.06168
  )
  par <- pt$par[pt$dest == "beta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_beta")

  # 2.2 gamma
  comp <- c(-0.08794, -0.02418)
  par <- pt$par[pt$dest == "gamma"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_gamma")

  # 3. Overdispersion parameter
  comp <- c(0, 0)
  par <- pt$par[pt$dest == "overdis"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_overdis")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(1.35900, 3.91136, 1.39321, 4.00164)
  par <- pt$par[pt$dest == "mu_z"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_z")

  # 4.2 Variances
  comp <- c(1.59255, 0.95087, 1.49459, 0.83742)
  par <- pt$par[pt$dest == "Sigma_z" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_var")

  # 4.3 Covariance
  comp <- c(-0.63469, -0.57679)
  par <- pt$par[pt$dest == "Sigma_z" & pt$type == "cov"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_cov")

  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(c(0, -0.09006, -0.44041), 2)
  par <- pt$par[pt$dest == "nu"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_nu")

  # 5.2 Lambda
  comp <- rep(c(1, 1.27810, 1.35125), 2)
  par <- pt$par[pt$dest == "Lambda"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_lambda")

  # 5.3 Theta
  comp <- c(
    1.52390, 1.46958, 1.44107,
    1.36535, 1.53183, 1.06577
  )
  par <- pt$par[pt$dest == "Theta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(1.58494, 1.64547)
  par <- pt$par[pt$dest == "mu_eta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_eta")

  # 6.2 Variances
  comp <- c(1.86770, 2.14256)
  par <- pt$par[pt$dest == "Sigma_eta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_eta_var")

  # 7. Latent-Manifest Covariances
  comp <- c(0.50107, -0.26665, 0.69155, -0.38644)
  par <- pt$par[pt$dest == "Sigma_z_lv"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_eta_cov")


  # STANDARD ERRORS
  # 1. Group weight
  comp <- c(0.00234, 0.00226)
  par <- avar[pt$par_free[pt$dest == "groupw"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(
    0.00798, 0.00023, 0.00035,
    0.00690, 0.00018, 0.00030
  )
  par <- avar[pt$par_free[pt$dest == "beta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_beta")

  # 2.2 gamma
  comp <- c(0.00023, 0.00013)
  par <- avar[pt$par_free[pt$dest == "gamma"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_gamma")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(0.00371, 0.00222, 0.00323, 0.00185)
  par <- avar[pt$par_free[pt$dest == "mu_z"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_z")

  # 4.2 Variances
  comp <- c(0.01189, 0.00423, 0.01039, 0.00321)
  par <- avar[pt$par_free[pt$dest == "Sigma_z" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_z_var")

  # 4.3 Covarianes
  comp <- c(0.00449, 0.00368)
  par <- avar[pt$par_free[pt$dest == "Sigma_z" & pt$type == "cov"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_z_var")

  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(c(0.01280, 0.01500), 2)
  par <- avar[pt$par_free[pt$dest == "nu"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_nu")

  # 5.2 Lambda
  comp <- rep(c(0.00310, 0.00390), 2)
  par <- avar[pt$par_free[pt$dest == "Lambda"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_lambda")

  # 5.3 Theta
  comp <- c(
    0.01783, 0.02565, 0.02852,
    0.01414, 0.02406, 0.03561
  )
  par <- avar[pt$par_free[pt$dest == "Theta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(0.00625, 0.00537)
  par <- avar[pt$par_free[pt$dest == "mu_eta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_eta")

  # 6.2 Variances
  comp <- c(0.03870, 0.05667)
  par <- avar[pt$par_free[pt$dest == "Sigma_eta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_var")

  # 7. Latent-manifest Covariances
  comp <- c(0.00952, 0.00536, 0.01146, 0.00591)
  par <- avar[pt$par_free[pt$dest == "Sigma_z_lv"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_cov")
})


test_that("two-group one latent, two manifest covariate negative binomial", {
  skip_on_cran()
  fit <- countreg(
    forml = "dv ~ eta1 + z12 + z21",
    lv = list(eta1 = c("z41", "z42", "z43")),
    group = "treat",
    data = example01,
    family = "nbinom",
    se = TRUE
  )

  # Converged?
  conv <- fit@fit@fit$convergence
  expect_equal(conv, 0)

  # Correct parameter estimates?
  pt <- fit@partable
  avar <- diag(fit@vcov)
  expect_equal(length(pt$par), 48)
  expect_equal(length(avar), 44)

  # LOG-LIKELIHOOD
  comp <- 11.49911
  par <- fit@fit@fit$objective
  expect_equal(par, comp, tolerance = 1e-5, label = "logl")

  # PARAMETER
  # 1. Group weight
  comp <- c(6.05912, 6.09357)
  par <- pt$par[pt$dest == "groupw"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(
    2.34399, -0.11310, 0.08741,
    2.58951, -0.10876, 0.05917
  )
  par <- pt$par[pt$dest == "beta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_beta")

  # 2.2 gamma
  comp <- c(-0.07169, -0.02223)
  par <- pt$par[pt$dest == "gamma"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_gamma")

  # 3. Overdispersion parameter
  comp <- c(14.52583, 19.11102)
  par <- pt$par[pt$dest == "overdis"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_overdis")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(1.35808, 3.91184, 1.39380, 4.00131)
  par <- pt$par[pt$dest == "mu_z"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_z")

  # 4.2 Variances
  comp <- c(1.59218, 0.95074, 1.49559, 0.83776)
  par <- pt$par[pt$dest == "Sigma_z" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_var")

  # 4.3 Covariance
  comp <- c(-0.63448, -0.57736)
  par <- pt$par[pt$dest == "Sigma_z" & pt$type == "cov"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_cov")

  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(c(0, -0.10279, -0.46896), 2)
  par <- pt$par[pt$dest == "nu"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_nu")

  # 5.2 Lambda
  comp <- rep(c(1, 1.28584, 1.36858), 2)
  par <- pt$par[pt$dest == "Lambda"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_lambda")

  # 5.3 Theta
  comp <- c(
    1.55152, 1.45768, 1.36277,
    1.38046, 1.53710, 1.03101
  )
  par <- pt$par[pt$dest == "Theta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(1.58175, 1.64726)
  par <- pt$par[pt$dest == "mu_eta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_eta")

  # 6.2 Variances
  comp <- c(1.84751, 2.12428)
  par <- pt$par[pt$dest == "Sigma_eta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_eta_var")

  # 7. Latent-Manifest Covariances
  comp <- c(0.49468, -0.26216, 0.68968, -0.38534)
  par <- pt$par[pt$dest == "Sigma_z_lv"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_eta_cov")


  # STANDARD ERRORS
  # 1. Group weight
  comp <- c(0.00234, 0.00226)
  par <- avar[pt$par_free[pt$dest == "groupw"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(
    0.01312, 0.00037, 0.00058,
    0.01155, 0.00030, 0.00050
  )
  par <- avar[pt$par_free[pt$dest == "beta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_beta")

  # 2.2 gamma
  comp <- c(0.00030, 0.00020)
  par <- avar[pt$par_free[pt$dest == "gamma"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_gamma")

  # 3. Overdispersion parameter
  comp <- c(5.62609, 10.32605)
  par <- avar[pt$par_free[pt$dest == "overdis"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_overdis")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(0.00370, 0.00222, 0.00322, 0.00184)
  par <- avar[pt$par_free[pt$dest == "mu_z"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_z")

  # 4.2 Variances
  comp <- c(0.01188, 0.00423, 0.01041, 0.00322)
  par <- avar[pt$par_free[pt$dest == "Sigma_z" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_z_var")

  # 4.3 Covariances
  comp <- c(0.00449, 0.00368)
  par <- avar[pt$par_free[pt$dest == "Sigma_z" & pt$type == "cov"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_z_var")


  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(c(0.01297, 0.01581), 2)
  par <- avar[pt$par_free[pt$dest == "nu"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_nu")

  # 5.2 Lambda
  comp <- rep(c(0.00314, 0.00418), 2)
  par <- avar[pt$par_free[pt$dest == "Lambda"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_lambda")

  # 5.3 Theta
  comp <- c(
    0.01820, 0.02711, 0.03058,
    0.01426, 0.02493, 0.03876
  )
  par <- avar[pt$par_free[pt$dest == "Theta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(0.00617, 0.00527)
  par <- avar[pt$par_free[pt$dest == "mu_eta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_eta")

  # 6.2 Variances
  comp <- c(0.03746, 0.05544)
  par <- avar[pt$par_free[pt$dest == "Sigma_eta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_var")

  # 7. Latent-manifest Covariances
  comp <- c(0.00927, 0.00525, 0.01135, 0.00583)
  par <- avar[pt$par_free[pt$dest == "Sigma_z_lv"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_cov")
})


# ---------------------------------------------------
# TEST 9 - two latent, one manifest covariates - two groups
# ---------------------------------------------------
test_that("two-group two latent, one manifest covariates Poisson", {
  skip_on_cran()
  fit <- countreg(
    forml = "dv ~ eta1 + eta2 + z11",
    lv = list(
      eta1 = c("z21", "z22"),
      eta2 = c("z41", "z42", "z43")
    ),
    group = "treat",
    data = example01,
    family = "poisson",
    se = TRUE
  )
  # Converged?
  conv <- fit@fit@fit$convergence
  expect_equal(conv, 0)

  # Correct parameter estimates?
  pt <- fit@partable
  avar <- diag(fit@vcov)
  expect_equal(length(pt$par), 70)
  expect_equal(length(avar), 50)

  # LOG-LIKELIHOOD
  comp <- 12.55314
  par <- fit@fit@fit$objective
  expect_equal(par, comp, tolerance = 1e-5, label = "logl")

  # PARAMETER
  # 1. Group weight
  comp <- c(6.05912, 6.09358)
  par <- pt$par[pt$dest == "groupw"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(0.82196, -0.02026, 0.02869, 0.06399)
  par <- pt$par[pt$dest == "beta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_beta")

  # 2.2 gamma
  comp <- c(0.42366, -0.03738, 0.61331, 0.03109)
  par <- pt$par[pt$dest == "gamma"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_gamma")

  # 3. Overdispersion parameter
  comp <- c(0, 0)
  par <- pt$par[pt$dest == "overdis"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_overdis")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(1.59222, 1.55037)
  par <- pt$par[pt$dest == "mu_z"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_z")

  # 4.2 Variances
  comp <- c(1.68941, 1.37974)
  par <- pt$par[pt$dest == "Sigma_z" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_var")

  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(c(0, 1.45202, 0, -0.10394, -0.45037), 2)
  par <- pt$par[pt$dest == "nu"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_nu")

  # 5.2 Lambda
  comp <- rep(c(1, 0.72596, rep(0, 5), 1, 1.28661, 1.35739), 2)
  par <- pt$par[pt$dest == "Lambda"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_lambda")

  # 5.3 Theta
  comp <- c(
    0.50781, 0.33968, 1.54610, 1.41844, 1.41326,
    0.52843, 0.37247, 1.36521, 1.53639, 1.05942
  )
  par <- pt$par[pt$dest == "Theta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(3.93821, 1.57983, 3.97780, 1.64804)
  par <- pt$par[pt$dest == "mu_eta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_eta")

  # 6.2 Variances
  comp <- c(0.45290, 1.88845, 0.30698, 2.14891)
  par <- pt$par[pt$dest == "Sigma_eta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_eta_var")

  # 6.3 Covariances
  comp <- c(-0.34781, -0.41573)
  par <- pt$par[pt$dest == "Sigma_eta" & pt$type == "cov"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_eta_cov")

  # 7. Latent-Manifest Covariances
  comp <- c(-0.50655, 0.47312, -0.45868, 0.64211)
  par <- pt$par[pt$dest == "Sigma_z_lv"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_eta_cov")


  # STANDARD ERRORS
  # 1. Group weight
  comp <- c(0.00234, 0.00226)
  par <- avar[pt$par_free[pt$dest == "groupw"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(0.13553, 0.00061, 0.31977, 0.00150)
  par <- avar[pt$par_free[pt$dest == "beta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_beta")

  # 2.2 gamma
  comp <- c(0.00629, 0.00042, 0.01502, 0.00050)
  par <- avar[pt$par_free[pt$dest == "gamma"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_gamma")

  # # 3. Overdispersion parameter
  # comp <- c(8.39126, 6.93554)
  # par <- avar[pt$par_free[pt$dest == "overdis"]] |> round(5)
  # expect_equal(par, comp, tolerance = 1e-5, label = "se_overdis")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(0.00392, 0.00294)
  par <- avar[pt$par_free[pt$dest == "mu_z"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_z")

  # 4.2 Variances
  comp <- c(0.01346, 0.00892)
  par <- avar[pt$par_free[pt$dest == "Sigma_z" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_z_var")


  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(c(0.04251, 0.01284, 0.01435), 2)
  par <- avar[pt$par_free[pt$dest == "nu"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_nu")

  # 5.2 Lambda
  comp <- rep(c(0.00268, 0.00310, 0.00365), 2)
  par <- avar[pt$par_free[pt$dest == "Lambda"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_lambda")

  # 5.3 Theta
  comp <- c(
    0.00349, 0.00117, 0.01784, 0.02584, 0.02760,
    0.00239, 0.00098, 0.01372, 0.02304, 0.02940
  )
  par <- avar[pt$par_free[pt$dest == "Theta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(0.00198, 0.00617, 0.00156, 0.00523)
  par <- avar[pt$par_free[pt$dest == "mu_eta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_eta")

  # 6.2 Variances
  comp <- c(0.00487, 0.04076, 0.00267, 0.05716)
  par <- avar[pt$par_free[pt$dest == "Sigma_eta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_var")

  # 6.3 Covariances
  comp <- c(0.00486, 0.00500)
  par <- avar[pt$par_free[pt$dest == "Sigma_eta" & pt$type == "cov"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_cov")

  # 7. Latent-manifest Covariances
  comp <- c(0.00384, 0.01017, 0.00270, 0.01060)
  par <- avar[pt$par_free[pt$dest == "Sigma_z_lv"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_cov")
})


test_that("two-group two latent, one manifest covariate negative binomial", {
  skip_on_cran()
  fit <- countreg(
    forml = "dv ~ eta1 + eta2 + z11",
    lv = list(
      eta1 = c("z21", "z22"),
      eta2 = c("z41", "z42", "z43")
    ),
    group = "treat",
    data = example01,
    family = "negbin",
    se = TRUE
  )
  # Converged?
  conv <- fit@fit@fit$convergence
  expect_equal(conv, 0)

  # Correct parameter estimates?
  pt <- fit@partable
  avar <- diag(fit@vcov)
  expect_equal(length(pt$par), 70)
  expect_equal(length(avar), 52)

  # LOG-LIKELIHOOD
  comp <- 12.50705
  par <- fit@fit@fit$objective
  expect_equal(par, comp, tolerance = 1e-5, label = "logl")

  # PARAMETER
  # 1. Group weight
  comp <- c(6.05912, 6.09357)
  par <- pt$par[pt$dest == "groupw"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(1.86183, -0.08019, 1.92432, -0.04937)
  par <- pt$par[pt$dest == "beta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_beta")

  # 2.2 gamma
  comp <- c(0.19708, -0.05938, 0.20441, -0.01444)
  par <- pt$par[pt$dest == "gamma"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_gamma")

  # 3. Overdispersion parameter
  comp <- c(16.07668, 19.65088)
  par <- pt$par[pt$dest == "overdis"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_overdis")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(1.59228, 1.55054)
  par <- pt$par[pt$dest == "mu_z"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_z")

  # 4.2 Variances
  comp <- c(1.68916, 1.38302)
  par <- pt$par[pt$dest == "Sigma_z" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_var")

  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(c(0, 1.50289, 0, -0.10129, -0.44922), 2)
  par <- pt$par[pt$dest == "nu"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_nu")

  # 5.2 Lambda
  comp <- rep(c(1, 0.71290, rep(0, 5), 1, 1.28496, 1.35665), 2)
  par <- pt$par[pt$dest == "Lambda"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_lambda")

  # 5.3 Theta
  comp <- c(
    0.40008, 0.29254, 1.54578, 1.41983, 1.40770,
    0.39539, 0.31152, 1.36214, 1.54148, 1.05999
  )
  par <- pt$par[pt$dest == "Theta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(3.93729, 1.58028, 3.98050, 1.64902)
  par <- pt$par[pt$dest == "mu_eta"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_mu_eta")

  # 6.2 Variances
  comp <- c(0.56083, 1.89159, 0.44179, 2.18016)
  par <- pt$par[pt$dest == "Sigma_eta" & pt$type == "var"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_eta_var")

  # 6.3 Covariances
  comp <- c(-0.34963, -0.42280)
  par <- pt$par[pt$dest == "Sigma_eta" & pt$type == "cov"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_eta_cov")

  # 7. Latent-Manifest Covariances
  comp <- c(-0.51018, 0.47128, -0.46614, 0.65297)
  par <- pt$par[pt$dest == "Sigma_z_lv"]
  expect_equal(par, comp, tolerance = 1e-5, label = "par_sig_z_eta_cov")


  # STANDARD ERRORS
  # 1. Group weight
  comp <- c(0.00234, 0.00226)
  par <- avar[pt$par_free[pt$dest == "groupw"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_groupw")

  # 2. Regression coefficient
  # 2.1 beta
  comp <- c(0.04109, 0.00038, 0.05660, 0.00046)
  par <- avar[pt$par_free[pt$dest == "beta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_beta")

  # 2.2 gamma
  comp <- c(0.00190, 0.00033, 0.00260, 0.00024)
  par <- avar[pt$par_free[pt$dest == "gamma"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_gamma")

  # 3. Overdispersion parameter
  comp <- c(8.68960, 13.23318)
  par <- avar[pt$par_free[pt$dest == "overdis"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_overdis")

  # 4. Manifest Covariate Parameters
  # 4.1 Means
  comp <- c(0.00392, 0.00293)
  par <- avar[pt$par_free[pt$dest == "mu_z"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_z")

  # 4.2 Variances
  comp <- c(0.01345, 0.00897)
  par <- avar[pt$par_free[pt$dest == "Sigma_z" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_z_var")


  # 5. Measurement Model
  # 5.1 nu
  comp <- rep(c(0.04897, 0.01268, 0.01420), 2)
  par <- avar[pt$par_free[pt$dest == "nu"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_nu")

  # 5.2 Lambda
  comp <- rep(c(0.00310, 0.00305, 0.00360), 2)
  par <- avar[pt$par_free[pt$dest == "Lambda"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_lambda")

  # 5.3 Theta
  comp <- c(
    0.00293, 0.00097, 0.01771, 0.02552, 0.02740,
    0.00221, 0.00081, 0.01349, 0.02321, 0.02914
  )
  par <- avar[pt$par_free[pt$dest == "Theta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mm_theta")

  # 6. Latent Covariate Parameters
  # 6.1 Means
  comp <- c(0.00205, 0.00618, 0.00164, 0.00513)
  par <- avar[pt$par_free[pt$dest == "mu_eta"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_mu_eta")

  # 6.2 Variances
  comp <- c(0.00497, 0.04050, 0.00355, 0.05295)
  par <- avar[pt$par_free[pt$dest == "Sigma_eta" & pt$type == "var"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_var")

  # 6.3 Covariances
  comp <- c(0.00518, 0.00536)
  par <- avar[pt$par_free[pt$dest == "Sigma_eta" & pt$type == "cov"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_cov")

  # 7. Latent-manifest Covariances
  comp <- c(0.00409, 0.01013, 0.00301, 0.01050)
  par <- avar[pt$par_free[pt$dest == "Sigma_z_lv"]]
  expect_equal(par, comp, tolerance = 1e-5, label = "se_sig_eta_cov")
})


# ---------------------------------------------------
# TEST 10 - one latent variable - one group
# ---------------------------------------------------
test_that("one latent variable in one group - Poisson", {
  skip("Not finished")
  fit <- countreg(
    forml = "dv ~ eta",
    lv = list(eta = c("z41", "z42", "z43")),
    group = NULL,
    data = example01,
    family = "poisson",
    se = TRUE
  )
  par <- fit@partable$par
  comp <- c(
    6.769642, 2.72414, -0.109569, 0, 1, -0.054137,
    1.256452, -0.343201, 1.29337, 1.61712, 2.004875, 0,
    1.393845, 1.523669, 1.430018
  )
  expect_equal(length(par), 15)
  expect_equal(par, comp, tolerance = 1e-5)
})
chkiefer/lavacreg documentation built on Oct. 28, 2023, 11:35 a.m.