Score test
lavTestScore.RdScore test (or Lagrange Multiplier test) for releasing one or more fixed or constrained parameters in the model.
Usage
lavTestScore(object, add = NULL, release = NULL,
univariate = TRUE, cumulative = FALSE,
epc = FALSE, standardized = epc, cov_std = epc,
verbose = FALSE, warn = TRUE, information = "expected", ...)Arguments
- object
An object of class
lavaan.- add
Either a character string (typically between single quotes) or a parameter table containing additional (currently fixed-to-zero) parameters for which the score test must be computed.
- release
Vector of integers. The indices of the constraints that should be released. The indices correspond to the order in which the equality constraints appear in the parameter table.
- univariate
Logical. If
TRUE, compute the univariate score statistics, one for each constraint.- cumulative
Logical. If
TRUE, order the univariate score statistics from large to small, and compute a series of multivariate score statistics, each time adding an additional constraint.- epc
Logical. If
TRUE, and we are releasing existing constraints, compute the expected parameter changes for the existing (free) parameters, for each released constraint.- standardized
If
TRUE, two extra columns (sepc.lv and sepc.all) in the$epctable will contain standardized values for the EPCs. In the first column (sepc.lv), standardization is based on the variances of the (continuous) latent variables. In the second column (sepc.all), standardization is based on the variances of both (continuous) observed and latent variables. (Residual) covariances are standardized using (residual) variances.- cov_std
Logical. See
standardizedSolution.- verbose
Logical. Not used for now.
- warn
Logical. If
TRUE, print out warnings if they occur.- information
characterindicating the type of information matrix to use (checklavInspectfor available options)."expected"information is the default, which provides better control of Type I errors.- ...
to allow use of old argumentname cov_std
Details
This function can be used to compute both multivariate and univariate
score tests. There are two modes: 1) releasing fixed-to-zero parameters
(using the add argument), and 2) releasing existing equality
constraints (using the release argument). The two modes cannot
be used simultaneously.
When adding new parameters, they should not already be part of the model (i.e. not listed in the parameter table). If you want to test for a parameter that was explicitly fixed to a constant (say to zero), it is better to label the parameter, and use an explicit equality constraint.
In addition to the standard (normal-theory) score test, robust
versions are computed whenever the fitted object provides the
ingredients for a sandwich-type covariance matrix: either because
robust standard errors were requested (e.g.,
se = "robust.sem" or se = "robust.huber.white"), or
because a scaled test statistic was requested (e.g.,
test = "satorra.bentler"). Following Satorra (2000), three
robust versions are reported: a mean-scaled statistic
(score.scaled), a mean-and-variance adjusted statistic with
fractional degrees of freedom (score.adjusted), and the
generalized, asymptotically distribution-free statistic
(score.robust). For a single restriction, the three versions
coincide. The univariate (and cumulative) score tests are then
accompanied by scaled counterparts in the X2.scaled column.
Note that for estimators that are not asymptotically efficient
(e.g., DWLS, ULS and PML), only the robust
versions have the correct asymptotic distribution.
Value
A list containing at least one data.frame:
$test: The total score test, with columns for the score test statistic (X2), the degrees of freedom (df), and a p value under the \(\chi^2\) distribution (p.value). If robust versions could be computed, three additional rows are included:score.scaled,score.adjustedandscore.robust(see Details).$uni: Optional (ifunivariate=TRUE). Each 1-df score test, equivalent to modification indices. If robust versions could be computed, the scaled statistics are provided in theX2.scaledandp.value.scaledcolumns. Ifepc=TRUEwhenadding parameters (not when releasing constraints), an unstandardized EPC is provided for each added parameter, as would be returned bymodificationIndices.$cumulative: Optional (ifcumulative=TRUE). Cumulative score tests, with scaled counterparts if robust versions could be computed.$epc: Optional (ifepc=TRUE). Parameter estimates, expected parameter changes, and expected parameter values if all the tested constraints were freed.
References
Bentler, P. M., & Chou, C. P. (1993). Some new covariance structure model improvement statistics. Sage Focus Editions, 154, 235-255.
Satorra, A. (2000). Scaled and adjusted restricted tests in multi-sample analysis of moment structures. In Heijmans, R.D.H., Pollock, D.S.G. & Satorra, A. (Eds.), Innovations in multivariate statistical analysis: A festschrift for Heinz Neudecker (pp. 233-247). London: Kluwer Academic Publishers.
Examples
HS.model <- '
visual =~ x1 + b1*x2 + x3
textual =~ x4 + b2*x5 + x6
speed =~ x7 + b3*x8 + x9
b1 == b2
b2 == b3
'
fit <- cfa(HS.model, data=HolzingerSwineford1939)
# test 1: release both two equality constraints
lavTestScore(fit, cumulative = TRUE)
#> $test
#>
#> total score test:
#>
#> test X2 df p.value
#> 1 score 12.306 2 0.002
#>
#> $uni
#>
#> univariate score tests:
#>
#> lhs op rhs X2 df p.value
#> 1 b1 == b2 12.060 1 0.001
#> 2 b2 == b3 0.947 1 0.330
#>
#> $cumulative
#>
#> cumulative score tests:
#>
#> lhs op rhs X2 df p.value
#> 1 b1 == b2 12.060 1 0.001
#> 2 b2 == b3 12.306 2 0.002
#>
# test 2: the score test for adding two (currently fixed
# to zero) cross-loadings
newpar = '
visual =~ x9
textual =~ x3
'
lavTestScore(fit, add = newpar)
#> $test
#>
#> total score test:
#>
#> test X2 df p.value
#> 1 score 46.061 2 0
#>
#> $uni
#>
#> univariate score tests:
#>
#> lhs op rhs X2 df p.value
#> 1 visual=~x9 == 0 35.117 1 0.000
#> 2 textual=~x3 == 0 10.938 1 0.001
#>
# equivalently, "add" can be a parameter table specifying parameters to free,
# but must include some additional information:
PT.add <- data.frame(lhs = c("visual","textual"),
op = c("=~","=~"),
rhs = c("x9","x3"),
user = 10L, # needed to identify new parameters
free = 1, # arbitrary numbers > 0
start = 0) # null-hypothesized value
PT.add
#> lhs op rhs user free start
#> 1 visual =~ x9 10 1 0
#> 2 textual =~ x3 10 1 0
lavTestScore(fit, add = PT.add) # same result as above
#> $test
#>
#> total score test:
#>
#> test X2 df p.value
#> 1 score 46.061 2 0
#>
#> $uni
#>
#> univariate score tests:
#>
#> lhs op rhs X2 df p.value
#> 1 visual=~x9 == 0 35.117 1 0.000
#> 2 textual=~x3 == 0 10.938 1 0.001
#>