tests/testthat/test-model.R

test_that("model construction validation", {
   # latent class analysis
   lca2  = catlvm(L1[2] ~ X1 + X2 + X3 + X4 + X5)
   lca3  = catlvm(L1[3] ~ X1 + X2 + X3 + X4 + X5)
   lca4  = catlvm(L1[4] ~ X1 + X2 + X3 + X4 + X5)
   lca5  = catlvm(L1[5] ~ X1 + X2 + X3 + X4 + X5)
   # several latent class analysis
   lcas2 = catlvm(L1[2] ~ X1 + X2 + X3 + X4 + X5,
                  L2[2] ~ Y1 + Y2 + Y3 + Y4 + Y5)
   lcas3 = catlvm(L1[3] ~ X1 + X2 + X3 + X4 + X5,
                  L2[3] ~ Y1 + Y2 + Y3 + Y4 + Y5,
                  L3[3] ~ Z1 + Z2 + Z3 + Z4 + Z5)
   # joint latent class analysis
   jlca1 = catlvm(L1[3] ~ X1 + X2 + X3,
                  L2[3] ~ Y1 + Y2 + Y3,
                  L3[3] ~ Z1 + Z2 + Z3,
                  JC[3] ~ L1 + L2 + L3)
   jlca2 = catlvm(L1[2] ~ X1 + X2 + X3,
                  L2[3] ~ Y1 + Y2 + Y3,
                  L3[4] ~ Z1 + Z2 + Z3,
                  JC[3] ~ L1 + L2 + L3)
   # highly joint latent class analysis
   jjcpa = catlvm(L1[2] ~ X11 + X21 + X31,
                  M1[2] ~ Y11 + Y21 + Y31,
                  N1[2] ~ Z11 + Z21 + Z31,
                  L2[2] ~ X12 + X22 + X32,
                  M2[2] ~ Y12 + Y22 + Y32,
                  N2[2] ~ Z12 + Z22 + Z32,
                  L3[2] ~ X13 + X23 + X33,
                  M3[2] ~ Y13 + Y23 + Y33,
                  N3[2] ~ Z13 + Z23 + Z33,
                  J1[2] ~ L1 + M1 + N1,
                  J2[2] ~ L2 + M2 + N2,
                  J3[2] ~ L3 + M3 + N3,
                  JP[2] ~ J1 + J2 + J3)
   # latent class analysis with latent group
   lcawg = catlvm(LG[2] ~ Z1 + Z2 + Z3,
                  LC[2] ~ X1 + X2 + X3,
                  LG ~ LC)
})

test_that("models with constraints", {
   # latent class profile analysis
   lcpa1 = catlvm(L1[3] ~ X1 + X2 + X3, L2[3] ~ Y1 + Y2 + Y3,
                  L3[3] ~ Z1 + Z2 + Z3, PF[4] ~ L1 + L2 + L3,
                  constraints = list(c("L1", "L2", "L3")))
   expect_error(
      catlvm(L1[2] ~ X1 + X2 + X3, L2[3] ~ Y1 + Y2 + Y3,
             L3[4] ~ Z1 + Z2 + Z3, PF[3] ~ L1 + L2 + L3,
             constraints = list(c("L1", "L2", "L3")))
   )

   # joint latent class analysis
   jlcpa = catlvm(L1[2] ~ X11 + X21 + X31,
                  M1[2] ~ Y11 + Y21 + Y31,
                  N1[2] ~ Z11 + Z21 + Z31,
                  L2[2] ~ X12 + X22 + X32,
                  M2[2] ~ Y12 + Y22 + Y32,
                  N2[2] ~ Z12 + Z22 + Z32,
                  L3[2] ~ X13 + X23 + X33,
                  M3[2] ~ Y13 + Y23 + Y33,
                  N3[2] ~ Z13 + Z23 + Z33,
                  J1[2] ~ L1 + M1 + N1,
                  J2[2] ~ L2 + M2 + N2,
                  J3[2] ~ L3 + M3 + N3,
                  JP[2] ~ J1 + J2 + J3,
                  constraints = list(
                     c("L1", "L2", "L3"), c("M1", "M2", "M3"), c("N1", "N2", "N3"),
                     c("J1 ~ L1", "J2 ~ L2", "J3 ~ L3"),
                     c("J1 ~ M1", "J2 ~ M2", "J3 ~ M3"),
                     c("J1 ~ N1", "J2 ~ N2", "J3 ~ N3")
                  ))
   # latent transition analysis
   lta = catlvm(L1[3] ~ X11 + X21 + X31,
                L2[3] ~ X12 + X22 + X32,
                L3[3] ~ X13 + X23 + X33,
                L1 ~ L2, L2 ~ L3,
                constraints = list(c("L1", "L2", "L3")))
   # joint latent transition analysis
   jlta = catlvm(L1[3] ~ X11 + X21 + X31,
                 M1[3] ~ Y11 + Y21 + Y31,
                 N1[3] ~ Z11 + Z21 + Z31,
                 L2[3] ~ X12 + X22 + X32,
                 M2[3] ~ Y12 + Y22 + Y32,
                 N2[3] ~ Z12 + Z22 + Z32,
                 L3[3] ~ X13 + X23 + X33,
                 M3[3] ~ Y13 + Y23 + Y33,
                 N3[3] ~ Z13 + Z23 + Z33,
                 J1[3] ~ L1 + M1 + N1,
                 J2[3] ~ L2 + M2 + N2,
                 J3[3] ~ L3 + M3 + N3,
                 J1 ~ J2, J2 ~ J3,
                 constraints = list(
                    c("L1", "L2", "L3"), c("M1", "M2", "N3"), c("N1", "N2", "N3"),
                    c("J1 ~ L1", "J2 ~ L2", "J3 ~ L3"),
                    c("J1 ~ M1", "J2 ~ M2", "J3 ~ M3"),
                    c("J1 ~ N1", "J2 ~ N2", "J3 ~ N3")
                 ))
   # multivariate latent class profile analysis
   mlcpa = catlvm(L1[3] ~ X11 + X21 + X31,
                  M1[3] ~ Y11 + Y21 + Y31,
                  L2[3] ~ X12 + X22 + X32,
                  M2[3] ~ Y12 + Y22 + Y32,
                  L3[3] ~ X13 + X23 + X33,
                  M3[3] ~ Y13 + Y23 + Y33,
                  LP[3] ~ L1 + M1 + L2 + M2 + L3 + M3,
                  constraints = list(
                     c("L1", "L2", "L3"), c("M1", "M2", "M3"),
                     c("LP->L1", "LP->L2", "LP->L3"),
                     c("LP->M1", "LP->M2", "LP->M3")
                  ))
   # latent class profile analysis with latent group
   lcpawg = catlvm(LG[2] ~ Z1 + Z2 + Z3,
                   LG ~ P1,
                   L1[2] ~ X11 + X12 + X13,
                   L2[2] ~ X21 + X22 + X23,
                   L3[2] ~ X31 + X32 + X33,
                   P1[2] ~ L1 + L2 + L3,
                   constraints = list(c("L1", "L2", "L3")))
   # latent class analysis with latent profile
   lcawp = catlvm(LP[2] ~ L1 + L2 + L3,
                  L1[2] ~ Y11 + Y12 + Y13,
                  L2[2] ~ Y21 + Y22 + Y23,
                  L3[2] ~ Y31 + Y32 + Y33,
                  LP ~ L,
                  L[2] ~ X11 + X12 + X13,
                  constraints = list(c("L1", "L2", "L3")))
})
kim0sun/catlvm documentation built on May 8, 2023, 12:55 p.m.