regnet

Regularized Network-Based Variable Selection

Network-based regularization has achieved success in variable selection for high-dimensional biological data due to its ability to incorporate correlations among genomic features. This package provides procedures of network-based variable selection for generalized linear models (Ren et al.(2017) and Ren et al.(2019)). Continuous, binary, and survival response are supported. Robust network-based methods are available for continuous and survival responses.

How to install

install.packages("pak")
pak::pak("jrenstat/regnet")
install.packages("regnet")

Examples

The cross-validation examples below use an explicit foldid vector. Set a seed before running the examples if you want the elastic-net initialization to be exactly reproducible.

Survival response

Example.1 (Robust Network)

library(regnet)
data(SurvExample)
X = rgn.surv$X
Y = rgn.surv$Y
clv = c(1:5) # variable 1 to 5 are clinical variables, we choose not to penalize them here.
foldid = rep(1:5, length.out=nrow(X))
out = cv.regnet(X, Y, response="survival", penalty="network",
                clv=clv, robust=TRUE, foldid=foldid)
out$lambda
fit = regnet(out, out$lambda[1,1], out$lambda[1,2])  
index = which(rgn.surv$beta[-(1:6)] != 0)  # [-(1:6)] removes the intercept and clinical variables that are not subject to selection.
pos = which(fit$coeff[-(1:6)] != 0)  
tp = length(intersect(index, pos))  
fp = length(pos) - tp  
list(tp=tp, fp=fp)  

Binary response

Example.2 (Network Logistic)

library(regnet)
data(LogisticExample)
X = rgn.logi$X
Y = rgn.logi$Y
foldid = rep(1:5, length.out=nrow(X))
out = cv.regnet(X, Y, response="binary", penalty="network",
                foldid=foldid, r = 4.5, robust=FALSE)  
out$lambda 
fit = regnet(X, Y, "binary", "network", out$lambda[1,1], out$lambda[1,2], r = 4.5)
index = which(rgn.logi$beta[-1] != 0)   # [-1] removes the intercept
pos = which(fit$coeff[-1] != 0)  
tp = length(intersect(index, pos))  
fp = length(pos) - tp  
list(tp=tp, fp=fp)  

# Fitting from a cv.regnet object
fit = regnet(out, out$lambda[1,1], out$lambda[1,2])
list(response=fit$para$response,
     penalty=fit$para$penalty,
     selected=sum(fit$coeff[-1] != 0))

Continuous response

Example.3 (Network graphs)

library(regnet)
data(ContExample)
X = rgn.tcga$X
Y = rgn.tcga$Y
clv = (1:2)
fit = regnet(X, Y, "continuous", "network", rgn.tcga$lamb1, rgn.tcga$lamb2, clv =clv, alpha.i=0.5, robust=FALSE)
net = plot(fit)
subs = plot(fit, subnetworks = TRUE, vsize=20, labelDist = 3, theta = 5) 

News

regnet 1.1.0

regnet 1.0.2 [2025-2-9]

regnet 1.0.0 [2022-8]

regnet (development version) [2022-3]

regnet (development version) [2020-5]

regnet 0.4.0 [2019-6-7]

Based on users’ feedback, we have

regnet 0.3.0 [2018-5-21]

regnet 0.2.0 [2017-10-14]

Methods

This package provides implementation for methods proposed in

References