params <-
list(EVAL = FALSE)

## ----SETTINGS-knitr, include=FALSE------------------------------------------------------
stopifnot(require(knitr))
options(width = 90)
opts_chunk$set(
  comment = NA,
  message = FALSE,
  warning = FALSE
)

## ----echo=FALSE-------------------------------------------------------------------------
library(ThurMod)
designA(4)

## ----echo=FALSE-------------------------------------------------------------------------
load("4v.RData")

## ---------------------------------------------------------------------------------------
library(ThurMod)

## ---------------------------------------------------------------------------------------
nfactor <- 4
nitem <- 12
nperson <- 1000
itf <- rep(1:4, 3)
varcov <- diag(1, 4)

# latent utility means
set.seed(69)
lmu <- runif(nitem, -1, 1)
loadings <- runif(nitem, 0.30, 0.95)

## ---------------------------------------------------------------------------------------
data <- sim.data(nfactor = nfactor, nitem = nitem, nperson = nperson, itf = itf,
                 varcov = varcov, lmu = lmu, loadings = loadings)

#save the file
write.table(data, paste0(tempdir(),'/','myDataFile_f.dat'), quote = FALSE, 
            sep = " ", col.names = FALSE, row.names = FALSE)

## ---------------------------------------------------------------------------------------
blocks <- matrix(1:nitem, nrow = 1)

## ----eval =FALSE------------------------------------------------------------------------
# # Mplus
# syntax.mplus(blocks, itf, model = 'lmean', input_path = 'myFC_model_f.inp', data_path =
#                "myDataFile_f.dat")

## ---------------------------------------------------------------------------------------
#lavaan
modelsyn <- syntax.lavaan(blocks, itf, model = 'lmean')

## ----eval = FALSE-----------------------------------------------------------------------
# # Mplus
# system('mplus myFC_model_f.inp', wait = TRUE, show.output.on.console= FALSE)

## ----eval = FALSE-----------------------------------------------------------------------
# #lavaan
# results_lav1 <- lavaan::lavaan(modelsyn, data = data, ordered = TRUE, auto.fix.first = FALSE,
#                       auto.var = TRUE, int.lv.free = TRUE, parameterization = "theta",
#                       estimator = 'ULSMV')

## ----eval = FALSE-----------------------------------------------------------------------
# # Mplus
# results_mplus1 <- read.mplus(blocks, itf, model = 'lmean', output_path = "myFC_model_f.out")

## ---------------------------------------------------------------------------------------
unlist(results_mplus1$fit)

## ----eval = FALSE-----------------------------------------------------------------------
# results_lav1 <- lavaan::fitmeasures(results_lav1)[c('chisq.scaled','df.scaled','pvalue.scaled',
#                                      'rmsea.scaled','rmsea.ci.lower.scaled','rmsea.ci.upper.scaled',
#                                      'rmsea.pvalue.scaled','cfi.scaled')]

## ---------------------------------------------------------------------------------------
results_lav1

## ----eval = FALSE-----------------------------------------------------------------------
# # Mplus
# results_mplus2 <- fit.mplus(blocks, itf, model = 'lmean', input_path = 'myFC_model_f.inp',
#                             output_path = "myFC_model_f.out", data_path = "myDataFile_f.dat")

## ----eval =  FALSE----------------------------------------------------------------------
# #lavaan
# results_lav2 <- fit.lavaan(blocks, itf, model = 'lmean', data = data)
# lavaan::fitmeasures(results_lav2)[c('rmsea.scaled','rmsea.ci.lower.scaled','rmsea.ci.upper.scaled',
#                                     'rmsea.pvalue.scaled','cfi.scaled')]

## ----eval = FALSE-----------------------------------------------------------------------
# # Mplus
# results_mplus2irt <- fit.mplus(blocks, itf, model = 'irt', input_path = 'myFC_model_irt.inp',
#                                output_path = "myFC_model_irt.out", data_path = "myDataFile_f.dat")

## ---------------------------------------------------------------------------------------
unlist(results_mplus2irt$fit)

## ----eval = FALSE-----------------------------------------------------------------------
# #lavaan
# results_lav2irt <- fit.lavaan(blocks, itf, model = 'irt', data = data)

## ----eval = FALSE-----------------------------------------------------------------------
# results_lav2irt <- lavaan::fitmeasures(results_lav2irt)[c('chisq.scaled','df.scaled','pvalue.scaled',
#                                      'rmsea.scaled','rmsea.ci.lower.scaled','rmsea.ci.upper.scaled',
#                                      'rmsea.pvalue.scaled','cfi.scaled')]

## ---------------------------------------------------------------------------------------
results_lav2irt

## ----eval = FALSE-----------------------------------------------------------------------
# scores_results_lav2irt <- lavaan::lavPredict(results_lav2irt)

## ---------------------------------------------------------------------------------------
nfactor <- 5
nitem <- 30
nperson <- 1000
itf <- rep(1:5, 6)
varcov <- diag(1, 5)

# latent utility means
set.seed(69)
lmu <- runif(nitem, -1, 1)
loadings <- runif(nitem, 0.30, 0.95)

## ---------------------------------------------------------------------------------------
set.seed(1234)
data <- sim.data(nfactor = nfactor, nitem = nitem, nperson = nperson, itf = itf, varcov = varcov,
                 lmu = lmu, loadings = loadings)

## ----eval = FALSE-----------------------------------------------------------------------
# #save the file
# write.table(data,'myDataFile.dat', quote = FALSE, sep = " ", col.names = FALSE, row.names = FALSE)

## ---------------------------------------------------------------------------------------
blocks <- matrix(sample(1:nitem, nitem), ncol = 3)

## ---------------------------------------------------------------------------------------
pair.combn(blocks)

## ---------------------------------------------------------------------------------------
blocks_sorted <- blocksort(blocks)
pair.combn(blocks_sorted)

## ---------------------------------------------------------------------------------------
# Get names of binary indicators that have non-ascending names
tmp <- which(pair.combn(blocks)[,1] > pair.combn(blocks)[,2])

# get names
pair_names_b <- i.name(blocks)
pair_names_ori <- i.name(1:nitem)

# Rename
pair_names <- i.name(1:nitem)
if(length(tmp) != 0){
  tmp1 <- pair_names_b[tmp]
  tmp2 <- sub('^i.+i','i', tmp1)
  tmp3 <- tmp1
  for(j in 1:length(tmp)){
    tmp3 <- paste0(tmp2[j], sub(paste0(tmp2[j],'$'), '', tmp1[j]))
    pair_names[which(pair_names %in% tmp3)] <- pair_names_b[tmp[j]]
  }
}

tmp <- which(!names(data) %in% pair_names)
# Clone data
data_recoded <- data
# Recode and rename
data_recoded[,tmp] <- abs(data[,tmp]-1)
names(data_recoded) <- pair_names


## ----eval = FALSE-----------------------------------------------------------------------
# # Save data
# write.table(data_recoded, 'myDataFile_rec.dat', quote = FALSE, sep = " ", col.names = FALSE,
#             row.names = FALSE)

## ----eval = FALSE-----------------------------------------------------------------------
# # Blocks_sorted
# # Mplus
# results_mplus_b <- fit.mplus(blocks_sorted, itf, model = 'irt', input_path = 'myFC_model_bu.inp',
#                              output_path = "myFC_model_bu.out", data_path = "myDataFile.dat",
#                              data_full = TRUE)

## ---------------------------------------------------------------------------------------
unlist(results_mplus_b$fit)

## ----eval = FALSE-----------------------------------------------------------------------
# #lavaan
# results_lav_b <- fit.lavaan(blocks_sorted, itf, model = 'irt', data = data)
# results_lav_b_fm <- lavaan::fitmeasures(results_lav_b)

## ----eval = FALSE-----------------------------------------------------------------------
# results_lav_b <- lavaan::fitmeasures(results_lav_b)[c('chisq.scaled','df.scaled','pvalue.scaled',
#                                      'rmsea.scaled','rmsea.ci.lower.scaled','rmsea.ci.upper.scaled',
#                                      'rmsea.pvalue.scaled','cfi.scaled')]

## ---------------------------------------------------------------------------------------
results_lav_b

## ----eval = FALSE-----------------------------------------------------------------------
# scores_results_lav_b <- lavaan::lavPredict(results_lav_b)

## ----eval = FALSE-----------------------------------------------------------------------
# # Recoded data
# # Mplus
# results_mplus_brec <- fit.mplus(blocks, itf, model = 'irt', input_path = 'myFC_model_brecu.inp',
#                                 output_path = "myFC_model_brecu.out", data_path =
#                                   "myDataFile_rec.dat", data_full = TRUE)

## ---------------------------------------------------------------------------------------
unlist(results_mplus_brec$fit)

## ----eval = FALSE-----------------------------------------------------------------------
# #lavaan
# results_lav_brec <- fit.lavaan(blocks, itf, model = 'irt', data = data_recoded)

## ----eval = FALSE-----------------------------------------------------------------------
# results_lav_brec <- lavaan::fitmeasures(results_lav_brec)[c('chisq.scaled','df.scaled','pvalue.scaled',
#                                      'rmsea.scaled','rmsea.ci.lower.scaled','rmsea.ci.upper.scaled',
#                                      'rmsea.pvalue.scaled','cfi.scaled')]

## ---------------------------------------------------------------------------------------
results_lav_brec

## ----eval = FALSE-----------------------------------------------------------------------
# scores_results_lav_brec <- lavaan::lavPredict(results_lav_brec)

## ---------------------------------------------------------------------------------------
#save fit measures
tmp <- results_lav_b_fm
fit.correct(1000, blocks, tmp['chisq.scaled'], tmp['df.scaled'], tmp['baseline.chisq.scaled'],
            tmp['baseline.df.scaled'])

## ---------------------------------------------------------------------------------------
blocks

## ---------------------------------------------------------------------------------------
count.xblocks(blocks)

## ---------------------------------------------------------------------------------------
blocks_extra <- matrix(c(23,14,8,24,28,4,25,16,29,22,26,13,1,21,30), ncol = 3, byrow = TRUE)
blocks_con <- rbind(blocks, blocks_extra)

## ---------------------------------------------------------------------------------------
rankA(blocks_con)

## ---------------------------------------------------------------------------------------
metablock(blocks_con)

## ---------------------------------------------------------------------------------------
blocks_extra <- matrix(c(23,14,8,24,28,4,25,16,29,1,21,30), ncol = 3, byrow = TRUE)
blocks_con <- rbind(blocks, blocks_extra)

## ---------------------------------------------------------------------------------------
rankA(blocks_con)

## ---------------------------------------------------------------------------------------
metablock(blocks_con)

## ---------------------------------------------------------------------------------------
blocks_extra <- get.xblocks(blocks, itf, multidim = TRUE, item_not = NULL)
blocks_con <- rbind(blocks, blocks_extra)
blocks_con
blocks_con_sorted <- blocksort(blocks_con)

## ---------------------------------------------------------------------------------------
# Get names of binary indicators that have non-ascending names
tmp <- which(pair.combn(blocks_con)[,1] > pair.combn(blocks_con)[,2])

# get names
pair_names_b <- i.name(blocks_con)
pair_names_ori <- i.name(1:nitem)

# Rename
pair_names <- i.name(1:nitem)
if(length(tmp)!=0){
  tmp1 <- pair_names_b[tmp]
  tmp2 <- sub('^i.+i','i', tmp1)
  tmp3 <- tmp1
  for(j in 1:length(tmp)){
    tmp3 <- paste0(tmp2[j], sub(paste0(tmp2[j],'$'), '', tmp1[j]))
    pair_names[which(pair_names %in% tmp3)] <- pair_names_b[tmp[j]]
  }
}

tmp <- which(!names(data) %in% pair_names)
# Clone data
data_recoded <- data
# Recode and rename
data_recoded[,tmp] <- abs(data[,tmp]-1)
names(data_recoded) <- pair_names

## ----eval = FALSE-----------------------------------------------------------------------
# # Save data
# write.table(data_recoded, 'myDataFile_rec.dat', quote = FALSE, sep = " ", col.names = FALSE,
#             row.names = FALSE)

## ----eval = FALSE-----------------------------------------------------------------------
# # Blocks_sorted
# # Mplus
# results_mplus_bc <- fit.mplus(blocks_con_sorted,itf,model='irt',input_path='myFC_model_b_con.inp',
#                              output_path="myFC_model_b_con.out",data_path="myDataFile.dat",
#                              data_full = TRUE)

## ---------------------------------------------------------------------------------------
unlist(results_mplus_bc$fit)

## ----eval = FALSE-----------------------------------------------------------------------
# #lavaan
# results_lav_bc <- fit.lavaan(blocks_con_sorted, itf, model = 'irt', data = data)
# results_lav_bc_fm <- lavaan::fitmeasures(results_lav_bc)

## ----eval = FALSE-----------------------------------------------------------------------
# results_lav_bc <- lavaan::fitmeasures(results_lav_bc)[c('chisq.scaled','df.scaled','pvalue.scaled',
#                                      'rmsea.scaled','rmsea.ci.lower.scaled','rmsea.ci.upper.scaled',
#                                      'rmsea.pvalue.scaled','cfi.scaled')]

## ---------------------------------------------------------------------------------------
results_lav_bc

## ----eval = FALSE-----------------------------------------------------------------------
# scores_results_lav_bc <- lavaan::lavPredict(results_lav_bc)

## ----eval = FALSE-----------------------------------------------------------------------
# # Recoded data
# # Mplus
# results_mplus_bcrec <- fit.mplus(blocks_con, itf, model = 'irt', input_path = 'myFC_model_brec.inp',
#                                 output_path = "myFC_model_brec.out",data_path =
#                                   "myDataFile_rec.dat",data_full = TRUE, byblock = FALSE)

## ---------------------------------------------------------------------------------------
unlist(results_mplus_bcrec$fit)

## ----eval = FALSE-----------------------------------------------------------------------
# #lavaan
# results_lav_bcrec <- fit.lavaan(blocks_con, itf, model = 'irt', data = data_recoded)

## ----eval = FALSE-----------------------------------------------------------------------
# results_lav_bcrec <- lavaan::fitmeasures(results_lav_bcrec)[c('chisq.scaled','df.scaled','pvalue.scaled',
#                                      'rmsea.scaled','rmsea.ci.lower.scaled','rmsea.ci.upper.scaled',
#                                      'rmsea.pvalue.scaled','cfi.scaled')]

## ---------------------------------------------------------------------------------------
results_lav_bcrec

## ----eval = FALSE-----------------------------------------------------------------------
# scores_results_lav_bcrec <- lavaan::lavPredict(results_lav_bcrec)

## ---------------------------------------------------------------------------------------
#save fit measures
tmp <- results_lav_bc_fm
fit.correct(1000, blocks_con, tmp['chisq.scaled'], tmp['df.scaled'], tmp['baseline.chisq.scaled'],
            tmp['baseline.df.scaled'])

## ---------------------------------------------------------------------------------------
#Get the relevant names
tmp_names <- i.name(blocks_con_sorted)

#same example as before
set.seed(1234)
data <- sim.data(nfactor = nfactor, nitem = nitem, nperson = nperson, itf = itf, varcov = varcov,
                 lmu = lmu, loadings = loadings, variables = tmp_names)

## ----eval = FALSE-----------------------------------------------------------------------
# #save the file
# write.table(data, 'myDataFile.dat', quote = FALSE, sep = " ", col.names = FALSE,
#             row.names = FALSE)

