umx is a package designed to make structural
equation modeling easier, from building, to modifying and
reporting.
citation("umx")
You should cite: Timothy C. Bates, Michael C. Neale, Hermine H. Maes, (2019). umx: A library for Structural Equation and Twin Modelling in R. Twin Research and Human Genetics, 22, 27-41. DOI:10.1017/thg.2019.2
And Luis F.S. Castro-de-Araujo, Nathan A. Gillespie, Michael C. Neale, and Timothy Charles Bates (2026). umx version 4.5: Extending Twin and Path-Based SEM in R with CLPM, MR-DoC, Definition Variables, Onyx Integration, and Censored Distributions. Twin Research and Human Genetics, 1-6. DOI:10.1017/thg.2026.10056
Overview Road map, and Tutorials.
umx includes high-level functions for complex models
such as multi-group twin models, as well as graphical model output.
Install it from CRAN:
install.packages("umx")
library(umx)
?umxMost functions have extensive and practical examples (even figures for the twin models): so USE THE HELP :-).
See what is on offer with ‘?umx’. There are online tutorials at tbates.github.io.
umx stands for “user” OpenMx functions. For users, the
two most import families in umx are:
umxRAM. This makes path-based SEM in R straightforward,
handling ordinal thresholds, start values, labels automatically. It can
also interpret basic lavaan if you get a script in that language.umxACE.Both suites are supported by umxSummary which generates
publication-ready tables, and and plot which makes
graphical display of your models easy and flexible. There are many other
helpers for data-wrangling twin data, working with prolific, scoring
scales, printing to models (try umxAPA()) among other
tasks.
Some highlights include:
umxRAM() # Take umxPaths + data data =
run and return a model, along with a plot and
umxSummaryumxPath() # write paths with human-readable
language like var = , mean =
cov =, fixedAt=. Quickly define a variance and
mean (‘v.m. =’) and more.umxSummary(model) # Nice summary table, in markdown
or browser. Designed for journal reporting (Χ², p, CFI, TLI, &
RMSEA). Optionally show path loadingsplot(model, std=TRUE, digits = 3, ...) # Graphical
model in your browser! or edit in programs like OmniGraffleparameters(m1, "below", .1, pattern="_to_")) # A
powerful assistant to get labels and values from a model (e.g. all ‘to’
params, below .1 in value)residuals(m1, supp=.1) # Show residual covariances
filtered for magnitudeumxModify(model, update = ) # Modify and re-run a
model. You can add objects, drop or add paths, including by wildcard
label matching), re-name the model, and even return the comparison. All
in 1 line umxACE # Twin ACE modeling with aplomb paths
are labeled! Works with plot() and
umxSummary!umxCP, umxIP, umxGxE,
umxCP, umxGxEbiv, umxSexLim
umx_set_cores()umx_set_optimizer()umx_time(model1, model2) reports and compares run times
in a compact programmable format (also “start” and “stop” a timer)umxHetcor(data, use = "pairwise.complete.obs") #
Compute appropriate pair-wise correlations for mixed data
types.?umx and
in any help file!Code and requests welcome via Github. Tell your friends! Publish good science :-)
For thrill-seekers and collaborators only: the bleeding-edge development version is here:
install.packages("devtools")
library("devtools")
install_github("tbates/umx")
library("umx")
?umx