option `std.ov = TRUE` standardizes only the endogenous variables in a mediation with observed variables
juliuspfadt opened this issue · 2 comments
I found this because someone reported this as a bug for JASP (jasp-stats/jasp-issues#2740).
For instance, running this code
library(lavaan)
dt <- PoliticalDemocracy
model <- "
y3 ~ y1 + y2
y2 ~ y1
"
fit <- sem(model, dt, std.ov = TRUE)
parameterestimates(fit)
dt[, c("y2", "y3")] <- scale(dt[, c("y2", "y3")])
fit2 <- sem(model, dt)
parameterestimates(fit2)
I suppose it would be fixed if either the documentation for lavOptions was changed or the function.
Thanks for reporting this. The documentation was incomplete. It is now updated in the github version.
The std.ov
option indeed only standardizes the non-exogenous variables per default. The reason is that exogenous variables are often binary (or dummy variables), and we usually do not want to standardize those. This is also related to the fixed.x = TRUE
option which is the default. If you set fixed.x = FALSE
, all variables are standardized.
To illustrate:
library(lavaan)
fit <- sem('x1 + x2 ~ x3 + x4', data = HolzingerSwineford1939, std.ov = TRUE,
sample.cov.rescale = FALSE, fixed.x = TRUE)
lavInspect(fit, "sampstat")$cov
gives
x1 x2 x3 x4
x1 1.000
x2 0.297 1.000
x3 0.498 0.384 1.279
x4 0.434 0.178 0.209 1.355
while
fit <- sem('x1 + x2 ~ x3 + x4', data = HolzingerSwineford1939, std.ov = TRUE,
sample.cov.rescale = FALSE, fixed.x = FALSE)
lavInspect(fit, "sampstat")$cov
gives
x1 x2 x3 x4
x1 1.000
x2 0.297 1.000
x3 0.441 0.340 1.000
x4 0.373 0.153 0.159 1.000
But this option is just a brute-force method for rescaling the (nonexogenous) observed variables if there are big scaling differences. It does not perform a correlation analysis. The latter is under development, and can be switched on using the (new) correlation = TRUE
option.
That makes sense. I appreciate your swift reply. Thanks