# define mixing proportions
pis <- c(0.2, 0.3, 0.4)
# set dimension and sample size
p <- 5
n <- 100
# define population covariance matrices
diags <- list(rep(1, p),
rep(0.5, p-1),
rep(0.25, p-2),
rep(0.1, p-3))
Omega <- as.matrix(Matrix::bandSparse(p,
k=-c(0:3),
diag=c(diags),
symm=TRUE))
Sigma1 <- solve(Omega)
Omega <- matrix(0.3, p, p)
diag(Omega) <- 1
Sigma2 <- solve(Omega)
Sigma3 <- cov(matrix(rnorm(p*n), ncol=p))
# mean vectors
mean1 <- rep(0,p)
mean2 <- rexp(p)
mean3 <- rnorm(p)
# draw data data from GGM mixture
Z <- sort(sample(c(1:3), n, prob=pis, replace=TRUE))
Y <- rbind(mvtnorm::rmvnorm(sum(Z==1), mean=mean1, sigma=Sigma1),
mvtnorm::rmvnorm(sum(Z==2), mean=mean2, sigma=Sigma2),
mvtnorm::rmvnorm(sum(Z==3), mean=mean3, sigma=Sigma3))
# find optimal penalty parameter
optLambda <- optPenaltyGGMmixture.kCVauto(Y, K=3,
0.00001, 100,
10, fold=5,
target=0*Sigma1)
# ridge penalized estimation of the GGM mixture
ridgeGGMmixFit <- ridgeGGMmixture(Y, 3, 1, target=0*Sigma1)
Run the code above in your browser using DataLab