Tests whether a fitted model reproduces the item-pair cross tables. The reference point is the saturated model of the first- and second-order margins, not of the full response-pattern table, so no benchmark log-likelihood is required. That is what makes the statistic usable for nominal data, where nearly every response pattern is unique and the full-information chi-square does not follow its nominal distribution (Collins et al., 1993).
The analogy that usually lands: the chi-square of a structural equation model does not test the whole multivariate distribution, only whether the model reproduces the covariance matrix. \(M_2\) is the categorical counterpart, with the cross tables in place of the covariance matrix.
Usage
M2(x, ...)
# Default S3 method
M2(x, ...)
# S3 method for class 'nominalLCA'
M2(x, verbose = TRUE, gc = TRUE, ...)
# S3 method for class 'ratedLCA'
M2(x, verbose = TRUE, gc = TRUE, ...)
# S3 method for class 'ordinalBiclustering'
M2(x, verbose = TRUE, gc = TRUE, ...)
# S3 method for class 'nominalBiclustering'
M2(x, verbose = TRUE, gc = TRUE, ...)
# S3 method for class 'LRAordinal'
M2(x, verbose = TRUE, gc = TRUE, ...)Arguments
- x
A fitted model object of class "exametrika".
- ...
Additional arguments passed to methods.
- verbose
Logical; if TRUE (default), reports the size of the margin covariance matrix before computing it when that matrix is large.
- gc
Logical; if TRUE (default), releases the workspace back to the operating system before returning. The margin covariance and its Cholesky factor are the largest objects the package ever allocates – gigabytes for a long test – and R holds on to that block otherwise. Interactive use, where this is called once per model, wants it. A loop over many fits does not: the collection costs a noticeable fraction of the computation and buys nothing, since the next call allocates the same block again. Pass FALSE there.
Value
An object of class "exametrika" and "M2" containing:
- M2
The statistic.
- df
Degrees of freedom,
m - rank(Delta). Note that this is notm - n_param: seerank_delta.- p
Upper tail probability of the chi-square distribution with
dfdegrees of freedom.- m
Number of margins used: the free categories of every item, plus one entry for each combination of a free category of one item with a free category of another.
- n_param
Number of model parameters,
ncls * sum(ncat - 1). The class proportions are not estimated in this formulation, so they are not counted.- rank_delta
Rank of the Jacobian. For
ncls >= 3it falls short ofn_paramby(ncls - 1)(ncls - 2) / 2, because the second-order margins determine the class deviations only through their Gram matrix, which is invariant to rotations of the class space.
Details
The statistic is interpretable only when the estimator is the maximum
likelihood estimator of the fitted model, since the asymptotics require the
margin residual to be orthogonal to the Jacobian. That holds for
LCA.nominal and LCA.rated, which are fitted by EM. It does not
hold for filter-based estimation (GTM), which is a regularisation rather than
a maximum likelihood estimator, nor for order-restricted estimation, whose
limiting distribution is a mixture of chi-squares rather than a single one.
The degrees of freedom here are orders of magnitude smaller than in a full-information test, so an RMSEA computed from \(M_2\) is not comparable with a full-information RMSEA and the conventional cutoffs do not carry over.
Cost: the margin covariance is a dense m x m matrix and the Cholesky
factorisation dominates. With 20 items and 5 categories m is 3,120
(74 MB, well under a second); with 50 items it is 19,800 (2.9 GB, around 20
seconds). A message reports the size before the work starts when m is
large.
References
Maydeu-Olivares, A., & Joe, H. (2005). Limited- and full-information estimation and goodness-of-fit testing in 2^n contingency tables: A unified framework. Journal of the American Statistical Association, 100(471), 1009-1020.
Maydeu-Olivares, A., & Joe, H. (2006). Limited information goodness-of-fit testing in multidimensional contingency tables. Psychometrika, 71(4), 713-732.
Collins, L. M., Fidler, P. L., Wugalter, S. E., & Long, J. D. (1993). Goodness-of-fit testing for latent class models. Multivariate Behavioral Research, 28(3), 375-389.
Examples
# \donttest{
dat <- dataFormat(J20S600, response.type = "nominal")
fit <- LCA(dat, ncls = 3)
M2(fit)
#> Limited-information goodness-of-fit (M2)
#> M2 = 3510.944, df = 1591, p = 0.0000
#> margins = 1770, parameters = 180, rank of Jacobian = 179
#> (the Jacobian is 1 short of the parameter count: the class space can be rotated
#> without changing the margins, so df counts the rank, not the parameters)
# }
