Calculate the orthogonal matrix U_Gamma
for decomposition in
Theorem 1 from references.
Arguments
- perm
An object of a
gips_perm
or anything agips_perm()
can handle. It can also be of agips
class, but it will be interpreted as the underlyinggips_perm
.- perm_size
Size of a permutation. Required if
perm
is neithergips_perm
norgips
.- basis
A matrix with basis vectors in COLUMNS. Identity by default.
Value
A square matrix of size perm_size
by perm_size
with
columns from vector elements \(v_k^{(c)}\) according to
Theorem 6 from references.
Details
Given X - a matrix invariant under the permutation perm
. Call Gamma
the permutations cyclic group: \(\Gamma = <perm> = \{perm, perm^2, ...\}\).
Then, \(U_\Gamma\) is such an orthogonal matrix, which block-diagonalizes X.
To be more precise, the matrix t(U_Gamma) %*% X %*% U_Gamma
has a
block-diagonal structure, which is ensured by
Theorem 1 from references.
The formula for U_Gamma
can be found in
Theorem 6 from references.
A nice example is demonstrated in the Block Decomposition - [1], Theorem 1
section of vignette("Theory", package="gips")
or its
pkgdown page.
References
Piotr Graczyk, Hideyuki Ishi, Bartosz Kołodziejek, Hélène Massam. "Model selection in the space of Gaussian models invariant by symmetry." The Annals of Statistics, 50(3) 1747-1774 June 2022. arXiv link; doi:10.1214/22-AOS2174
See also
project_matrix()
- A function used in examples to show the properties ofprepare_orthogonal_matrix()
.Block Decomposition - [1], Theorem 1 section of
vignette("Theory", package = "gips")
or its pkgdown page - A place to learn more about the math behind thegips
package and see more examples ofprepare_orthogonal_matrix()
.
Examples
gperm <- gips_perm("(1,2,3)(4,5)", 5)
U_Gamma <- prepare_orthogonal_matrix(gperm)
number_of_observations <- 10
X <- matrix(rnorm(5 * number_of_observations), number_of_observations, 5)
S <- cov(X)
X <- project_matrix(S, perm = gperm) # this matrix in invariant under gperm
block_decomposition <- t(U_Gamma) %*% X %*% U_Gamma
round(block_decomposition, 5) # the non-zeros only on diagonal and [1,2] and [2,1]
#> [,1] [,2] [,3] [,4] [,5]
#> [1,] 0.41684 0.11768 0.00000 0.00000 0.0000
#> [2,] 0.11768 1.09027 0.00000 0.00000 0.0000
#> [3,] 0.00000 0.00000 0.92989 0.00000 0.0000
#> [4,] 0.00000 0.00000 0.00000 0.92989 0.0000
#> [5,] 0.00000 0.00000 0.00000 0.00000 0.9588