Skip to content

Commit 9f7177c

Browse files
committed
simplify, add test
1 parent 36585d2 commit 9f7177c

File tree

3 files changed

+56
-23
lines changed

3 files changed

+56
-23
lines changed

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,4 +168,4 @@ Config/Needs/website:
168168
r-lib/pkgdown,
169169
easystats/easystatstemplate
170170
Config/rcmdcheck/ignore-inconsequential-notes: true
171-
Remotes: easystats/insight
171+
Remotes: easystats/insight#1104

R/model_performance.lavaan.R

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,23 @@
102102
model_performance.lavaan <- function(model, metrics = "all", verbose = TRUE, ...) {
103103
insight::check_if_installed("lavaan")
104104

105-
# Check if convergeed
106-
if(insight::is_converged(model)) {
105+
# All possible metrics that this function can return.
106+
all_metric_names <- c(
107+
"Chi2", "Chi2_df", "p_Chi2", "Baseline", "Baseline_df", "p_Baseline", "GFI",
108+
"AGFI", "NFI", "NNFI", "CFI", "RMSEA", "RMSEA_CI_low", "RMSEA_CI_high",
109+
"p_RMSEA", "RMR", "SRMR", "RFI", "PNFI", "IFI", "RNI", "Loglikelihood",
110+
"AIC", "BIC", "BIC_adjusted"
111+
)
112+
113+
# extract valid column names based on metrics
114+
if (is.character(metrics) && !all(metrics == "all")) {
115+
out_names <- intersect(metrics, all_metric_names)
116+
} else {
117+
out_names <- all_metric_names
118+
}
119+
120+
# Check if converged
121+
if (insight::is_converged(model)) {
107122
if (isTRUE(verbose)) {
108123
measures <- as.data.frame(t(as.data.frame(lavaan::fitmeasures(model, ...))))
109124
} else {
@@ -139,34 +154,19 @@ model_performance.lavaan <- function(model, metrics = "all", verbose = TRUE, ...
139154
BIC = measures$bic,
140155
BIC_adjusted = measures$bic2
141156
)
142-
143-
if (all(metrics == "all")) {
144-
metrics <- names(out)
145-
}
146-
out <- out[, metrics, drop = FALSE]
147157
} else {
148-
insight::format_warning("This lavaan model did not converge, no performance indices can be computed. Returning `NA`.")
149-
150-
# All possible metrics that this function can return.
151-
all_metric_names <- c(
152-
"Chi2", "Chi2_df", "p_Chi2", "Baseline", "Baseline_df", "p_Baseline", "GFI",
153-
"AGFI", "NFI", "NNFI", "CFI", "RMSEA", "RMSEA_CI_low", "RMSEA_CI_high",
154-
"p_RMSEA", "RMR", "SRMR", "RFI", "PNFI", "IFI", "RNI", "Loglikelihood",
155-
"AIC", "BIC", "BIC_adjusted"
156-
)
157-
158-
if (is.character(metrics) && !all(metrics == "all")) {
159-
out_names <- intersect(metrics, all_metric_names)
160-
} else {
161-
out_names <- all_metric_names
158+
if (verbose) {
159+
insight::format_warning("This lavaan model did not converge, no performance indices can be computed. Returning `NA`.")
162160
}
163-
164161
out <- as.data.frame(stats::setNames(
165162
rep(list(NA), length(out_names)),
166163
out_names
167164
))
168165
}
169166

167+
# select only the requested metrics
168+
out <- out[out_names]
169+
170170
class(out) <- c("performance_lavaan", "performance_model", class(out))
171171
out
172172
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
skip_on_cran()
2+
skip_if_not_installed("lavaan")
3+
4+
test_that("model_performance.lavaan", {
5+
data(HolzingerSwineford1939, package = "lavaan")
6+
structure <- " visual =~ x1 + x2 + x3
7+
textual =~ x4 + x5 + x6
8+
speed =~ x7 + x8 + x9 "
9+
model <- lavaan::cfa(structure, data = HolzingerSwineford1939)
10+
out <- expect_silent(model_performance(model))
11+
expect_named(
12+
out,
13+
c(
14+
"Chi2", "Chi2_df", "p_Chi2", "Baseline", "Baseline_df", "p_Baseline",
15+
"GFI", "AGFI", "NFI", "NNFI", "CFI", "RMSEA", "RMSEA_CI_low",
16+
"RMSEA_CI_high", "p_RMSEA", "RMR", "SRMR", "RFI", "PNFI", "IFI",
17+
"RNI", "Loglikelihood", "AIC", "BIC", "BIC_adjusted"
18+
)
19+
)
20+
21+
out <- model_performance(model, metrics = c("Chi2", "RMSEA"))
22+
expect_named(out, c("Chi2", "RMSEA"))
23+
24+
model <- suppressWarnings(lavaan::cfa(structure, data = HolzingerSwineford1939[1:10, ]))
25+
expect_warning(
26+
{
27+
out <- model_performance(model)
28+
},
29+
regex = "This lavaan model did not converge"
30+
)
31+
expect_identical(out$Chi2, NA)
32+
expect_silent(model_performance(model, verbose = FALSE))
33+
})

0 commit comments

Comments
 (0)