# Compute correlations directly and using eclairs decomp
n <- 600 # number of samples
p <- 100 # number of features
# create correlation matrix
Sigma <- autocorr.mat(p, .9)
# draw data from correlation matrix Sigma
Y <- Rfast::rmvnorm(n, rep(0, p), sigma = Sigma, seed = 1)
rownames(Y) <- paste0("sample_", seq(n))
colnames(Y) <- paste0("gene_", seq(p))
# correlation computed directly
C <- cor(Y)
# correlation from eclairs decomposition
ecl <- eclairs(Y, compute = "cor")
C.eclairs <- getCor(ecl, lambda = 0)
all.equal(C, C.eclairs)
# Correlation of Y^2
#-------------------
# exact quadratic way
C <- 2 * cor(Y)^2
# faster low rank
ecl2 <- eclairs_sq(ecl)
C.eclairs <- 2 * getCor(ecl2, lambda = 0)
all.equal(C.eclairs, C)
Run the code above in your browser using DataLab