Tests the restriction that the inflation (split) equation is the same for
every non-inflated category – the ZiOP / MiOP / TiOP – against the
category-specific split of Brown, Harris and Spencer (2020) (split = "category"): a Lagrange-multiplier (score) test computed from the
common-split fit alone, and the likelihood-ratio test from the
category-specific refit (or from the stored common-split counterpart when
object was fit with split = "category"). Under the null both statistics
are chi-squared with (J - 2) times the number of split coefficients
degrees of freedom (plus J - 2 for the correlations when
correlated = TRUE).
Usage
split_test(object, lr = TRUE, information = c("opg", "hessian"))Arguments
- object
An
"iop"or"iol"fit withsplit = "common"(the default) orsplit = "category".- lr
Also compute the likelihood-ratio test (refits the category-specific model when
objecthas a common split).- information
Information-matrix estimate for the LM statistic:
"opg"(outer product of gradients, as in Brown, Harris and Spencer; default) or"hessian"(observed information;NAwhen it is not positive definite at the restricted estimates).
Value
A data frame of class "split_test" with one row per test (LM,
and LR when requested): statistic, df, p.value, and the
log-likelihoods of the two models on the LR row; the information
attribute records the LM variant and note any caveat.
Details
The LM statistic is \(s' I^{-1} s\), with \(s\) the score of
the category-specific model evaluated at the common-split estimates
(every split equation set equal to the common one) and \(I\) an
estimate of the information matrix at that point. It needs no refit.
information = "opg" (default) uses the outer product of the
per-observation scores, as Brown, Harris and Spencer (2020) do;
"hessian" uses the observed information (the negative Hessian of the
category-specific log-likelihood at the restricted estimates). Under the
null both are correctly sized (in a 120-replication simulation at
n = 1500 both reject 4.2 percent of the time at the 5 percent level, as
does the LR) and the Hessian form tracks the LR more closely. But the LM
is a local test: it evaluates the information where the restriction
holds, and when the restriction is strongly violated neither estimate is
representative there – on the bp application the OPG statistic is 267
where the LR is 57 (outer-product information is known to over-reject;
Davidson and MacKinnon 1983), and the observed information is not even
positive definite at the restricted estimates (the Hessian-form
statistic is then reported as NA with a note). The LR test refits the
category-specific model, which is nested in the restricted one as an
interior restriction, so the classical reference applies (unlike the
ordered-versus-inflated comparison of inflation_test()). Treat the LM
as a screening statistic and report the LR.
References
Davidson, R. and MacKinnon, J.G. (1983). Small sample properties of alternative forms of the Lagrange multiplier test. Economics Letters, 12, 269-275.
Brown, S., Harris, M.N. and Spencer, C. (2020). Modelling category inflation with multiple inflation processes: Estimation, specification, and testing. Oxford Bulletin of Economics and Statistics, 82, 1342-1361.
See also
iop() (split), inflation_test(), lr_test()
Other model comparison:
classification(),
compare_models(),
inflation_test(),
lr_test(),
parallel_test(),
vuong()
Examples
set.seed(8)
G <- cbind(c(0.3, 1), c(0.3, 1)) # equal split equations: the common model holds
d <- riop(800, beta = c(0.8, -0.5), tau = c(-0.6, 0.7), gamma = G, inflate = "bottom")
m <- iop(y ~ x1 + x2 | z1, d, inflate = "bottom")
split_test(m)
#> Test of a common split equation against category-specific split equations (Brown, Harris and Spencer 2020)
#> LM information: outer product of gradients (Brown, Harris and Spencer); a local screening statistic -- report the LR when they disagree
#> test statistic df p.value logLik_common logLik_category
#> LM 0.246 2 0.884 -578.82 NA
#> LR 0.209 2 0.901 -578.82 -578.72
# \donttest{
G2 <- cbind(c(0.3, 1.2), c(1.0, 0.2)) # different split equations
d2 <- riop(800, beta = c(0.8, -0.5), tau = c(-0.6, 0.7), gamma = G2, inflate = "bottom")
split_test(iop(y ~ x1 + x2 | z1, d2, inflate = "bottom"))
#> Test of a common split equation against category-specific split equations (Brown, Harris and Spencer 2020)
#> LM information: outer product of gradients (Brown, Harris and Spencer); a local screening statistic -- report the LR when they disagree
#> test statistic df p.value logLik_common logLik_category
#> LM 63.094 2 1.99e-14 -663.7 NA
#> LR 39.371 2 2.82e-09 -663.7 -644.02
# }