Learn R Programming

TFORGE (version 0.1.16)

test_multiplicity: Test eigenvalue multiplicity

Description

Tests the multiplicity of the eigenvalues a population's mean. The test statistic is computed by stat_multiplicity(). The null hypothesis is that the population mean has the specified the multiplicity of eigenvalues. For unconstrained symmetric matrices or symmetric matrices with fixed trace use test_multiplicity(). For matrices constrained to have non-negative eigenvalues use test_multiplicity_nonnegative().

Usage

test_multiplicity(x, mult, B = 1000, refbasis = "sample")

test_multiplicity_nonnegative( x, mult, B = 1000, maxit = 25, refbasis = "sample" )

stat_multiplicity(x, mult, evecs = NULL, refbasis = "sample")

translate2multiplicity(x, mult)

Value

A TFORGE object (see boot_calib() or chisq_calib()) including p-value of the test (slot pval) and the statistic for x (slot t0).

Arguments

x

A sample of matrices suitable for as_fsm().

mult

A vector specifying the eigenvalue multiplicity under the null hypothesis in descending order of eigenvalue size.

B

Number of bootstrap samples. If B = 'chisq' then a chi-squared calibration is used instead.

refbasis

Select the basis of the eigenspaces. See details.

maxit

The maximum number of Newton steps allowed in empirical likelihood optimisation owen:2013TFORGE.

evecs

For debugging only. Supply eigenvectors of population mean.

Weighted Bootstrapping

This function uses a form of weighted bootstrapping called b-boostrapping hall1999inTFORGE. An empirical distribution is defined by sampling weights for each observation in the original sample. The sampling weights must be such that the (extrinsic) mean of the empirical distribution is $$c\hat{Q} \Lambda \hat{Q}^\top,$$ where \(\hat{Q}\) are the eigenvectors of the sample mean, \(\Lambda\) is a diagonal matrix of eigenvalues specified by either the null hypothesis (for single sample tests) or estimated as the common eigenvalues of multiple populations (for k-sample tests). In some situations \(c\) is a free scalar to enable projection of the Euclidean mean to the extrinsic mean, otherwise \(c=1\). If no such sampling weights exist (i.e. the convex hull of the data does not contain \(c\hat{Q} \Lambda \hat{Q}^\top\)), then the test rejects with pval=0 and a warning.

The sampling weights are also optimised to maximise empirical likelihood owen:2013TFORGE.

Details

For test_multiplicity(), bootstrap resampling is conducted from the null hypothesis by first translating the original sample to satisfy the null hypothesis with translate2multiplicity(). For test_multiplicity_nonnegative(), weighted bootstrapping is used (see 'Weighted Bootstrapping' below).

On refbasis: An estimate of each eigenspace specified by mult can be obtained from the eigenvectors of the sample mean. The eigenvectors create an orthonormal basis of the (estimated) eigenspace, however the choice of orthonormal basis for the estimated eigenspace effects the performance. This choice is specified by the parameter refbasis. Setting refbasis = "sample" uses the eigenvectors of the sample mean as the basis, however the resulting statistic does not appear to be pivotal. Choosing the orthonormal basis independently of the data does result in a pivotal asymptotically chi-squared statistic. Setting refbasis = "random" will do exactly this, by applying a uniformly random rotation of the relevant eigenvectors of the sample mean. We recommend using refbasis = "sample" (which requires bootstrap calibration) because test power is much higher than refbasis = "random". We recommend that the number bootstrap resamples is at least 1000 if refbasis = "sample".

For 3x3 matrices, the weighted-bootstrapping method used by test_multiplicity_nonnegative() has poor test size for samples smaller than 20; larger matrices will likely need larger samples.

Due to the random rotation of the eigenvectors when refbasis = "random", use set.seed() if you want the answer to be repeatable.

Examples

Run this code
x <- rsymm_norm(15, mean = diag(c(2, 1, 1, 0)))
test_multiplicity(x, mult = c(1, 2, 1))

Run the code above in your browser using DataLab