Hyperparameters {gicf} | R Documentation |
Maximum effective range of regularisation parameters
Description
Compute the effective range of the regularisation paramerters \kappa
and \lambda
.
Usage
lambdamax(S, kappa = 0, adj = 1 - diag(1, nrow(S)))
kappamax(S, lambda, adj = 1 - diag(1, nrow(S)))
Arguments
S |
The sample covariance matrix. |
kappa , lambda |
The non-negative ridge regularisation/lasso shrinkage parameters. |
adj |
An optional matrix whose pattern of zeroes is to be enforced onto the final output of the Generalised Iterative Conditional Fitting algorithm. |
Details
These utility functions describe the boundary of the region
\mathcal{H} = \{(\kappa, \lambda) \in \mathbb{R}_{\geq 0}^2: \lambda \leq \lambda_{MAX}(\kappa)\},
with
\lambda \leq \lambda_{MAX}(\kappa) \Longleftrightarrow \kappa \leq \kappa_{MAX}(\lambda),
\lambda_{MAX}(\kappa) = \max_{{i,j}\in\mathcal{G}}\frac{|s_{ij}|}{(s_{ii} + \kappa)(s_{jj} + \kappa)},
\kappa_{MAX}(\lambda) = \max_{\substack{{i,j}\in\mathcal{G}\\ g_{ij}(\lambda)\geq 0}}\left\{\sqrt{\frac{1}{4}(s_{ii} + s_{jj}) + g_{ij}(\lambda)} - \frac{1}{2}(s_{ii}+s_{jj})\right\},
g_{ij}(\lambda) = \frac{|s_{ij}|}{\lambda} - s_{ii}s_{jj}.
Here S
is the sample covariance matrix and \mathcal{G}
is a graph whose adjacency matrix has the same sparsity pattern as adj
.
If the parameters (\kappa, \lambda)
lay outside of \mathcal{H}
, and the starting
point of the Generalised Iterative Conditional Fitting algorithm is \text{diag}(S + \kappa I)
,
then the output will also be \text{diag}(S + \kappa I)
.
Value
lambdamax
returns a scalar value representing \lambda_{MAX}(\kappa)
. kappamax
returns a scalar value representing \kappa_{MAX}(\lambda)
Examples
# An example with a banded covariance matrix
library(mvtnorm)
set.seed(1234)
p <- 10
n <- 500
# Create banded covariance matrix with three bands
band1 <- cbind(1:(p - 1), 2:p)
band2 <- cbind(1:(p - 2), 3:p)
band3 <- cbind(1:(p - 3), 4:p)
idxs <- rbind(band1, band2, band3)
Sigma <- matrix(0, p, p)
Sigma[idxs] <- 0.5
Sigma <- Sigma + t(Sigma)
diag(Sigma) <- 2
# Generate data
data <- rmvnorm(n, sigma = Sigma)
S <- cov(data) * (n - 1)/n
# Fix a value of lambda and compute k_max
lambda <- 0.07
k.max <- kappamax(S, lambda = lambda)
# Check that fit is diagonal
fit <- gicf(S = S, n = n, lambda = lambda, kappa = k.max)
image(fit$sigma != 0)
# Fix a value of kappa and compute l_max
kappa <- 1.15
l.max <- lambdamax(S, kappa = kappa)
# Check that fit is diagonal
fit <- gicf(S = S, n = n, lambda = l.max, kappa = kappa)
image(fit$sigma != 0)
# Repeat steps above, but with correct sparsity pattern specified
lambda <- 0.07
k.max <- kappamax(S, lambda = lambda, adj = Sigma)
fit <- gicf(S = S, n = n, lambda = lambda, kappa = k.max, adj = Sigma)
image(fit$sigma != 0)
kappa <- 1.15
l.max <- lambdamax(S, kappa = kappa, adj = Sigma)
fit <- gicf(S = S, n = n, lambda = l.max, kappa = kappa, adj = Sigma)
image(fit$sigma != 0)