--- title: "Use Case IDs" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Use Case IDs} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` Instead of using row numbers (`case.idx` in the `lavaan` object), `lavaan_rerun()` from the package [semfindr](https://sfcheung.github.io/semfindr/) supports user supplied case IDs. This can make the output more readable. ```{r} library(semfindr) dat <- pa_dat # Add case id dat <- cbind(id = paste0("case", seq_len(nrow(dat))), dat) head(dat) ``` Suppose that the data set has a column of case IDs. A model is fitted to this data set using `lavaan::sem()`: ```{r} mod <- " m1 ~ iv1 + iv2 dv ~ m1 " library(lavaan) fit <- sem(mod, dat) ``` # Rerun *n* Times We refit the model 100 times, each time with one case removed. Although the `id` column is not stored in `lavaan`, it can be supplied through the argument `case_id`: ```{r echo = FALSE, include = FALSE} if (file.exists("user_id_fit_rerun.RDS")) { fit_rerun <- readRDS("user_id_fit_rerun.RDS") } else { fit_rerun <- lavaan_rerun(fit, case_id = dat$id) saveRDS(fit_rerun, "user_id_fit_rerun.RDS") } ``` ```{r eval = FALSE} fit_rerun <- lavaan_rerun(fit, case_id = dat$id) ``` The list of reruns now uses `id` as the names: ```{r} head(fit_rerun$rerun[1:3]) ``` As shown below, most diagnostic functions will use user supplied case IDs in their displays, making it easier to locate them in the original data set. # Diagnostic Functions ## Standardized Changes in Estimates ```{r} fit_est_change <- est_change(fit_rerun) fit_est_change ``` ```{r} fit_est_change_paths_only <- est_change(fit_rerun, parameters = c("m1 ~ iv1", "m1 ~ iv2", "dv ~ m1")) fit_est_change_paths_only ``` ## Raw Changes in Estimates ```{r} fit_est_change_raw <- est_change_raw(fit_rerun) fit_est_change_raw ``` ## Mahalanobis Distance ```{r} fit_md <- mahalanobis_rerun(fit_rerun) fit_md ``` ## Changes in Fit Measures ```{r} fit_mc <- fit_measures_change(fit_rerun, fit_measures = c("chisq", "cfi", "tli", "rmsea")) fit_mc ``` ## All-In-One-Function ```{r} fit_influence <- influence_stat(fit_rerun) fit_influence ``` # Diagnostic Plots ## Generalized Cook's Distance ```{r} gcd_plot(fit_influence, largest_gcd = 3) ``` ## Mahalanobis Distance ```{r} md_plot(fit_influence, largest_md = 3) ``` ## Fit Measure vs. Generalized Cook's Distance ```{r} gcd_gof_plot(fit_influence, fit_measure = "rmsea", largest_gcd = 3, largest_fit_measure = 3) ``` ## Bubble Plot ```{r} gcd_gof_md_plot(fit_influence, fit_measure = "rmsea", largest_gcd = 3, largest_fit_measure = 3, largest_md = 3, circle_size = 15) ```