cv.nnGarrote {nnGarrote}R Documentation

Non-negative Garrote Estimator - Cross-Validation

Description

cv.nnGarrote computes the non-negative garrote estimator with cross-validation.

Usage

cv.nnGarrote(
  x,
  y,
  intercept = TRUE,
  initial.model = c("LS", "glmnet")[1],
  lambda.nng = NULL,
  lambda.initial = NULL,
  alpha = 0,
  nfolds = 5,
  verbose = TRUE
)

Arguments

x

Design matrix.

y

Response vector.

intercept

Boolean variable to determine if there is intercept (default is TRUE) or not.

initial.model

Model used for the groups. Must be one of "LS" (default) or "glmnet".

lambda.nng

Shinkage parameter for the non-negative garrote. If NULL(default), it will be computed based on data.

lambda.initial

The shinkrage parameter for the "glmnet" regularization.

alpha

Elastic net mixing parameter for initial estimate. Should be between 0 (default) and 1.

nfolds

Number of folds for the cross-validation procedure.

verbose

Boolean variable to determine if console output for cross-validation progress is printed (default is TRUE).

Value

An object of class cv.nnGarrote

Author(s)

Anthony-Alexander Christidis, anthony.christidis@stat.ubc.ca

See Also

coef.cv.nnGarrote, predict.cv.nnGarrote

Examples


# Setting the parameters
p <- 500
n <- 100
n.test <- 5000
sparsity <- 0.15
rho <- 0.5
SNR <- 3
set.seed(0)
# Generating the coefficient
p.active <- floor(p*sparsity)
a <- 4*log(n)/sqrt(n)
neg.prob <- 0.2
nonzero.betas <- (-1)^(rbinom(p.active, 1, neg.prob))*(a + abs(rnorm(p.active)))
true.beta <- c(nonzero.betas, rep(0, p-p.active))
# Two groups correlation structure
Sigma.rho <- matrix(0, p, p)
Sigma.rho[1:p.active, 1:p.active] <- rho
diag(Sigma.rho) <- 1
sigma.epsilon <- as.numeric(sqrt((t(true.beta) %*% Sigma.rho %*% true.beta)/SNR))

# Simulate some data
library(mvnfast)
x.train <- mvnfast::rmvn(n, mu=rep(0,p), sigma=Sigma.rho)
y.train <- 1 + x.train %*% true.beta + rnorm(n=n, mean=0, sd=sigma.epsilon)
x.test <- mvnfast::rmvn(n.test, mu=rep(0,p), sigma=Sigma.rho)
y.test <- 1 + x.test %*% true.beta + rnorm(n.test, sd=sigma.epsilon)

# Applying the NNG with Ridge as an initial estimator
nng.out <- cv.nnGarrote(x.train, y.train, intercept=TRUE,
                        initial.model=c("LS", "glmnet")[2],
                        lambda.nng=NULL, lambda.initial=NULL, alpha=0,
                        nfolds=5)
nng.predictions <- predict(nng.out, newx=x.test)
mean((nng.predictions-y.test)^2)/sigma.epsilon^2
coef(nng.out)



[Package nnGarrote version 1.0.4 Index]