Learn R Programming

MIRES

MIRES is a package for Measurement Invariance assessment using Random Effects and Shrinkage. This is the official implementation of the approach taken in Measurement Invariance Assessment with Bayesian Hierarchical Inclusion Modeling.

Unlike most other MI assessment methods, MIRES assumes all measurement parameters (loadings, intercepts, and residual SDs) can randomly vary across groups. Therefore, it is a fully mixed effects CFA model. If invariance is tenable, then the random effect SDs should all be effectively zero.

Unlike most mixed effects models, MIRES further regularizes the random effect SDs (RE-SDs) via an inclusion model. In sum, it includes an adaptive, dependent regularization model that shares regularization intensity across several RE-SDs. This allows the RE-SDs to rapidly shrink toward zero if they need to (i.e., if invariance is met), and to be largely untouched if they need to be non-zero (i.e., if invariance is not met). Consequently, MIRES can gain evidence in favor of invariance quicker than a mixed effects model otherwise could, especially with few groups.

Altogether, MIRES is a mixed effects CFA model, where the RE-SDs are also hierarchically modeled with a dependent regularizing prior (See Details for more information). When invariance is plausible, it will collapse into a fixed effects CFA model; when it is not, then a partially invariant or fully non-invariant model will be produced.

Installation

You can install the development version of MIRES from github with:

remotes::install_github("stephenSRMMartin/MIRES")

Example

Simulated data are provided in the package.

This data has non-invariance in the loadings, and invariance elsewhere.

library(MIRES)
data(sim_loadings)
head(sim_loadings)
         x_1        x_2        x_3          x_4        x_5        x_6
1  1.7400023  1.3214588  0.6255326  0.901031733  0.9495002  1.2286485
2 -0.5640201  0.2203121 -1.4399299 -0.571124405 -0.9580103 -0.2434576
3 -1.1030768 -0.4088069  0.7182129 -0.009960373 -1.3954430 -0.1966013
4 -1.6139970 -1.3411869 -2.7745400 -0.818880762 -2.1656676 -1.1999327
5 -0.8192840 -0.9715812 -0.3293007 -0.538967762 -0.7168703 -0.4190734
6  0.3266671  0.8955085  2.4646536  0.596746521  1.5468213  0.4509530
         x_7        x_8 group
1  0.3128417  1.5761853     1
2 -1.1585096 -1.1884185     1
3 -0.6639108 -0.6313458     1
4 -1.4482666 -2.3015851     1
5 -2.7528062 -1.0865613     1
6  3.1724797  2.1475378     1

Fit and summarize the model.

fit <- mires(my_factor ~ x_1 + x_2 + x_3 + x_4 + x_5 + x_6 + x_7 + x_8, group, sim_loadings, iter = 1000)
summary(fit)
-----
MIRES model object
-----
Specification:
my_factor ~ x_1 + x_2 + x_3 + x_4 + x_5 + x_6 + x_7 + x_8

-----
Configuration:
	 Factors: Univariate
	 Latent Mean and Variance Identification: Sum-to-zero, product-to-one.
	 Hierarchical inclusion model: Yes
	 Latent Scores Saved: No
	 Inclusion Model Prior Params: 0 ,  0.25
-----
Fixed Effects
-----
Loadings
 Item  Mean Median    SD   L95   U95  Rhat
  x_1 0.757  0.750 0.139 0.502 1.045 1.001
  x_2 0.668  0.656 0.221 0.276 1.154 1.001
  x_3 0.750  0.739 0.143 0.487 1.070 1.000
  x_4 0.579  0.573 0.204 0.193 1.001 1.007
  x_5 0.707  0.693 0.232 0.292 1.215 1.003
  x_6 0.791  0.786 0.229 0.288 1.218 1.005
  x_7 0.594  0.580 0.229 0.159 1.056 1.003
  x_8 1.009  1.003 0.211 0.587 1.429 1.002

Residual Standard Deviations (Unlogged Scale)
 Item  Mean Median    SD   L95   U95  Rhat
  x_1 0.754  0.750 0.061 0.652 0.891 1.001
  x_2 0.743  0.740 0.052 0.633 0.839 1.001
  x_3 0.750  0.747 0.051 0.653 0.854 1.004
  x_4 0.695  0.692 0.051 0.596 0.791 1.001
  x_5 0.687  0.685 0.051 0.590 0.788 1.001
  x_6 0.710  0.709 0.057 0.594 0.819 1.002
  x_7 0.720  0.715 0.051 0.624 0.819 1.005
  x_8 0.788  0.785 0.064 0.679 0.932 1.001

Intercepts
 Item   Mean Median    SD    L95   U95  Rhat
  x_1 -0.040 -0.040 0.083 -0.201 0.121 1.002
  x_2 -0.029 -0.028 0.078 -0.190 0.114 1.003
  x_3 -0.033 -0.035 0.086 -0.198 0.134 1.002
  x_4  0.008  0.008 0.067 -0.112 0.152 1.001
  x_5 -0.107 -0.107 0.079 -0.252 0.057 1.002
  x_6 -0.014 -0.008 0.098 -0.222 0.160 1.005
  x_7 -0.038 -0.037 0.091 -0.219 0.136 1.003
  x_8 -0.025 -0.027 0.092 -0.202 0.156 1.002

-----
Measurement Invariance Assessment
-----
Random Effect Standard Deviations (Unlogged Scale)
   Parameter Item    Factor  Mean Median    SD   L95   U95  Rhat    BF01    BF10 Pr(SD <= 0.1| D) BF(SD <= 0.1)
     Loading  x_1 my_factor 0.219  0.192 0.156 0.000 0.504 1.008   2.107   0.475            0.232         3.046
     Loading  x_2 my_factor 0.437  0.401 0.181 0.182 0.768 1.002   0.001 729.233            0.000         0.000
     Loading  x_3 my_factor 0.225  0.192 0.162 0.000 0.523 1.003   1.933   0.517            0.216         2.777
     Loading  x_4 my_factor 0.388  0.352 0.180 0.104 0.767 1.002   0.017  58.707            0.007         0.071
     Loading  x_5 my_factor 0.460  0.425 0.191 0.161 0.836 1.002   0.004 244.913            0.001         0.010
     Loading  x_6 my_factor 0.473  0.429 0.207 0.146 0.903 1.003   0.023  42.880            0.002         0.025
     Loading  x_7 my_factor 0.467  0.430 0.185 0.173 0.827 1.001   0.002 480.630            0.000         0.000
     Loading  x_8 my_factor 0.407  0.375 0.193 0.076 0.798 1.003   0.131   7.628            0.021         0.222
 Residual SD  x_1           0.114  0.093 0.095 0.000 0.289 1.003   6.617   0.151            0.529        11.355
 Residual SD  x_2           0.092  0.073 0.076 0.000 0.236 1.001   7.097   0.141            0.641        18.052
 Residual SD  x_3           0.079  0.063 0.068 0.000 0.209 1.005   8.589   0.116            0.712        24.934
 Residual SD  x_4           0.083  0.067 0.074 0.000 0.218 0.999   9.658   0.104            0.697        23.202
 Residual SD  x_5           0.090  0.071 0.077 0.000 0.236 1.003   8.955   0.112            0.650        18.776
 Residual SD  x_6           0.100  0.077 0.089 0.000 0.264 1.000   6.815   0.147            0.617        16.287
 Residual SD  x_7           0.087  0.068 0.078 0.000 0.235 1.005 357.644   0.003            0.676        21.094
 Residual SD  x_8           0.084  0.066 0.076 0.000 0.225 1.002   9.266   0.108            0.688        22.294
   Intercept  x_1           0.094  0.072 0.089 0.000 0.258 1.001   8.213   0.122            0.647        18.571
   Intercept  x_2           0.091  0.074 0.077 0.000 0.238 1.003   8.168   0.122            0.636        17.703
   Intercept  x_3           0.096  0.077 0.079 0.000 0.245 1.003   6.632   0.151            0.622        16.601
   Intercept  x_4           0.065  0.050 0.061 0.000 0.173 0.999  13.225   0.076            0.803        41.211
   Intercept  x_5           0.092  0.074 0.078 0.000 0.233 1.004   7.707   0.130            0.644        18.329
   Intercept  x_6           0.126  0.104 0.100 0.000 0.316 1.001   5.705   0.175            0.482         9.426
   Intercept  x_7           0.139  0.121 0.100 0.000 0.328 1.001   2.978   0.336            0.396         6.629
   Intercept  x_8           0.093  0.072 0.085 0.000 0.251 1.001 173.931   0.006            0.642        18.131

Limitations

  • Currently only supports one-factor models. Multidimensional models will soon be supported.
  • Assumes normality in the indicators. Alternative likelihoods are possible, but not yet implemented.
  • Does not allow residual covariance.
  • Does not yet support unregularized mixed models. Unregularized (i.e., constant, and independent) priors will soon be supported.

Details

With three kinds of parameters (loadings, residual SDs, and intercepts), and J items, there are 3J RE-SDs: $\sigma_p, p \in [0,\ldots,3J]$. The regularizing prior for each RE-SD, $\sigma_p$ is defined as: $$ \sigma_p \sim \mathcal{N}^+(0, \exp(\tau_p)) $$ If $\exp(\tau_p)$ is very small, then the prior probability that $\sigma_p = 0$ increases greatly, and the parameter corresponding to it is reduced to a fixed effect.

The probability that one parameter is invariant should be informed by other parameters with similar characteristics (e.g., they model the same item, or they are of the same type --- Loading, intercept, or residual SD). Therefore, the regularization term for each $\sigma_p$ can be dependent on others. We model the regularization terms $\tau_p$ as: $$ \tau_p = \tau_0 + \tau_{\text{item}p} + \tau{\text{param}p} + \lambda_p $$ Therefore, there is a global scaling factor $\tau_0$, an "item" effect ($\tau{\text{item}, p}), a "parameter" effect ($\tau_{\text{param}, p}), and a unique effect $\lambda_p$.

Therefore, if all parameters are invariant, $\tau_0$ can decrease, and all RE-SDs can jointly approach zero. Conversely, if some loadings are invariant, then $\tau_{\lambda}$ decreases, and the probability that other loadings are zero increases. If item $j$'s intercept and loading seems to vary, then $\tau_j$ increases, and the probability that the item's residual SD is invariant decreases. Finally, the $\lambda_p$ terms provide an "escape hatch" of sorts, if a particular parameter uniquely needs to be invariant or non-invariant.

Copy Link

Version

Install

install.packages('MIRES')

Monthly Downloads

547

Version

0.1.0

License

MIT + file LICENSE

Maintainer

Stephen Martin

Last Published

February 22nd, 2021

Functions in MIRES (0.1.0)

generateData

Paper simulation function (For historical purposes)
ranef.mires

Extract random effects of each group from MIRES model.
print.summary.mires

Print method for MIRES summary objects.
.parse_formula

Parse formula (list).
.sample_diff

Compute all differences of vector.
tidy_stanpars

Tidy up a vector of stan names into a data frame.
mires

Fit mixed effects measurement model for invariance assessment.
.formula_rhs

Get RHS of formula as character vector.
.formula_lhs

Get the one-length LHS of formula as string.
.hdi

Compute Highest Posterior Density intervals.
.formula_names

Get terms from formula list
pairwise

Pairwise comparisons of random parameters.
split_stannames

Split stan names into a list of parameter names (char vec) and (col-named) matrix of numeric indices.
posterior_density_funs_sigmas

Create marginal posterior density function approximations for random effect SDs
bflt

Compute BF(Less than)
rhmre

Random sampling from hmre prior on RE SDs.
simulate_DP

Generate Truncated Dirichlet Process Mixture.
sim_resid

Simulated data: Residual variances vary
sim_loadings

Simulated data: Loadings vary
sim_all

Simulated data: All parameters vary (Full non-invariance)
summary.mires

Summary method for mires object.
sim_none

Simulated data: No variance (Full invariance)
genStickBreakPi

Stick-breaking function.
.pairwise_diff_single

Outer subtraction for given params across MCMC samples.
.sample_diff_labels

Generate labels for all differences of vector.
.indicator_spec

Generates indicator spec list.
sim_items

Simulated data: Half the items are non-invariant.
sim_intercepts

Simulated data: Intercepts vary
predict_DP

Prediction for DP density estimation models.
print.mires

Print function for mires objects.
ddirichletprocess_stan

Create Stan-based density function.
MIRES-package

The 'MIRES' package.
datagen_uni

Unidimensional data generation.
dhmre_pairwise

Implied density for pairwise differences given HMRE prior.
dhmre

Density for hmre prior on RE SDs.
dlogspline

Create logspline-based density function.
.combine_RHS

Combine all unique RHS entries into one RHS formula.
ddirichletprocess

Create dirichletprocess (exponential) based density function.
ddirichletprocess_spike

Create Stan-based spike-mixture DP based density estimation function.