## ----setup, include = FALSE--------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----simulatedata------------------------------------------------------------- # Number of observations n <- 1000 # Coefficient for a path (x -> m) a <- .75 # Coefficient for b path (m -> y) b <- .80 # Coefficient for total effect (x -> y) c <- .60 # Coefficient for indirect effect (x -> m -> y) ab <- a * b # Coefficient for direct effect (x -> y) cd <- c - ab # Compute x, m, y values set.seed(100) x <- rnorm(n) m <- a * x + sqrt(1 - a^2) * rnorm(n) eps <- 1 - (cd^2 + b^2 + 2*a * cd * b) y <- cd * x + b * m + eps * rnorm(n) data <- data.frame(y = y, x = x, m = m) ## ----lavaan1------------------------------------------------------------------ model <- " # direct effect y ~ c*x # mediator m ~ a*x y ~ b*m # indirect effect (a*b) ab := a*b # total effect cd := c + (a*b)" fit <- lavaan::sem(model, data = data) lavaan::summary(fit) ## ----fitdata1, eval = FALSE--------------------------------------------------- # bayesian.fit <- bfw::bfw(project.data = data, # latent = "x,m,y", # saved.steps = 50000, # latent.names = "Independent,Mediator,Dependent", # additional = "indirect <- xm * my , total <- xy + (xm * my)", # additional.names = "AB,C", # jags.model = "fit", # silent = TRUE) # # round(bayesian.fit$summary.MCMC[,3:7],3) # #> Mode ESS HDIlo HDIhi n # #> beta[2,1]: Mediator vs. Independent 0.760 48988 0.720 0.799 1000 # #> beta[3,1]: Dependent vs. Independent 0.024 13042 -0.012 0.058 1000 # #> beta[3,2]: Dependent vs. Mediator 0.751 13230 0.715 0.786 1000 # #> indirect[1]: AB 0.571 21431 0.531 0.611 1000 # #> total[1]: C 0.591 49074 0.555 0.630 1000 ## ----noise-------------------------------------------------------------------- biased.sigma <-matrix(c(1,1,0,1,1,0,0,0,1),3,3) set.seed(101) noise <- MASS::mvrnorm(n=2, mu=c(200, 300, 0), Sigma=biased.sigma, empirical=FALSE) colnames(noise) <- c("y","x","m") biased.data <- rbind(data,noise) ## ----lavaan2------------------------------------------------------------------ biased.fit <- lavaan::sem(model, data = biased.data) lavaan::summary(biased.fit) ## ----fitdata2, eval = FALSE--------------------------------------------------- # biased.bfit <- bfw::bfw(project.data = data, # latent = "x,m,y", # saved.steps = 50000, # latent.names = "Independent,Mediator,Dependent", # additional = "indirect <- xm * my , total <- xy + (xm * my)", # additional.names = "AB,C", # jags.model = "fit", # run.robust = TRUE, # jags.seed = 101, # silent = TRUE) # # round(biased.bfit$summary.MCMC[,3:7],3) # #> Mode ESS HDIlo HDIhi n # #> beta[2,1]: Mediator vs. Independent 0.763 31178 0.721 0.799 1000 # #> beta[3,1]: Dependent vs. Independent 0.022 7724 -0.014 0.057 1000 # #> beta[3,2]: Dependent vs. Mediator 0.751 7772 0.714 0.786 1000 # #> indirect[1]: AB 0.572 12913 0.531 0.610 1000 # #> total[1]: C 0.590 31362 0.557 0.631 1000