Skip to contents

Permute rows and columns of matrices.

Usage

permute_var(mat, perm = nrow(mat):1)
permute_synch(param, perm)

Arguments

mat

a matrix.

param

a matrix or list, see Details.

perm

permutation, defaults to nrow:1.

Details

Given a permutation, permute_var permutes the rows and columns of a matrix in such a way that if mat is the covariance matrix of a vector x, then the rearranged matrix is the covariance matrix of x[perm]. If P is the permutation matrix corresponding to perm, then the computed value is P %*% mat %*% t(P).

permute_synch performs the above transformation on all matrices found in param. More precisely, if param is a matrix, then the result is the same as for permute_var. Otherwise param should be a list and, conceptually, permute_synch is applied recursively on each element of this list. The net result is that each matrix, say \(M\), in param is replaced by \(PMP'\) and each vector, say \(v\), by \(Pv\). The idea is that param may contain specification of a VAR model, all components of which need to be reshuffled if the components of the multivariate vector are permuted.

All matrices in param must have the same number of rows, say d, but this is not checked. perm should be a permutation of 1:d.

Value

for permute_var, a matrix,

for permute_synch, a matrix or list of the same shape as

param in which each matrix is transformed as described in Details.

Author

Georgi N. Boshnakov

Examples

Cl <- cor(longley) # from example for 'cor()'
nc <- ncol(Cl)
v <- 1:nc
names(v) <- colnames(Cl)

permute_var(Cl)
#>               Employed      Year Population Armed.Forces Unemployed       GNP
#> Employed     1.0000000 0.9713295  0.9603906    0.4573074  0.5024981 0.9835516
#> Year         0.9713295 1.0000000  0.9939528    0.4172451  0.6682566 0.9952735
#> Population   0.9603906 0.9939528  1.0000000    0.3644163  0.6865515 0.9910901
#> Armed.Forces 0.4573074 0.4172451  0.3644163    1.0000000 -0.1774206 0.4464368
#> Unemployed   0.5024981 0.6682566  0.6865515   -0.1774206  1.0000000 0.6042609
#> GNP          0.9835516 0.9952735  0.9910901    0.4464368  0.6042609 1.0000000
#> GNP.deflator 0.9708985 0.9911492  0.9791634    0.4647442  0.6206334 0.9915892
#>              GNP.deflator
#> Employed        0.9708985
#> Year            0.9911492
#> Population      0.9791634
#> Armed.Forces    0.4647442
#> Unemployed      0.6206334
#> GNP             0.9915892
#> GNP.deflator    1.0000000
all(permute_var(Cl) == Cl[ncol(Cl):1, ncol(Cl):1])
#> [1] TRUE