Skip to content

Commit 786abe3

Browse files
committed
Feature Request: Add support for lavaan objects in equivalence_test()
Fixes #1176
1 parent 67e6e39 commit 786abe3

5 files changed

Lines changed: 253 additions & 144 deletions

File tree

DESCRIPTION

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Type: Package
22
Package: parameters
33
Title: Processing of Model Parameters
4-
Version: 0.29.1.4
4+
Version: 0.29.1.5
55
Authors@R:
66
c(person(given = "Daniel",
77
family = "Lüdecke",
@@ -234,3 +234,4 @@ Config/Needs/website: easystats/easystatstemplate
234234
Config/Needs/check: stan-dev/cmdstanr
235235
Config/rcmdcheck/ignore-inconsequential-notes: true
236236
Config/roxygen2/version: 8.0.0
237+
Remotes: easystats/insight

NAMESPACE

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ S3method(equivalence_test,glm)
152152
S3method(equivalence_test,glmmTMB)
153153
S3method(equivalence_test,gls)
154154
S3method(equivalence_test,hurdle)
155+
S3method(equivalence_test,lavaan)
155156
S3method(equivalence_test,lm)
156157
S3method(equivalence_test,lme)
157158
S3method(equivalence_test,merMod)
@@ -589,13 +590,6 @@ S3method(plot,parameters_p_function)
589590
S3method(plot,parameters_pca)
590591
S3method(plot,parameters_sem)
591592
S3method(plot,parameters_simulate)
592-
S3method(predict,cluster_analysis)
593-
S3method(predict,cluster_meta)
594-
S3method(predict,kmeans)
595-
S3method(predict,parameters_clusters)
596-
S3method(predict,parameters_efa)
597-
S3method(predict,parameters_pca)
598-
S3method(predict,parameters_sem)
599593
S3method(principal_components,data.frame)
600594
S3method(principal_components,lm)
601595
S3method(principal_components,merMod)
@@ -710,6 +704,7 @@ S3method(simulate_model,gls)
710704
S3method(simulate_model,hurdle)
711705
S3method(simulate_model,iv_robust)
712706
S3method(simulate_model,ivreg)
707+
S3method(simulate_model,lavaan)
713708
S3method(simulate_model,list)
714709
S3method(simulate_model,lm)
715710
S3method(simulate_model,lmRob)
@@ -1008,6 +1003,13 @@ export(p_value_satterthwaite)
10081003
export(parameters)
10091004
export(parameters_type)
10101005
export(pool_parameters)
1006+
export(predict.cluster_analysis)
1007+
export(predict.cluster_meta)
1008+
export(predict.kmeans)
1009+
export(predict.parameters_clusters)
1010+
export(predict.parameters_efa)
1011+
export(predict.parameters_pca)
1012+
export(predict.parameters_sem)
10111013
export(principal_components)
10121014
export(print_html)
10131015
export(print_md)

NEWS.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# parameters (devel)
22

3+
## Changes
4+
5+
* `simulate_model()`, `simulate_parameters()` and `equivalence_test()` now work
6+
for `lavaan` objects.
7+
38
## Bug fixes
49

510
* Fixed issues with extracting wrong standard errors for model with frailty

R/5_simulate_model.R

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,13 @@ simulate_model.default <- function(model, iterations = 1000, component = "all",
6464
# check for valid input
6565
.is_model_valid(model)
6666

67-
out <- .simulate_model(model, iterations, component = "conditional", effects = "fixed", ...)
67+
out <- .simulate_model(
68+
model,
69+
iterations,
70+
component = "conditional",
71+
effects = "fixed",
72+
...
73+
)
6874

6975
class(out) <- c("parameters_simulate_model", class(out))
7076
attr(out, "object_name") <- insight::safe_deparse_symbol(substitute(model))
@@ -222,18 +228,42 @@ simulate_model.brmultinom <- simulate_model.default
222228
#' @export
223229
simulate_model.bracl <- simulate_model.default
224230

231+
#' @export
232+
simulate_model.lavaan <- function(model, iterations = 1000, ...) {
233+
insight::check_if_installed("lavaan")
234+
if (is.null(iterations)) {
235+
iterations <- 1000
236+
}
225237

226-
# helper -----------------------------------------
238+
beta_mu <- lavaan::coef(model)
239+
varcov <- insight::get_varcov(model, ...)
240+
out <- as.data.frame(.mvrnorm(n = iterations, mu = beta_mu, Sigma = varcov))
241+
242+
class(out) <- c("parameters_simulate_model", class(out))
243+
attr(out, "object_name") <- insight::safe_deparse_symbol(substitute(model))
244+
out
245+
}
227246

228247

229-
.simulate_model <- function(model,
230-
iterations,
231-
component = "conditional",
232-
effects = "fixed",
233-
...) {
234-
if (is.null(iterations)) iterations <- 1000
248+
# helper -----------------------------------------
249+
250+
.simulate_model <- function(
251+
model,
252+
iterations,
253+
component = "conditional",
254+
effects = "fixed",
255+
...
256+
) {
257+
if (is.null(iterations)) {
258+
iterations <- 1000
259+
}
235260

236-
params <- insight::get_parameters(model, effects = effects, component = component, verbose = FALSE)
261+
params <- insight::get_parameters(
262+
model,
263+
effects = effects,
264+
component = component,
265+
verbose = FALSE
266+
)
237267
beta_mu <- stats::setNames(params$Estimate, params$Parameter) # Transform to named vector
238268

239269
# "..." allow specification of vcov-args (#784)
@@ -268,7 +298,8 @@ simulate_model.bracl <- simulate_model.default
268298
insight::format_error("`Sigma` is not positive definite.")
269299
}
270300

271-
X <- drop(mu) + eS$vectors %*% diag(sqrt(pmax(ev, 0)), p) %*% t(matrix(stats::rnorm(p * n), n))
301+
X <- drop(mu) +
302+
eS$vectors %*% diag(sqrt(pmax(ev, 0)), p) %*% t(matrix(stats::rnorm(p * n), n))
272303
nm <- names(mu)
273304

274305
dn <- dimnames(Sigma)

0 commit comments

Comments
 (0)