tests/testthat/test-sim1.R

# test if miivefa recovers simple 2 factor model
library(MIIVefa)
##simulate
library(mnormt)
seed <- 1234 #for replication purpose
#generate latent factor values
eta <- rmnorm(n=500,
              mean = c(0,0),
              varcov = matrix(c(1,.5,
                                .5,1), nrow = 2))
#generate residuals
seed <- 1234
e <- rmnorm(n=500,
            varcov =  diag(.25, nrow = 8))
#factor loading matrix
lambda <- matrix(c(1,0,
                   .8,0,
                   .7,0,
                   .6,0,
                   0,1,
                   0,.8,
                   0,.7,
                   .4,.6), nrow = 8, byrow = T)
#obtain observed variable values
sim1data <- eta %*% t(lambda) + e
#create column names
colnames(sim1data) <- paste0("x", 1:ncol(sim1data))
#make it a data frame
sim1data <- as.data.frame(sim1data)


#run miivefa
sim1fit <- miivefa(sim1data,
                        sigLevel = .01,
                        scalingCrit = 'sargan+factorloading_R2',
                        correlatedErrors = NULL)
#if it recovers a 2 factor model
expect_equal(
  length(strsplit(sim1fit$model, '\n')[[1]]), 2
)

# #if it recovers as true DGM
# expect_in(
#   lapply(lapply(strsplit(sim1fit$model, '\n')[[1]],
#                 function(x) strsplit(x, '=~')[[1]][[2]]),
#          function(x) sort(strsplit(x, "\\+")[[1]])),
#   list(c("x1","x2","x3","x4","x8"),
#             c("x5","x6","x7","x8"))
# )

Try the MIIVefa package in your browser

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

MIIVefa documentation built on May 29, 2024, 11:14 a.m.