# set dimension and sample size
p <- 10
n <- 10
# penalty parameter matrix
lambda <- matrix(1, p, p)
diag(lambda) <- 0.1
# generate precision matrix
Omega <- matrix(0.4, p, p)
diag(Omega) <- 1
Sigma <- solve(Omega)
# data
Y <- mvtnorm::rmvnorm(n, mean=rep(0,p), sigma=Sigma)
S <- cov(Y)
# find optimal penalty parameters through cross-validation
lambdaOpt <- optPenaltyPgen.kCVauto.groups(Y, rep(10^(-10), 2), rep(10^(10), 2),
groups=c(rep(0, p/2), rep(1, p/2)),
target=matrix(0, p, p),
penalize.diag=FALSE, nInit=100,
minSuccDiff=10^(-5))
# format the penalty matrix
lambdaOptVec <- c(rep(lambdaOpt[1], p/2), rep(lambdaOpt[2], p/2))
lambdaOptMat <- outer(lambdaOptVec, lambdaOptVec, "+")
# generalized ridge precision estimate
Phat <- ridgePgen(S, lambdaOptMat, matrix(0, p, p))
Run the code above in your browser using DataLab