dySEM helps automate the process of scripting, fitting, and reporting on latent models of dyadic data via
lavaan. The package was developed and used in the course of the research described in Sakaluk, Fisher, & Kilshaw (in press). We are targeting the first stable release for ~end of March 2021, and hope to submit the package to CRAN sometime in the summer.
dySEM logo was designed by Wolfgang Deranleau (for logo design inquiries, email: firstname.lastname@example.org).
The package currently provides functionality regarding the following types of latent dyadic data models:
Additional features currently include:
Functionality targeted for future development of
dySEM is tracked here. Current high-priority items include:
Please submit any feature requests via the
dySEM issues page, using the “Wishlist for dySEM Package Development” tag.
If you are interested in collaborating on the development of
dySEM, please contact Dr. Sakaluk.
You can install the development version from GitHub with:
# install.packages("devtools") devtools::install_github("jsakaluk/dySEM")
dySEM workflow typically involves five steps, which are covered in-depth in the Overview vignette. Briefly, these steps include:
There are additional optional functions, as well, that help users to calculate certain additional quantitative values (e.g., reliability, corrected model fit indexes in models with indistinguishable dyad members).
Structural equation modeling (SEM) programs like
lavaan require dyadic data to be in dyad structure data set, whereby each row contains the data for one dyad, with separate columns for each observation made for each member of the dyad. For example:
DRES #> # A tibble: 121 x 18 #> PRQC_1.1 PRQC_2.1 PRQC_3.1 PRQC_4.1 PRQC_5.1 PRQC_6.1 PRQC_7.1 PRQC_8.1 #> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> #> 1 7 7 7 7 7 7 7 5 #> 2 6 6 6 7 7 6 5 5 #> 3 7 7 7 7 7 7 7 6 #> 4 6 6 6 7 7 6 5 6 #> 5 7 7 7 7 7 6 7 6 #> 6 6 6 6 6 6 3 6 5 #> 7 7 6 7 6 6 6 5 6 #> 8 6 7 7 7 7 6 5 6 #> 9 7 7 7 7 7 6 6 6 #> 10 6 6 6 7 7 7 4 4 #> # … with 111 more rows, and 10 more variables: PRQC_9.1 <dbl>, PRQC_1.2 <dbl>, #> # PRQC_2.2 <dbl>, PRQC_3.2 <dbl>, PRQC_4.2 <dbl>, PRQC_5.2 <dbl>, #> # PRQC_6.2 <dbl>, PRQC_7.2 <dbl>, PRQC_8.2 <dbl>, PRQC_9.2 <dbl>
dySEM scrapers consider appropriately repetitously named indicators as consisting of at least three distinct elements: stem, item, and partner. Delimiter characters (e.g., “.”, “_”) are commonly–but not always–used to separate some/all of these elements.
dySEM scrapers largely function by asking you to specify in what order the elements of variable names are ordered.
dvn <- scrapeVarCross(DRES, x_order = "sip", x_stem = "PRQC", x_delim1="_",x_delim2=".", distinguish_1="1", distinguish_2="2")
Scripter functions like
scriptCFA typically require only three arguments to be specified:
dvnobject (e.g., from
scrapeVarCross) to be used to script the model 1.arbitrary name(s) for the latent variable(s) you are modeling
qual.config.script <- scriptCFA(dvn, lvname = "Quality", model = "configural")
This function returns a character object with
lavaan compliant syntax for your chosen model, as well as exporting a reproducible .txt of the scripted model to a /scripts folder in your working directory.
You can immediately pass any script(s) returned from a
dySEM scripter to your preferred
lavaan wrapper, with your estimator and missing data treatment of choice. For example:
qual.config.fit <- lavaan::cfa(qual.config.script, data = DRES, std.lv = FALSE, auto.fix.first= FALSE, meanstructure = TRUE)
At this point, the full arsenal of
lavaan model-inspecting tools are at your disposal. For example:
summary(qual.config.fit, fit.measures = TRUE, standardized = TRUE, rsquare = TRUE)
dySEM also contains functionality to help you quickly, correctly, and reproducibly generate output from your fitted model(s), in the forms of path diagrams and/or tables of statistical values.
outputModel(dvn, model = "cfa", fit = qual.config.fit, table = TRUE, tabletype = "measurement", figure = TRUE, figtype = "unstandardized")
Please note that the dySEM project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.