Skip to content

An R package with functions for generating population correlation matrices with imperfect model fit

License

Unknown, GPL-3.0 licenses found

Licenses found

Unknown
LICENSE
GPL-3.0
LICENSE.md
Notifications You must be signed in to change notification settings

JustinKracht/noisemaker

Repository files navigation

noisemaker

Codecov test coverage Lifecycle: experimental

The goal of noisemaker is to provide functions to make it easy to generate population correlation matrices that fit a common factor analysis model imperfectly. In particular, the noisemaker() function provides an interface to three methods for generating population correlation matrices with RMSEA and/or CFI values that are close to user-specified target values.

Installation

You can install the development version from GitHub with:

# install.packages("devtools")
devtools::install_github("JustinKracht/noisemaker")

To also build the vignette when the package is installed (highly recommended), you can use:

devtools::install_github("JustinKracht/noisemaker", build_vignettes = TRUE)

Examples

In this example, the factor model has two factors, each with three salient items. I’ll demonstrate using the noisemaker() function to generate a population correlation matrix with model error (Σ) such that RMSEA(Σ, Ω) = 0.05, where Ω is the model-implied correlation matrix. For this first example, I’ll use the method described by Cudeck and Browne (1992).

library(noisemaker)
library(fungible)

# Generate a simple factor model with two factors and six items
mod <- simFA(Model = list(NFac = 2, NItemPerFac = 3),
             Seed = 42)

(Omega <- mod$Rpop) # the model-implied correlation matrix
#>           V1        V2        V3        V4        V5        V6
#> V1 1.0000000 0.4493845 0.2759954 0.0000000 0.0000000 0.0000000
#> V2 0.4493845 1.0000000 0.2796873 0.0000000 0.0000000 0.0000000
#> V3 0.2759954 0.2796873 1.0000000 0.0000000 0.0000000 0.0000000
#> V4 0.0000000 0.0000000 0.0000000 1.0000000 0.4493845 0.2759954
#> V5 0.0000000 0.0000000 0.0000000 0.4493845 1.0000000 0.2796873
#> V6 0.0000000 0.0000000 0.0000000 0.2759954 0.2796873 1.0000000

set.seed(42)

# Generate a population correlation matrix with model error (Sigma) using the
# Cudeck and Browne (1992) method
noisemaker(mod, method = "CB", target_rmsea = 0.05)
#> $Sigma
#>              V1           V2         V3           V4           V5          V6
#> V1  1.000000000  0.449384535 0.27599542 -0.032181331 -0.028744381 0.009662973
#> V2  0.449384535  1.000000000 0.27968729 -0.007370352 -0.004001275 0.035583143
#> V3  0.275995418  0.279687285 1.00000000  0.047067522  0.051613664 0.070785224
#> V4 -0.032181331 -0.007370352 0.04706752  1.000000000  0.449384535 0.275995418
#> V5 -0.028744381 -0.004001275 0.05161366  0.449384535  1.000000000 0.279687285
#> V6  0.009662973  0.035583143 0.07078522  0.275995418  0.279687285 1.000000000
#> 
#> $rmsea
#> [1] 0.04999999
#> 
#> $cfi
#> [1] 0.9854324
#> 
#> $v
#> [1] NA
#> 
#> $eps
#> [1] NA

The noisemaker() function implements a method for simulating correlation matrices with RMSEA values close to a target value based on the adventitious error framework developed by Wu and Browne (2015).

noisemaker(mod, method = "WB", target_rmsea = 0.05)
#> Warning in .recacheSubclasses(def@className, def, env): undefined subclass
#> "numericVector" of class "Mnumeric"; definition not updated
#> $Sigma
#>             V1           V2           V3          V4           V5           V6
#> V1  1.00000000  0.440586099  0.276744840 -0.01252130 -0.028274417 -0.029007137
#> V2  0.44058610  1.000000000  0.293893396 -0.02663021  0.033773948  0.001035131
#> V3  0.27674484  0.293893396  1.000000000 -0.01450089  0.008299116 -0.006544648
#> V4 -0.01252130 -0.026630207 -0.014500889  1.00000000  0.457114670  0.295925028
#> V5 -0.02827442  0.033773948  0.008299116  0.45711467  1.000000000  0.320625627
#> V6 -0.02900714  0.001035131 -0.006544648  0.29592503  0.320625627  1.000000000
#> 
#> $rmsea
#> [1] 0.04924298
#> 
#> $cfi
#> [1] 0.9864878
#> 
#> $v
#> [1] NA
#> 
#> $eps
#> [1] NA

Finally, the noisemaker() function implements a procedure that optimizes the values of the parameters for the Tucker, Koopman, and Linn (1969) method to produce a Σ matrix that has both RMSEA and CFI values close to the user-specified targets:

noisemaker(mod, method = "TKL", 
           target_rmsea = 0.05, 
           target_cfi = 0.95,
           tkl_ctrl = list(optim_type = "optim"))
#> $Sigma
#>              V1           V2          V3          V4          V5          V6
#> V1  1.000000000  0.500756146  0.25597318 0.003608341 -0.01291235 -0.02667746
#> V2  0.500756146  1.000000000  0.24647748 0.004715913 -0.02456718 -0.01490170
#> V3  0.255973178  0.246477477  1.00000000 0.012761126  0.04327002 -0.05487096
#> V4  0.003608341  0.004715913  0.01276113 1.000000000  0.42463583  0.25647774
#> V5 -0.012912352 -0.024567176  0.04327002 0.424635833  1.00000000  0.24572421
#> V6 -0.026677455 -0.014901702 -0.05487096 0.256477745  0.24572421  1.00000000
#> 
#> $rmsea
#> [1] 0.0679774
#> 
#> $cfi
#> [1] 0.9726869
#> 
#> $v
#> [1] 0.1006799
#> 
#> $eps
#> [1] 0.4196303

About

An R package with functions for generating population correlation matrices with imperfect model fit

Topics

Resources

License

Unknown, GPL-3.0 licenses found

Licenses found

Unknown
LICENSE
GPL-3.0
LICENSE.md

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published