Permute rows and columns of matrices
permute_var.Rd
Permute rows and columns of matrices.
Usage
permute_var(mat, perm = nrow(mat):1)
permute_synch(param, perm)
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.
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