set.seed(12345)
HSMiss$x5 <- ifelse(HSMiss$x5 <= quantile(HSMiss$x5, .3), NA, HSMiss$x5)
age <- HSMiss$ageyr + HSMiss$agemo/12
HSMiss$x9 <- ifelse(age <= quantile(age, .3), NA, HSMiss$x9)
## specify CFA model from lavaan's ?cfa help page
HS.model <- '
visual =~ x1 + x2 + x3
textual =~ x4 + x5 + x6
speed =~ x7 + x8 + x9
textual ~ a*visual
speed ~ cp*visual + b*textual
ind := a*b
'
## ... or impute missing data first
library(Amelia)
set.seed(12345)
HS.amelia <- amelia(HSMiss, m = 20, noms = "school", p2s = FALSE)
imps <- HS.amelia$imputations
out2 <- cfa.mi(HS.model, data = imps,
std.lv=T, verbose=T)
sm <- data.frame(summary(out2, ci=T))
abs <- sm[sm$label %in%c("a","b") ,"est"] ## save the parameter estimates a and b
ACM <- vcov(out2, type="pooled")[c("a","b"),c("a","b")] # get the pooled coavriance matrix of the parameters
monteCarloMed('a*b', coef1=abs[1], coef2=abs[2], ACM=ACM) ## estimate the montecarlo sampling method