I'm getting an error when using the "sim" function from the "simsem" package. "Error in clean(simResults): All replications in the result object are not convergent. Thus, the result object cannot be used. Below is code to reference.
effectSizes <- c(.1, .3, .5)
modelEffects <- expand.grid(effectSizes, effectSizes, effectSizes)
names(modelEffects) <- c('a', 'b', 'c')
models <- modelEffects %>%
rowwise() %>%
do({
genModel <- paste0('# direct effect
Y ~ ', .$c, '*X
# mediator
M ~ ', .$a, '*X
Y ~ ', .$b, '*M
X ~~ 1*X
Y ~~ 1*Y
M ~~ 1*M
')
testModel <-'# direct effect
Y ~ c*X
# mediator
M ~ a*X
Y ~ b*M
# indirect effect (a*b)
ab := a*b
# total effect
total := c + (a*b)
'
data.frame(a=.$a, b=.$b, c=.$c,
gen=genModel, test=testModel, stringsAsFactors=F)
})
#############################################################################
REDOSIMS=T #Set REDOSIMS = T for the first time executing and F for future iterations.
if(REDOSIMS){
allModelPowerSim <- models %>%
rowwise() %>%
do({
manySims <- sim(NULL, model=.$test[1], n=50:1500, generate=.$gen[1],
lavaanfun='sem', multicore=T)
data_frame(a=.$a, b=.$b, c=.$c, powersims=list(manySims))
})
#save the above
saveRDS(allModelPowerSim, 'power_simulations.RDS')
} else {
#load the above
allModelPowerSim <- readRDS('power_simulations.RDS')
}
################################################################################
powerData <- allModelPowerSim %>% rowwise() %>%
do({
aSimPower <- as.data.frame(getPower(.$powersims,
nVal=seq(50, 1500, 5),
powerParam='ab'))
data_frame(a=.$a, b=.$b, c=.$c,
alab=paste0('a=',.$a),
blab=paste0('b=',.$b),
clab=paste0('c=',.$c),
N=aSimPower[,1],
ab=aSimPower[,2])
})
print(powerData)