## Identity matrix
m1 <- diag(2)
matinvsqrt(m1) # Returns identity matrix
## Compound symmetry correlation matrix
rho <- 0.5
m2 <- matrix(rho, 3, 3) + diag(1-rho, 3)
B <- matinvsqrt(m2)
# Verify: B %**% B approximately equals solve(m2)
all.equal(B %**% B, solve(m2))
## Example for GLM correlation structure
n_blocks <- 2 # Number of subjects
block_size <- 3 # Measurements per subject
rho <- 0.7 # Within-subject correlation
# Correlation matrix for one subject
R <- matrix(rho, block_size, block_size) +
diag(1-rho, block_size)
## Full correlation matrix for all subjects
V <- kronecker(diag(n_blocks), R)
## Create whitening matrix
VhalfInv <- matinvsqrt(V)
# Example construction of VhalfInv_fxn for lgspline
VhalfInv_fxn <- function(par) {
rho <- tanh(par) # Transform parameter to (-1, 1)
R <- matrix(rho, block_size, block_size) +
diag(1-rho, block_size)
kronecker(diag(n_blocks), matinvsqrt(R))
}
Run the code above in your browser using DataLab