Introduction

This report simulates the structural equation model in the study ‘Reporting Structural Equation Modeling and Confirmatory Factor Analysis Results: A Review’ by Schreiber, Stage, King, Nora, & Barlow (2006) in The Journal of Educational Review. In the study, a theoretical model hypothesizing a direct negative effect of teacher education students’ beliefs of knowledge as consisting of isolated facts on course achievement, a positive direct effect of students’ beliefs of knowledge as deep processing on course achievement, and an indirect negative effect of ‘isolated’ beliefs on course achievement mediated through ‘deep’ beliefs was confirmed by data collected with a non-normed fit index of .98, a comparative fit index of .99, and a root mean square error of approximation of .038 (Schreiber et al., 2006). The model accounted for 13% of the variance in course achievement and 6% of the variance in beliefs of knowledge as deep processing (Schreiber et al., 2006). The ‘isolated’ and ‘deep’ latent variables were factored from likert scale responses on students’ degree of belief of knowledge relating to ‘specific facts’, ‘one answer’, and ‘one meaning’; and relating to ‘comparing/contrasting’, ‘term papers’, and ‘reading critically’ (Schreiber et al., 2006). The simulated data structure, R code, and summary outputs are provided for replication of the analyses and graphics and are presented through R Markdown/HTML formating . ## Data Setup

The correlation matrix (n=203) of all 7 observed variables: students scores on ‘One Meaning’, ‘One Answer’, ‘Specific Facts’, ‘Compare/Contrast’, ‘Term Papers’, ‘Read Critically’, and ‘Course Achievement’ measures was provided in the original study and recreated in R for the later structural equation model to be based off. Lower triangle correlations were inputed and then flipped across the matrix diagonal to produce the full correlation matrix.

set.seed(1)
data <- data.frame(matrix(ncol=7,nrow=7))
variables <- c("CC","TP","RC","SF","OA","OM","A")
colnames(data) <- variables
rownames(data) <- variables
data[1,] <- c(1.00,NA,NA,NA,NA,NA,NA)
data[2,] <- c(.42,1.00,NA,NA,NA,NA,NA)
data[3,] <- c(.81,.47,1.00,NA,NA,NA,NA)
data[4,] <- c(-.02,.03,-.09,1.00,NA,NA,NA)
data[5,] <- c(-.17,0,-.24,.50,1.00,NA,NA)
data[6,] <- c(-.07,-.10,-.16,.12,.14,1.00,NA)
data[7,] <- c(.22,.19,.29,-.10,-.30,-.20,1.00)
data[upper.tri(data, diag=F)] = t(data)[upper.tri(data, diag=F)]

Correlation Plot of All Observed Variables

CC: Compare/Contrast; TP: Term Papers; RC: Read Critically; SF: Specific Facts; OA: One Answer; OM: One Meaning; A: Course Achievement

library(ggcorrplot)
ggcorrplot(data,lab=TRUE)

Structural Equation Model

Model Specification and Summary

The following code creates the structural model to fit the correlation matrix made with using the OpenMx open source package. Paths parameters to be estimated include paths from the latent factors ‘deep’ and ‘isolated’ to their observed variables, ‘isolated’ to course achievement, ‘deep’ to course achievement, ‘isolated’ to ‘deep’, and all error variances except for ‘deep’ and ‘isolated’ being fixed to 1. Summary output is comparable to that of the original study, but not an exact match due to the model fit here being conducted on the correlation matrix of the full sample and the model in the study being fit on the unprovided correlation matrix after the removal of 9 outliers (Schreiber et al., 2006).

library(sem)
library(OpenMx)
observed <- names(data)
latents <- c("Deep", "Isolated")
data <- as.matrix(data)

sem <- mxModel("Model",type="RAM", manifestVars=observed,latentVars=latents, 
  mxPath(from="Deep", to = c("CC","TP","RC"), values=1,free=c(T,T,T)), 
  mxPath(from="Isolated", to=c("SF", "OA","OM"), values=1,free=c(T,T,T)),
  mxPath(from="Deep", to="A"),
  mxPath(from="Isolated", to="A"),
  mxPath(from="Isolated", to="Deep"),
  mxPath(from=c("CC","TP","RC","SF","OA","OM"),arrows=2, values=1, free=c(T,T,T,T,T,T)),
  mxPath(from=c("Deep","Isolated", "A"),arrows=2, values=c(1,1,1), free=c(F,F,T)),
  mxData(data,type="cov",numObs=194)
)
results <- mxRun(sem)
(sum <- summary(results))
## Summary of Model 
##  
## free parameters:
##            name matrix  row      col    Estimate  Std.Error A
## 1  Model.A[1,8]      A   CC     Deep  0.80034424 0.06619709  
## 2  Model.A[2,8]      A   TP     Deep  0.46630899 0.06968874  
## 3  Model.A[3,8]      A   RC     Deep  0.94867259 0.06277438  
## 4  Model.A[7,8]      A    A     Deep  0.22812767 0.07216533  
## 5  Model.A[4,9]      A   SF Isolated  0.50207135 0.10163172  
## 6  Model.A[5,9]      A   OA Isolated  0.99032960 0.16814920  
## 7  Model.A[6,9]      A   OM Isolated  0.14207163 0.09057631  
## 8  Model.A[7,9]      A    A Isolated -0.24465252 0.08082575  
## 9  Model.A[8,9]      A Deep Isolated -0.24784401 0.08602449  
## 10 Model.S[1,1]      S   CC       CC  0.31494723 0.06358041  
## 11 Model.S[2,2]      S   TP       TP  0.76404430 0.08083381  
## 12 Model.S[3,3]      S   RC       RC  0.03958264 0.07693936  
## 13 Model.S[4,4]      S   SF       SF  0.74276954 0.10764077  
## 14 Model.S[5,5]      S   OA       OA  0.01409252 0.31737427  
## 15 Model.S[6,6]      S   OM       OM  0.97466099 0.10022729  
## 16 Model.S[7,7]      S    A        A  0.85208609 0.08857938  
## 
## Model Statistics: 
##                |  Parameters  |  Degrees of Freedom  |  Fit (-2lnL units)
##        Model:             16                     12              994.7091
##    Saturated:             28                      0              975.8404
## Independence:              7                     21             1351.0000
## Number of observations/statistics: 194/28
## 
## chi-square:  <U+03C7>² ( df=12 ) = 18.86875,  p = 0.09174562
## Information Criteria: 
##       |  df Penalty  |  Parameters Penalty  |  Sample-Size Adjusted
## AIC:      -5.131255               50.86875                       NA
## BIC:     -44.345552              103.15448                 52.46972
## CFI: 0.9806055 
## TLI: 0.9660596   (also known as NNFI) 
## RMSEA:  0.05431843  [95% CI (0, 0.1063745)]
## Prob(RMSEA <= 0.05): 0.3934001
## timestamp: 2018-02-14 18:00:12 
## Wall clock time: 7.853175 secs 
## optimizer:  CSOLNP 
## OpenMx version number: 2.8.3 
## Need help?  See help(mxSummary)

Graphic

The graphic was created by importing the OpenMx model into \(\Omega\)nyx, a Java based graphical user interface for structural equation models and adjusting it within the interface.

#library(onyxR)
#onyx(results)

Table

paths <- c("Deep -> Compare/Contrast","Deep -> Term Papers"," Deep -> Read Critically","Isolated -> Specific Facts","Isolated -> One Answer","Isolated -> One Meaning", "Isolated -> Deep","Isolated -> Achievement","Deep -> Achievement", "Variance Compare/Contrast", "Variance Term Papers", "Variance Read Critically", "Variance Specific Facts", "Variance One Answer", "Variance One Meaning", "Variance Achievement")
cols <- c("Path","Standard Coefficient", "Standard Error")
table <- data.frame(matrix(nrow=16,ncol=3))
colnames(table)=cols
table[,1] <- paths
table[,2] <- sum$parameters$Estimate[c(1:3,5:7,9,8,4,10:16)]
table[,3] <- sum$parameters$Std.Error[c(1:3,5:7,9,8,4,10:16)]

library(knitr)
library(kableExtra)
kable(table,"html") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed")) %>%
  add_footnote("Non-Normed Fit Index =.966; Comparative Fit Index =.981; Root Mean Square Error of Approximation =.054; Chi-Square=18.87; Degrees of Freedom =12; Deep R2 =.06; Achievement R2=.15")
Path Standard Coefficient Standard Error
Deep -> Compare/Contrast 0.8003442 0.0661971
Deep -> Term Papers 0.4663090 0.0696887
Deep -> Read Critically 0.9486726 0.0627744
Isolated -> Specific Facts 0.5020714 0.1016317
Isolated -> One Answer 0.9903296 0.1681492
Isolated -> One Meaning 0.1420716 0.0905763
Isolated -> Deep -0.2478440 0.0860245
Isolated -> Achievement -0.2446525 0.0808258
Deep -> Achievement 0.2281277 0.0721653
Variance Compare/Contrast 0.3149472 0.0635804
Variance Term Papers 0.7640443 0.0808338
Variance Read Critically 0.0395826 0.0769394
Variance Specific Facts 0.7427695 0.1076408
Variance One Answer 0.0140925 0.3173743
Variance One Meaning 0.9746610 0.1002273
Variance Achievement 0.8520861 0.0885794
a Non-Normed Fit Index =.966; Comparative Fit Index =.981; Root Mean Square Error of Approximation =.054; Chi-Square=18.87; Degrees of Freedom =12; Deep R2 =.06; Achievement R2=.15

The model was found to be a good fit using acceptance criteria of non-normed fit index >.95, comparative fit index >.95, root mean square error of approximation <.06, and chi-square/df ratio < 2 (p<.05).

References

James B. Schreiber , Amaury Nora , Frances K. Stage , Elizabeth A. Barlow & Jamie King (2006) Reporting Structural Equation Modeling and Confirmatory Factor Analysis Results: A Review, The Journal of Educational Research, 99:6, 323-338, DOI: 10.3200/JOER.99.6.323-338

Michael C. Neale, Michael D. Hunter, Joshua N. Pritikin, Mahsa Zahery, Timothy R. Brick Robert M. Kirkpatrick, Ryne Estabrook, Timothy C. Bates, Hermine H. Maes, Steven M. Boker. (2016). OpenMx 2.0: Extended structural equation and statistical modeling. Psychometrika, 81(2), 535-549.doi:10.1007/s11336-014-9435-8

Pritikin, J. N., Hunter, M. D., & Boker, S. M. (2015). Modular open-source software for Item Factor Analysis. Educational and Psychological Measurement, 75(3), 458-474

von Oertzen, T., Brandmaier, A.M., Tsang, S. (in press). Structural Equation Modeling with \(\Omega\)nyx. Structural Equation Modeling: A Multidisciplinary Journal. doi:10.1080/10705511.2014.935842