tests/testthat/test-mahalanobis_exo_single_missing.R

skip_if_not_installed("modi")
library(testthat)
library(lavaan)
library(semfindr)

# Can handle missing data

mod <-
'
iv1 ~~ iv2
m1 ~ iv1 + iv2
dv ~ m1
'

dat <- pa_dat

dat0 <- dat[1:50, ]
dat0[1, 2] <- dat0[2, 3] <- dat0[3, 4] <- dat0[4, ] <- NA
head(dat0)
suppressWarnings(fit0 <- lavaan::sem(mod, dat0, missing = "fiml.x"))

fit0_data <- lavInspect(fit0, "data")
colnames(fit0_data) <- lavNames(fit0)
head(fit0_data)

fit0_free <- lavInspect(fit0, "free")
i <- apply(fit0_free$beta, 1, function(x) all(x == 0))
exo_vars <- names(i)[i]
fit0_data_exo <- dat0[, exo_vars]
suppressWarnings(em_out_fit <- lavaan::lavCor(fit0_data_exo,
                                              missing = "fiml",
                                              output = "fit"))
em_out <- list(param = list())
tmp <- lavaan::lavInspect(em_out_fit, "implied")
em_out$param$beta <- tmp$mean
em_out$param$sigma <- tmp$cov

md_predictors_check <- modi::MDmiss(fit0_data_exo,
                      em_out$param$beta,
                      em_out$param$sigma)

md_predictors <- mahalanobis_predictors(fit0)

test_that("Compare Mahalanobis distances: lavaan", {
    expect_equal(ignore_attr = TRUE,
        as.vector(md_predictors),
        md_predictors_check
      )
  })

suppressWarnings(rerun_out <- lavaan_rerun(fit0, parallel = FALSE))

md_predictors_rerun <- mahalanobis_predictors(rerun_out)

test_that("Compare Mahalanobis distances: lavaan_rerun", {
    expect_equal(ignore_attr = TRUE,
        as.vector(md_predictors_rerun),
        md_predictors_check
      )
  })

Try the semfindr package in your browser

Any scripts or data that you put into this service are public.

semfindr documentation built on April 3, 2025, 5:58 p.m.